|
|
  |
HI-TECH C |
|
|
|
Oct 20 2008, 04:43
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 19 2008, 13:50)  Вы немного неправильно указали адрес,но я туда все равно попал Проблема не в программе задержки,я её сам написал. Проблема в том,что я не смог вызвать вышеозначенную функцию,и это меня сильно огорчает. Также я не смог указать частоту посредством XTAL_FREQ . Вот в чем основная проблема. Ссылку поправил delay.h. Хотя странно это вроде проверял. Приведите функцию и участок программы с локализацией проблемы, короткий.
|
|
|
|
|
Oct 20 2008, 13:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 20 2008, 07:43)  Ссылку поправил delay.h. Хотя странно это вроде проверял. Приведите функцию и участок программы с локализацией проблемы, короткий. #include <pic.h> #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; near char reload = 0; _XTAL_FREQ=4MHZ; extern void DelayMs(unsigned char); main() { __CONFIG(HS & WDTDIS & PWRTEN & BORDIS & LVPDIS); TRISA=0X00; TRISB=0XFF; TRISD=0X0F; while(1) {PORTA=0X00; DelayMs(3); PORTA=0xff; } } С вызовом я разобрался при написании вам ответа,до этого момента не мог добиться победы. Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. И пользуясь случаем что такое и для чего near.И у меня еще есть кучка вопросов.Ответите???
|
|
|
|
|
Oct 21 2008, 19:18
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 20 2008, 16:16)  #include <pic.h>
#include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; near char reload = 0; _XTAL_FREQ=4MHZ;
С вызовом я разобрался при написании вам ответа,до этого момента не мог добиться победы. Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. И пользуясь случаем что такое и для чего near.И у меня еще есть кучка вопросов.Ответите??? Так и должно быть в delay.h макрос описан. Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } и указать компилятору значение можно только так #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ Поменяй этот #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; на тот, что я указал. Да еще лучьше просто копировать в папку проекта.
|
|
|
|
|
Oct 22 2008, 15:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(DL36 @ Oct 21 2008, 22:18)  Так и должно быть в delay.h макрос описан. Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } и указать компилятору значение можно только так #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ Поменяй этот #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"; на тот, что я указал. Да еще лучьше просто копировать в папку проекта. Я так и сделал.Но вылезла куча ошибок.Как мог убрал,но задержка генерируется фиксированная ,что бы не менял.При использовании #define XTAL_FREQ ХХХ MHZ с любой частотой ничего не меняется. Это я про пример из samples я попробовал _delay_ms() из описания на хайтек таже фигня,но я не успокоился и нашел #define uS_CNT 163 и все стало хорошо 163 это период моего кварца. Я так и не прорубил про XTAL_FREQ это что явное надувательство?Кстати или нет но в 18 пике мой текст,верхний,не пошел.
|
|
|
|
|
Oct 22 2008, 15:48
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 22 2008, 18:31)  Я так и сделал.Но вылезла куча ошибок.Как мог убрал,но задержка генерируется фиксированная ,что бы не менял.При использовании #define XTAL_FREQ ХХХ MHZ с любой частотой ничего не меняется. Это я про пример из samples я попробовал _delay_ms() из описания на хайтек таже фигня,но я не успокоился и нашел #define uS_CNT 163 и все стало хорошо 163 это период моего кварца. Я так и не прорубил про XTAL_FREQ это что явное надувательство?Кстати или нет но в 18 пике мой текст,верхний,не пошел. Все работает, приложите к сообщению короткий запакованный проект, поправлю. У Вас нет понимания процесса.
|
|
|
|
|
Oct 22 2008, 17:57
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 20 2008, 17:16)  Код #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h";
_XTAL_FREQ=4MHZ;
extern void DelayMs(unsigned char); ... Однако _XTAL_FREQ=4MHZ; в любых вариантах вызывает бурную реакцию хайтека. Кто такой _XTAL_FREQ, я не знаю, как, похоже, и компилятор. Может быть так пройдет? Код #define XTAL_FREQ 4MHZ #include "C:\Program Files\HI-TECH Software\PICC\std\9.60\samples\delay\delay.h"
// а это уже есть в delay.h //extern void DelayMs(unsigned char); ... Интересно, для кого я писал: Цитата Вы можете задать XTAL_FREQ обычным #define XTAL_FREQ 4MHZ перед #include "path_to/delay.h"
|
|
|
|
|
Oct 23 2008, 12:41
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
xemul считаю своим долгом извиниться перед вами-виноват недоглядел Однако :#include <pic18.h> //#define XTAL_FREQ=5MHZ #include "C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\samples\delay\delay.h"; #define XTAL_FREQ=9MHZ //#define XTAL_FREQ=1MHZ main() { __CONFIG(1,HS & OSCSDIS); __CONFIG(2,BOREN & BORV42 & PWRTEN & WDTPS128 & WDTDIS); __CONFIG(4,DEBUGEN & LVPDIS & STVREN); TRISA=0X00; TRISB=0XFF; TRISD=0X00; LATD=0x0f; while(1) { PORTA=0X00; // DelayMs(10); DelayUs(10); PORTA=0xff; //DelayMs(40); DelayUs(40); } } Если поставить #define перед #include то транслятор начинает возмущаться. Должен отметить,что если заменить DelayUs(10); на DelayMs(10); то появляется сообщение об ошибке  Естественно что изменение цифр в #define XTAL_FREQ=5MHZ ни к чему не приводит. Для DL36 запрошенные вами файлы прилагаются.
|
|
|
|
|
Oct 23 2008, 14:10
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Вы таки невнимательны. Код #define a b // OK #define a=b // препроцессор Вас не поймет ЗЫЖ попробуйте использовать в сообщении теги code и /code для текстов программ (теги заключаются в [])
|
|
|
|
|
Oct 23 2008, 15:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
 да. про code можно подробнее.Я готов их использовать только объясните где  и зачем В железе не проверял,но после #define XTAL_FREQ 5MHZ или сколь надо,в list файле отмечена положительная реакция на смену цифры. Однако транслятор выкинул предупреждение о нежелательности задания частоты подобным образом. Вы правы. не подскажете как облагородить list такого кол-ва ненужных букв я ещё нигде не видел.
