реклама на сайте
подробности

 
 
> atmega8 usart, проблема с усартом
Kirill Trusov
сообщение Aug 23 2007, 18:53
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-08-07
Пользователь №: 29 867



Здраствуйте, я делал устройство чтобы оно с уарта брало символы и в дисплей их загоняло на тини2313
и дернул меня черт переделать его на мегу8

написал, включил не работает уарт....

использую винавр от 2007 25 мая вроде и студию тоже вроде последнию...
включаю симуляция и вижу что инициализация неверная
Код
void USART_init(void)
{
  cli();
  UCSRB = (1<<RXEN)|(1<<RXCIE);
  UCSRC = 0b10000110;
  UBRRH = 0x00;
  UBRRL = (unsigned char)47;
  sei();
}


а именно, ккогда в ucsrc а записываю значение, он его же записывае и в ubrrh
а когда я обнуляю ubrrh он обнуляет и контрольный регистр Ц.....

бред какойто ........
help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Guest_=AVR=_*
сообщение Aug 23 2007, 19:12
Сообщение #2





Guests






Из-за того, что при проектировании Меги8 не хватило одного адресочка, регистры UBRRH и UCSRC живут по одному и тому же адресу, и в какой из них будет проведена запись - определяется старшим (7) битом в этом адресе - URSEL. Когда он в 0 - запись идет в UCSRC, когда в 1 - в UBRRH. Для чтения UCSRC надо читать этот адрес дважды подряд при выключенных прерываниях. Кури даташыт, все разжевано в разделе USART
Go to the top of the page
 
+Quote Post
vesago
сообщение Aug 23 2007, 19:16
Сообщение #3


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Вот примерчик инициализации
Код
void USART_Init( unsigned int baudrate )
{
  unsigned char x;

  UBRRH = (unsigned char) (baudrate>>8);
  UBRRL = (unsigned char) baudrate;

  UCSRA = (1 << U2X);
  /* Enable UART receiver and transmitter */
  UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) | ( 1 << TXCIE ));

  /* Set frame format: 8 data 2stop */
  UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);

  /* Flush receive buffer */
  x = 0;

  USART_RxTail = x;
  USART_RxHead = x;
  USART_TxTail = x;
  USART_TxHead = x;
}


зы тоже как-то накололся - писал для m168, m128 - проблем не было. Потом вствил драйвер в код для m16 - перестало работать. Что только не делал - даже макс232 перепаял. Потом, когда уже когда ничего не оставалось, заглянул в даташит. Воистину "Если ты всё перепробовал, и ничего не получается, прочти, наконец, инструкцию. (Вольное переложение закона Мерфи)"
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016