Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: uart & mega8535
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
studert
У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял?
Miron
Цитата(studert @ Mar 25 2005, 00:09)
У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял?
*


Попробуй так:
//******************************************************************
//UART initialize
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00; //disable while setting baud rate
UBRRL =0x33; //set baud rate
UBRRH = 0x00;
UCSRC = 0x86;
UCSRA = 0x01; //enable
UCSRB = 0xDC; //enable
}
Olegovich
Цитата(studert @ Mar 25 2005, 00:09)
У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял?
*

Ты всё правильно понял - именно такая ботва происходит, попробуй не трогать эти долбаные регистры. Сейчас плохо помню, но у меня получалось таким образом выставить 9 бит.
Я тут на форуме что-то писал п о этому поводу недавно.
Кажется, по умолчанию UBRRH=0, UCSRC=0x06, это как-то можно использовать.
yung
Цитата(studert @ Mar 25 2005, 00:09)
У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял?
*


Похожую проблему я встречал в какой-то меге, но это был глюк avr-studio (симуляция) , на самом кристалле все нормально работало.
Sergio66
Цитата(studert @ Mar 25 2005, 00:09)
У этого контроллера на одном адресе сидит 2 регистра UBRRH и UCSRC, в одном есть биты отвечающие за число бит, а во втором за делитель частоты кварца. Мне надо выставить делитель в пределах 3-103 и 8бит данных, а не получается выставить 1й и 2й бит независимо в обоих регистрах. В даташите написано, что URSEL отвечает за переключение между этими регистрами, но у меня все равно ничего не получается, пробовал писать с установкой этого бита, все равно пишется в оба регистра. Может я чего не понял?
*


У меня все это работает как часы, и реализовано вот так
void uart0_init(void)
{

UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x86;
UBRRL = 0x17; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
Камень - Mega32, но работает и на Mega16 и на 8535
попробуй! Должно пойти.
Olegovich
Цитата(Sergio66 @ Mar 25 2005, 16:00)
У меня все это работает как часы, и реализовано вот так
void uart0_init(void)
{

UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x86;
UBRRL = 0x17; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
Камень - Mega32, но работает и на Mega16 и на 8535
попробуй! Должно пойти.
*


Между мегами 8515, 8535 и мегой 16 есть разница. В 16-ой этого бага нет точно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.