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

 
 
> USART ATmega8535
colombo_2007
сообщение Jul 19 2007, 06:12
Сообщение #1


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

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



Доброго врени суток.
Такая проблема: есть ATmega8535 с кварцем в 16мег и программой
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define baudrate 207

ISR(USART_UDRE_vect)
{
UDR=0x71;
}

main()
{
UBRRH = 0;//(unsigned char) (baudrate>>8);
UBRRL = 207;//(unsigned char) baudrate;
UCSRB = _BV(RXEN)|_BV(TXEN)|_BV(UDRIE);
UCSRC = _BV(USBS)|_BV(UCSZ0)|_BV(UCSZ1);
sei();
UDR=0x71;
sleep_mode();
}

Компьютер на передачу реагирует, но принимает 0x00. ПУ стандартный на MAX232. Где я не прав?
Заранее спасибо.


--------------------
Все просто, но нам не заметно
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Eltex
сообщение Jul 19 2007, 06:33
Сообщение #2





Группа: Новичок
Сообщений: 13
Регистрация: 14-07-06
Из: Ukraine
Пользователь №: 18 821



Цитата
Где я не прав?


Вот здесь:
UCSRC = _BV(USBS)|_BV(UCSZ0)|_BV(UCSZ1);

Регистр UCSRC находится в одной области ввода/вывода с UBRRH, стр. 160 даташита.
Go to the top of the page
 
+Quote Post
colombo_2007
сообщение Jul 19 2007, 08:39
Сообщение #3


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

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



Цитата(Eltex @ Jul 19 2007, 09:33) *
Вот здесь:
UCSRC = _BV(USBS)|_BV(UCSZ0)|_BV(UCSZ1);

Регистр UCSRC находится в одной области ввода/вывода с UBRRH, стр. 160 даташита.

Ok. Т.е. ты хочешь сказать, что компилятор хоть и C сам разбираться не хочет, хотя ему явно указано в какой регист я хочу делать I/O?


--------------------
Все просто, но нам не заметно
Go to the top of the page
 
+Quote Post
Eltex
сообщение Jul 19 2007, 09:09
Сообщение #4





Группа: Новичок
Сообщений: 13
Регистрация: 14-07-06
Из: Ukraine
Пользователь №: 18 821



Цитата(colombo_2007 @ Jul 19 2007, 11:39) *
Ok. Т.е. ты хочешь сказать, что компилятор хоть и C сам разбираться не хочет, хотя ему явно указано в какой регист я хочу делать I/O?


И где это ему явно указано?
UCSRC - это всего лишь константа обьявленная дерективой #define соответствующая адрессу ячейки I/O в соответсвующем контроллере, так сложилось что UCSRC и UBRRH находятся в одной ячейке и имеют
соответственно одинаковое значение.
Мало того в дефайнах этого контроллера чаще всего имеет место быть такая запись:

#define UBRRH _SFR_IO8(0x20)
#define UCSRC UBRRH

Так откуда компилеру знать чего Вы от него хотите.

Пишите так как указано выше (AVR).

PS: А в доку видать так и не заглянули....
Go to the top of the page
 
+Quote Post



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

 


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


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