|
|
 |
Ответов
|
Dec 26 2008, 08:50
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664

|
Цитата(_Pasha @ Dec 26 2008, 11:15)  Avrstudio известна некорректной симуляцией этих регистров. Лично наступал на эти грабли. Смотрите листинг, если там все нормально, то на студию можно плюнуть.  ПОЧЕМУ-ТО ВСЕ РАВНО НЕ ШЛЕТ. Вот мои функции: Код void UARTCreate(void) { bit_clear(DDRD, 0); bit_set(DDRD, 1); UBRRL = 77; // скорость 9600. кварц 20000000 UCSRB = 0xD8;//11011000 разрешены прерывания при приеме и при посылке UCSRC = 0x86;//10000110 1 стоп бит, 8бит данных }
void UARTOutByte(unsigned char Value) { UDR = Value; TxReady = 0; do { } while (TxReady == 0); }
ISR(USART_TX_vect) { TxReady = 1; } В main просто процедура UARTOutByte(0xAA) Что не так? P.S. Точнее шлет, не пойми что!!! От модератора. Сообщение отредактировано. Пожалуйста, пользуйтесь тегами code и codebox, для оформления исходных текстов.
|
|
|
|
|
Dec 27 2008, 08:00
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664

|
Цитата(SysRq @ Dec 27 2008, 00:50)  Мнээ.. собстно, если формула расчета baudrate обычная (baudrate = f_osc/(16*(UBRR + 1))), то тут не 9600, а что-то в районе 16к. Принимающая сторона с режимом 9600-8-N-1 будет принимать, но всякую хрень.
PS: TxReady должна быть volatile. Перепутал. Кварц 12000000
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|