|
|
|
|
|
Oct 23 2008, 17:31
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 23 2008, 19:21)  про code можно подробнее.Я готов их использовать только объясните где  и зачем Без тегов: main() { while(1) { } } С тегами: Код main() { while(1) { сохраняется форматирование кода, и не приходится ломать глаза и голову } } В окне редактирования сообщения в панели инструментов есть кнопка с буквой #. Вот она и вставляет теги code и /code. Еще одна полезная кнопка там же - красная буква Хе (а может быть и крест  ) поверх буквы T - "Закрыть все теги". Цитата В железе не проверял,но после #define XTAL_FREQ 5MHZ или сколь надо,в list файле отмечена положительная реакция на смену цифры. Однако транслятор выкинул предупреждение о нежелательности задания частоты подобным образом. Вот ведь гад... Не знаю, у меня он на XTAL_FREQ, заданный любым допустимым образом, не ругается. Цитата не подскажете как облагородить list такого кол-ва ненужных букв я ещё нигде не видел. Вы имеете в виду файлы листингов *.lst? Опять же не знаю - мне там все буквы нравятся и кажутся весьма полезными.
|
|
|
|
|
Oct 24 2008, 06:12
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Все до безобразия просто результат: Цитата Memory Summary: Program space used 24h ( 36) of 4000h bytes ( 0.2%) Data space used 0h ( 0) of 300h bytes ( 0.0%) EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) External data memory None available ID Location space used 0h ( 0) of 8h nibbles ( 0.0%) Configuration bits used 4h ( 4) of 7h words ( 57.1%)
Loaded C:\#Work\tmp\Tst\Tst.cof.
********** Build successful! ********** С правками Код #include <pic18.h>
#define XTAL_FREQ 4MHZ #include "dl36.h"; //Этот файл надо всключить в проект
main() { __CONFIG(1,HS & XT); __CONFIG(2,BOREN & BORV42 & PWRTEN & WDTPS128 & WDTDIS); __CONFIG(4,DEBUGEN & LVPDIS & STVREN);
TRISA=0X00; TRISB=0XFF;
TRISD=0X00; LATD=0x0f; а это править нииииизя, пока понимание не прийдет Код #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif
#define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */
#define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } /* #define DelayUs(x) { unsigned char _dcnt; _dcnt = (unsigned char)((x)*((XTAL_FREQ*1.0)/(12MHZ))); while(--_dcnt != 0) continue; } */ extern void DelayMs(unsigned char);
Прикрепленные файлы
Tst.rar ( 58.58 килобайт )
Кол-во скачиваний: 32
|
|
|
|
|
Oct 25 2008, 06:01
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(Евгений Германович @ Oct 24 2008, 17:53)  Простите,но мой _XTAL_FREQ 4MHZ длиннее вашего на одно подчеркивание Или я опять чтото проглядел? Должно быть одинаково если #define _XTAL_FREQ 4MHZ то и Код #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (((long)(x))*(long)(_XTAL_FREQ))/(long)(12MHZ); \ while(--_dcnt != 0) \ continue; } Вам же символ _ ни к чему. В хайтеке _используется если надо из асма обратиться к сишной переменной.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|