Attiny2313 не могу инициализировать USART
Attiny2313 не могу инициализировать USART
Здравствуйте уважаемые форумчане и доброго времени суток.
Я пытался инициализировать 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); // задаем формат кадра сигнала
}
Я пытался инициализировать 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
А визардом сначала?
Re: Attiny2313 не могу инициализировать USART
всмысле?:) т.е. в создании самого проекта сразу настроить юзарт?
Re: Attiny2313 не могу инициализировать USART
Конечно. Они ведь называются UBRRH и UBRRLон не знает, что такое UBBRH и UBBRL
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Attiny2313 не могу инициализировать USART
Код: Выделить всё
#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
- Реклама
Re: Attiny2313 не могу инициализировать USART
ОЙploop писал(а):Конечно. Они ведь называются UBRRH и UBRRLон не знает, что такое UBBRH и UBBRL
Re: Attiny2313 не могу инициализировать USART
Юрий спасибо! Я так понимаю вверху по формуле для асинхронного режима рассчитывается значение для регистра скорости, т..е. 51 для 9600 бод, а далее идет сама инициализация. Ведь так?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
Re: Attiny2313 не могу инициализировать USART
Почитайте вот тут, всё доходчиво описано по настройке.
Re: Attiny2313 не могу инициализировать USART
Все конечно хорошо, регистры описаны отлично, но примеры на ассемблере, а я в нем не шарю)ploop писал(а):Почитайте вот тут, всё доходчиво описано по настройке.
Re: Attiny2313 не могу инициализировать USART
Да без разницы примеры, общую суть пойми, какой регистр за что отвечает и как рассчитывается значение в UBRR
Re: Attiny2313 не могу инициализировать USART
уже многое понял, продолжаю досконально изучать!
Re: Attiny2313 не могу инициализировать USART
Я переписал инициализацию, только вот не понимаю, что должна возвращать функция инициализации...
вот что получилось:)
#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 бит
}
вот что получилось:)
#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 бит
}
Re: Attiny2313 не могу инициализировать USART
Ничего. Она же у тебя объявлена как voidтолько вот не понимаю, что должна возвращать функция инициализации...
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Attiny2313 не могу инициализировать USART
Какая размерность int ?
int XTAL = 8000000; // Рабочая частота контроллера в Гц
Почему не задефайнить ?
int XTAL = 8000000; // Рабочая частота контроллера в Гц
Почему не задефайнить ?
Re: Attiny2313 не могу инициализировать USART
Я пробовал сначала дефайном, но он все время повторял, что где-то после дефайна пропущена скобка.urry писал(а):Какая размерность int ?
int XTAL = 8000000; // Рабочая частота контроллера в Гц
Почему не задефайнить ?
А зачем размерность? Мне значение нужно для вычисления значения по формуле, я получаю 51 и записываю в регистр скорости и тогда скорость ровна 9600 бод.
Re: Attiny2313 не могу инициализировать USART
Как вы и посоветовали я задефайнил, плюс написал функцию передачи и главную управляющую функцию
Вот:
#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);
}
Вот:
#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);
}


