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

 
 
> USART
KIG
сообщение Jul 25 2007, 10:13
Сообщение #1


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

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Здравствуйте!
Пытаюсь передать цифру 5 через USART ATmega16 на компьютер в программу Terminal. На компьютере принамаю вместо одной цифры три, причем среди них нет ни одной пятерки. В программе Terminal установил скорость передачи в 115200 кбит/с, 2 стоповых бита, 8 бит в кадре. Код программы привел ниже. В чем причина, что я делаю неправильно?

#include <iom16v.h>
#include <macros.h>

void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UBRRL = 0x01; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRC = 0x8E;
UCSRB = 0x08;
}

void putchar(char ch)
{ while (!(UCSRA&(1<<UDRE)));
UDR=ch;
}

void main(void)
{CLI(); //disable all interrupts
uart0_init();
SEI(); //re-enable interrupts
putchar(5);
while(1);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Jul 25 2007, 10:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



По поводу baudrate : я делаю так

Код
#define CPU_CLOCK     14745600U /* clock in Hz */
...
#define USART_BAUD_RATE  115200U    /* USART baud rate */
...
#define USART_BAUD_RATE_CONST  (((CPU_CLOCK / 16) / USART_BAUD_RATE) - 1)
...
...
void USART0_Init(void)
{
   /* setup baud rate */
    UBRR0L = (UCHAR)(USART0_BAUD_RATE_CONST);
    UBRR0H = (UCHAR)(USART0_BAUD_RATE_CONST >> 8);

   /* setup frame and enable USART */
    UCSR0C = (USART0_FRAME_SETUP);
    UCSR0B = ((1 << RXEN0) | (1 << TXEN0) | (1 << TXCIE0));

   ...
}



PS: ИМХО записи типа UCSR0C = 0хА2 ну оччень не наглядны, особливо если работаешь на нескольких платформах и периодически их меняешь... А мож у мя память девичья biggrin.gif


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 25 2007, 12:21
Сообщение #3


Гуру
******

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



Цитата(prottoss @ Jul 25 2007, 13:47) *
Код
#define USART_BAUD_RATE_CONST  (((CPU_CLOCK / 16) / USART_BAUD_RATE) - 1)
Такая формула может давать погрешность из-за отсекания дробной части результата вместо округления. Вот так будет правильнее:
Код
#define USART_BAUD_RATE_CONST  ((((CPU_CLOCK) / 16) + ((USART_BAUD_RATE) / 2 - 1) / (USART_BAUD_RATE) - 1)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KIG   USART   Jul 25 2007, 10:13
- - KRS   Цитата(KIG @ Jul 25 2007, 14:13) На компь...   Jul 25 2007, 10:19
|- - KIG   Цитата(KRS @ Jul 25 2007, 13:19) Так на м...   Jul 25 2007, 12:22
|- - prottoss   Цитата(Сергей Борщ @ Jul 25 2007, 20:21) ...   Jul 25 2007, 12:46
- - =GM=   Цитата(KIG @ Jul 25 2007, 09:13) Пытаюсь ...   Jul 25 2007, 12:13
- - Igor26   А почему два стоп-бита?   Jul 25 2007, 12:59
|- - Сергей Борщ   Цитата(Igor26 @ Jul 25 2007, 15:59) А поч...   Jul 25 2007, 14:05
|- - =GM=   Цитата(Сергей Борщ @ Jul 25 2007, 13:05) ...   Jul 26 2007, 12:12
|- - Сергей Борщ   Цитата(=GM= @ Jul 26 2007, 15:12) Ну здес...   Jul 26 2007, 14:45
|- - =GM=   Цитата(Сергей Борщ @ Jul 26 2007, 13:45) ...   Jul 26 2007, 15:18
- - SasaVitebsk   Даже ещё усугублю немножко. Я тут хомутнул и на...   Jul 26 2007, 20:20
- - colombo_2007   Я так и не понял решилась ли у вас проблема. Если ...   Jul 27 2007, 05:50
|- - KIG   Цитата(colombo_2007 @ Jul 27 2007, 08:50)...   Jul 27 2007, 16:45
|- - prottoss   Цитата(KIG @ Jul 28 2007, 00:45) Проблема...   Jul 27 2007, 17:02
|- - =GM=   Цитата(KIG @ Jul 27 2007, 16:45) В зависи...   Jul 27 2007, 21:42
|- - Petka   Цитата(=GM= @ Jul 28 2007, 01:42) Чтобы и...   Jul 28 2007, 08:18
- - KIG   Спасибо за помощь! Постараюсь сегодня попробов...   Jul 30 2007, 07:50


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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 00:45
Рейтинг@Mail.ru


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