Я так и не понял как объяснить компилятору какая функция есть обработкой прерываний.
Если вопрос про AVR-Libc то там прерывания объявляются так:
Код:
ISR(ИМЯ_ПРЕРЫВАНИЯ){ какой-то код }
что писать вместо ИМЯ_ПРЕРЫВАНИЯ можно посмотреть в avr/interrupt.h Например срабатывание таймера 0 по совпадению с регистром сравнения для ATmega328p:
Работаю с пик. Компилятор HI-TECH Software. во всех функциях обработки прер. что я видел есть ччастичка int. если она есть то значит прерывание уходит в эту функцию. Или как?
прерывание уходит на адрес 4, ключевое слово interrupt - компилятор размещает функцию именно по этому адресу - и включает код, сохраняющий - восстанавливающий контекст прерывания. interrupt void my_name(void) {
доброе время суток коты. я программирую PIC-и на асеммблере, сейчас пытаюсь програмировать на Си в HI-TECH, вопрос вот в чём, имеется результат преоброзований АЦП он в пике лежит в 2-х байтах да ктомуже в 2-х банках. а как мне его переправить в переменную типа << int >>.
_________________ Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
доброе время суток коты. я программирую PIC-и на асеммблере, сейчас пытаюсь програмировать на Си в HI-TECH, вопрос вот в чём, имеется результат преоброзований АЦП он в пике лежит в 2-х байтах да ктомуже в 2-х банках. а как мне его переправить в переменную типа << int >>.
Код:
unsigned int adc_res; .... adc_res=(ADRESH<<8)+ADRESL;
Всё остальное компилятор делает сам. Это в случае если результат АЦП "Right justified". Если хочется Left justified догадайся сам Вообще в комплекте с компилятором (в папке samples) идёт коллекция примеров с подробными коментариями практически по всем основным темам.
Ребят, разобрался с прерываниями. Терь тупик. Немогу сделать 1 секундное прерывание. кварц часовой, предделитель 128. 256*128=32768. Тоесть всё чётко ии ббез заморочек. Но в протеусе порт у меня моргает Гдето рас в 2-3 сикунды. Это тошо протеус глючится или чтото не так делаю?
void pauza (void){ // начало переменная unsigned int x; // локальная x = 20000; // в tmp поместить некое максимальное число while (x-->0); }// конец функции
void podgot (void) { TRISA = 0b11110000; // направление работы ножек порта А TRISB = 0b00000000; // направление работы ножек порта В CMCON = 0x07; // отключение компараторов PORTA = 0; // очищаем порт А PORTB = 0; // очищаем порт Б RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) OPTION = 0b10010110; T0CS = 0; // внутренний тактовый сигнал T0IE = 1; //разрешить прерывания от TMR0 GIE = 1; //разрешить глобальные прерывания
} void main (void) { podgot (); TMR0=0; while (1) {
ооо спасиибо FlySnake. оказывается всё очень просто. спасибо за помощь.
_________________ Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
недельку пробую PIC C18. С кнопочками/мигалочками всё получилось сразу. Потом решил подрубить ЖКИ. Использовал для этого официальные библиотеки. Всё работает, кроме ф-ции для вывода строки:
Код:
putrsXLCD ('Hello World');
И она нифига не работает у меня... Делал и по примеру и не по примеру... на ЖКИ она ничего не выводит. Объясните, пожалуйста, как её правильно использовать, а то выводить по символу ещё дольше чем на асме П.С. Интересует именно эта библиотека, хочу понять в чём дело.
Двойные кавычки для строковой константы нужны, а у вас одинарные как для отдельного char-а. Чесно говоря не знаю как C18 это проглатывает, но по-хорошему это фишка Си.
что-то мне подсказывает, что дело не в компиляторе, какие-то времянки не выдержаны, паузу сделайте, что же там выводить.. void lcd_puts(const rom char *s) { char chByte; do{ chByte=*s++; WriteDataXLCD(chByte); }while(chByte); }
urry Не работает, хоть ты тресни. Скачал другую библиотеку - всё сразу и без проблем. На выходных залезу в ту библиотеку, попытаюсь разобраться. Спасибо, что откликнулись! Это не последний мой вопрос по С
мне как-то трудно озадачиться проблемой - та хрень, что я выложил, работает и в проте, и в железе, зачем как бы искать приключений.... работает - не трогай ! вот мой девиз...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения