Attiny2313 не могу инициализировать USART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Attiny2313 не могу инициализировать USART

Сообщение pyls »

Здравствуйте уважаемые форумчане и доброго времени суток.
Я пытался инициализировать Usart на контроллере attiny2313, прочитал для этого даташиты на него русский и английский, увидел несколько функций инициализации, написал их, но кажется они что-то забыли, т.к. Code Vision AVR показывает ошибки. Может есть другой способ инициализации без функции? Здесь 2 ошибки, он не знает, что такое UBBRH и UBBRL, но я так понял это из-за неизвестных без знаковых переменных.
вот код C

#include <tiny2313.h>
#include <stdio.h>
void USART_init(unsigned int boud) // функция инициализации USART
{
UBBRH = (unsigned char)(boud>>8); // задаем скорость
UBBRL = (unsigned char)boud; // в бодах, т.е. бит\с
UCSRB = (1<<TXEN)|(1<<RXEN); // разрешаем передачу и прием
UCSRC = (1<<USBS)|(3<<UCSZ0); // задаем формат кадра сигнала
}
Реклама
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

Re: Attiny2313 не могу инициализировать USART

Сообщение demiurg301 »

А визардом сначала?
Реклама
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

всмысле?:) т.е. в создании самого проекта сразу настроить юзарт?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Attiny2313 не могу инициализировать USART

Сообщение ploop »

он не знает, что такое UBBRH и UBBRL
Конечно. Они ведь называются UBRRH и UBRRL :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Attiny2313 не могу инициализировать USART

Сообщение urry »

Код: Выделить всё

#define FOSC 12000000ul
#define VBOD 9600ul
#define UBR_ (FOSC/(VBOD*16ul) -1)
#if UBR_ > 255
#error "UART!"
#endif

	UCSRA =0;
	UBRRL =(UBR_&0xFF);
	UBRRH =0;
	UCSRC =  (1 << UCSZ0) | (1 << UCSZ1); //
	UCSRB =(1<<RXEN)|(1<<RXCIE); //rx enable


Реклама
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

ploop писал(а):
он не знает, что такое UBBRH и UBBRL
Конечно. Они ведь называются UBRRH и UBRRL :)
ОЙ :)))
Реклама
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

urry писал(а):

Код: Выделить всё

#define FOSC 12000000ul
#define VBOD 9600ul
#define UBR_ (FOSC/(VBOD*16ul) -1)
#if UBR_ > 255
#error "UART!"
#endif

	UCSRA =0;
	UBRRL =(UBR_&0xFF);
	UBRRH =0;
	UCSRC =  (1 << UCSZ0) | (1 << UCSZ1); //
	UCSRB =(1<<RXEN)|(1<<RXCIE); //rx enable


Юрий спасибо! Я так понимаю вверху по формуле для асинхронного режима рассчитывается значение для регистра скорости, т..е. 51 для 9600 бод, а далее идет сама инициализация. Ведь так?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Attiny2313 не могу инициализировать USART

Сообщение ploop »

Почитайте вот тут, всё доходчиво описано по настройке.
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

ploop писал(а):Почитайте вот тут, всё доходчиво описано по настройке.
Все конечно хорошо, регистры описаны отлично, но примеры на ассемблере, а я в нем не шарю)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Attiny2313 не могу инициализировать USART

Сообщение ploop »

Да без разницы примеры, общую суть пойми, какой регистр за что отвечает и как рассчитывается значение в UBRR
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

уже многое понял, продолжаю досконально изучать!
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

Я переписал инициализацию, только вот не понимаю, что должна возвращать функция инициализации...
вот что получилось:)
#include <tiny2313.h>
#include <stdio.h>
#define speed XTAL/(16*baudrate)-1 // Вычесление значения для регистра скoр.
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
int XTAL = 8000000; // Рабочая частота контроллера в Гц
int baudrate = 9600; // Скорость передачи данных в бит/с



void USART_init(void) // функция инициализации USART
{

UBRR = speed; // задаем скорость

UCSRB SET_B(TXEN); // разрешаем передачу - установка бита TXEN в 1
UCSRC SET_B(USBS); // один стоповый бит
UCSRC = (3<<UCSZ0); // формат кадра - 8 бит
}
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Attiny2313 не могу инициализировать USART

Сообщение ploop »

только вот не понимаю, что должна возвращать функция инициализации...
Ничего. Она же у тебя объявлена как void
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Attiny2313 не могу инициализировать USART

Сообщение urry »

Какая размерность int ?
int XTAL = 8000000; // Рабочая частота контроллера в Гц
Почему не задефайнить ?
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

urry писал(а):Какая размерность int ?
int XTAL = 8000000; // Рабочая частота контроллера в Гц
Почему не задефайнить ?
Я пробовал сначала дефайном, но он все время повторял, что где-то после дефайна пропущена скобка.
А зачем размерность? Мне значение нужно для вычисления значения по формуле, я получаю 51 и записываю в регистр скорости и тогда скорость ровна 9600 бод.
pyls
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс май 15, 2011 21:30:49

Re: Attiny2313 не могу инициализировать USART

Сообщение pyls »

Как вы и посоветовали я задефайнил, плюс написал функцию передачи и главную управляющую функцию
Вот:
#include <tiny2313.h>
#include <stdio.h>
#define speed XTAL/(16*baudrate)-1 // Вычесление значения для регистра скoр.
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
#define XTAL 8000000 // Рабочая частота контроллера в Гц
#define baudrate 9600 // Скорость передачи данных в бит/с

void USART_init(void) // функция инициализации USART
{
UBRR = speed; // задаем скорость
UCSRB SET_B(TXEN); // разрешаем передачу - установка бита TXEN в 1
UCSRC SET_B(USBS); // один стоповый бит
UCSRC = (3<<UCSZ0); // формат кадра - 8 бит
}

void USART_snt(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)) ); // ждем пока очистится буфер передачи
// как только UDRE установится
UDR = data; // начать передачу данных
}

void main(void)
{
unsigned char data = 0xFF;
USART_init();
USART_snt(data);
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»