Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт апр 08, 2014 06:18:37
Нашел транзистор. Понюхал.
Зарегистрирован: Сб янв 20, 2007 20:44:33 Сообщений: 164 Откуда: Из закаулков вашей души
Рейтинг сообщения:0
ibiza11 писал(а):
Так кто мешает определять контроллер в main.c, а проверку оставить в библиотеке?
Вчера вечером так и пытался сделать, но ничего не получалось - выходила ошибка "неизвестный" TxSize. С утра сообразил, что сначала надо объявить #define c типом МК, а затем только include подключать требуемую библиотеку. Спасибо за консультацию все заработало.
Коты, подскажите почему когда я пишу UCSRA |= (1<<TXC); printf("%с",UCSRA);
я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
Мне это надо выяснить поскольку надо по завершению передачи выключать передатчик RS485. Вот такой код например: case CmnWritePrefTmr: if(CmndSymb[0]==Adres1){ //zashita ot sluchainoi zapisi wsex esli komanda pridet с 100m adresom EETimeTmr1=((unsigned long int)CmndSymb[2])*845; TimeTmr1=EETimeTmr1; UCSRA |= (1<<TXC);//sbros flaga txc Rs485SendEN=1; printf("NewTimeTmr1=%lu /845",TimeTmr1); while(!(UCSRA & (1<<TXC))); Rs485SendEN=0;
}; break;
МК принимает все отлично а в терминале получаю 09.04.2014 16:55:14.00 [RX] - NewTimeTmr2=845 /8ÿ. И так везде. Только
я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1? .... UCSRA |= (1<<TXC);//sbros flaga txc ... UCSRA |= (1<<TXC);//sbros flaga txc ....
Да, а как его обозвать и правильно include? Пробовал и .h и .c и все ругается.
уж сколько раз твердили миру... а воз и ныне там.
в .h файлы выносятся макроопределения и прототипы функций, определения типов и описания вешних (или глобальных) переменных. в этих файлах по-хорошему не должно быть никаких реализаций функций!!!
в .c файлы вставяются #include со всеми .h файлами, необходимыми для всех функций, которые реализуются или используются в этом модуле. здесь же определяются все переменные.
.c файлы должны компилироваться, т.е. дожны быть включены в проект.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
я даже разволновался: может, я пишу не по-русски? перечитал - вроде нет...
итак, разжевываю:
1. ваш проект состоит из 2 модулей main.c и readrx.c 2. оба этих файла вы добавили в проект 3. чтобы функции readrx.c были доступны в main.c вы обязаны создать readrx.h, в котором описать прототип вашей функции - не знаю, какая там она у вас. 4. в main.c вы пишите #include "readrx.h" 5. компилируете
повторяю: никакого инклюдирования сишных файлов быть не должно!!!!!!!!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
:shock: Коты, подскажите почему когда я пишу UCSRA |= (1<<TXC); printf("%с",UCSRA); я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
Получаем в первый раз 11.04.2014 09:58:25.68 [RX] - 0х20 что и должно быть! После второго раза получаем 0х60 что тоже отлично, т.к. флаг не сбрасывался!
Но, как только убираю delay и ставлю while(!(UCSRA & (1<<TXC))); приходит FF, т.е. передатчик раньше отключается до завершения передачи. Если посылать длинную посылку то не приходят 2 последних символа. В чем ошибка?
Последний раз редактировалось Wasily Пт апр 11, 2014 06:38:57, всего редактировалось 5 раз(а).
"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!
Да в USART через ADM485.
А в чем я ошибаюсь так уж сильно Флаг TXC должен устанавливаться толко после того как последний байт вышел из UDR и нет новых на входе.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения