|
UART Mega8, Странное поведенеие |
|
|
|
Apr 26 2007, 16:29
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038

|
Дорый день! Немного удивляет поведение юарта в этом МК. Исходник Код void main( void ) { UCSRA=0x00;//UART init UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x5F;
DDRC |=0x03; DDRD |=0x80; PORTC=0x00; asm("sei"); while(1) { } } void USART_Transmit( unsigned char data ) { while ( !( UCSRA & (1<<5)) ); UDR = data; } Обработчик Код #pragma vector = USART_RXC_vect __interrupt void USART_Receive(void) { PORTD |=0x80; USART_Transmit(UDR); PORTD &=~0x80; } Прикол в том что если с терминала ему слать данные то он нормально отвечает то что и принял. А вот строки Код PORTD |=0x80; и Код PORTD &=~0x80; он обрабатывает только при первом принятом символе. Дльше никаких дёрганий. В чем может быть Ошибка. Спасиба!!!
|
|
|
|
|
 |
Ответов
|
Apr 26 2007, 21:13
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Denisvak - Вообще то при вниматьном прочтении ДШ на этот кристалл замечаем на странице 151 такую вещь как начальное состояние битов регистра UCSRA, так, если приглядется получше то можно увидеть что он изначально установлен в 1. То есть Amper25 всё правильно написал. Но на счёт ( ( UCSRA & (1<<5)) != 0x00 ) - я думаю это уж слишком... Это - //send char proc void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; } тоже неплохо работает, да и взято с того же самого даташита
|
|
|
|
|
Apr 26 2007, 22:21
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Kuzmi4 @ Apr 26 2007, 20:13)  2 Denisvak - Вообще то при вниматьном прочтении ДШ на этот кристалл замечаем на странице 151 такую вещь как начальное состояние битов регистра UCSRA, так, если приглядется получше то можно увидеть что он изначально установлен в 1. То есть Amper25 всё правильно написал. То есть Amper25 написал все с точностью до наоборот. Действительно, UDRE равен единице, UCSR0A & (1<<UDRE0) равен (1<<UDRE0), т.е не нулю, а !(UCSR0A & (1<<UDRE0)) равен нулю. Поэтому никакого зависания в цикле в начале не будет. И ничего отправлять предварительно не нужно. Цитата(Denisvak @ Apr 26 2007, 18:51)  З.Ы. Мне просто этой ногой нужно переключать направление 485-го. Тогда вам нужно для выключения передатчика использовать прерывание по TXC
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Denisvak UART Mega8 Apr 26 2007, 16:29 AlexBoy Может до строки PORTD &=~0x80; он и не доходит... Apr 26 2007, 16:43 sKWO Цитата(Denisvak @ Apr 26 2007, 16:29) Нем... Apr 26 2007, 17:29 SasaVitebsk Использовал эту мегу в качестве модема с полным уп... Apr 26 2007, 19:09 freux Цитата(Denisvak @ Apr 26 2007, 17:29) Код... Apr 26 2007, 19:28 Denisvak По ходу дела все таки он их обрабатывает, просто я... Apr 26 2007, 19:51 freux Цитата(Denisvak @ Apr 26 2007, 20:51) Впи... Apr 27 2007, 11:14  Denisvak Цитата(freux @ Apr 27 2007, 12:14) Вставл... Apr 27 2007, 13:28 Amper25 void USART_Transmit( unsigned char data )
{
whil... Apr 26 2007, 20:21 Denisvak Цитата(Amper25 @ Apr 26 2007, 21:21) void... Apr 26 2007, 20:42 =GM= Цитата(Amper25 @ Apr 26 2007, 17:21) Кста... Apr 27 2007, 02:01  Сергей Борщ Цитата(=GM= @ Apr 27 2007, 01:01) Кстати,... Apr 27 2007, 09:55   =GM= Цитата(IgorKossak @ Apr 27 2007, 05:39) О... Apr 27 2007, 15:41    IgorKossak Цитата(=GM= @ Apr 27 2007, 15:41) Насчёт ... Apr 27 2007, 16:08    Сергей Борщ Цитата(=GM= @ Apr 27 2007, 14:41) Что-то ... Apr 27 2007, 17:36     =GM= Цитата(Сергей Борщ @ Apr 27 2007, 14:36) ... Apr 28 2007, 00:02    Denisvak Цитата(=GM= @ Apr 27 2007, 16:41) Кстати,... Apr 27 2007, 19:05     Сергей Борщ Цитата(Denisvak @ Apr 27 2007, 18:05) Дум... Apr 27 2007, 19:24      Denisvak Цитата(Сергей Борщ @ Apr 27 2007, 20:24) ... Apr 27 2007, 19:37     =GM= Цитата(Denisvak @ Apr 27 2007, 16:05) Дум... Apr 27 2007, 23:14      Сергей Борщ Цитата(=GM= @ Apr 27 2007, 22:14) Нет, эт... Apr 27 2007, 23:57      Сергей Борщ Цитата(=GM= @ Apr 27 2007, 22:14) Я верю,... Apr 28 2007, 00:10       =GM= Цитата(Сергей Борщ @ Apr 27 2007, 21:10) ... Apr 28 2007, 00:37        Сергей Борщ Цитата(=GM= @ Apr 27 2007, 23:37) Из книг... Apr 28 2007, 01:05 Kuzmi4 2 Сергей Борщ - я имел ввиду что, согласен с тем ч... Apr 27 2007, 08:33 IgorKossak Оператор ! это не побитная инверсия, а логичес... Apr 27 2007, 09:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|