Здравствуйте. Вопрос по UATR на ATmega48

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 61
Зарегистрирован: Пн окт 03, 2011 09:49:59

Сообщение port_wine777 »

Здравствуйте. Помогите рабочим примером обработки прерывания по приёму байта по UART(скорость 9600, нет parity, 8 бит данных, 2 стоповых, нужно настроить именно так!!!). Из даташита достал пример, он не работает, может я что то не так делаю? Помогите люди добрые!!!


//Мой исходник в CodeVision AVR

#include <mega48.h>
#include <delay.h>
#include <stdio.h>
#define FOSC 20000000 // Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1

unsigned char tmp, ib, URTNR0;
long int tt;
float R;
unsigned char dbd[16] = {187, 10, 115, 91, 202, 217, 249, 11, 251, 219, 235, 248, 177, 122, 241, 225};

void USART_Init(unsigned int ubrr)
{
/*Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/*Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

void main(void)
{
DDRC.0=1;
DDRC.1=1;
DDRB.2=0;
PORTB.2=0;
DDRD.2=1;
DDRD.3=1;
DDRD.4=1;
DDRD.5=1;
DDRD.6=1;
DDRD.7=1;
USART_Init(0x0081);
#asm("sei")


while(1)
{
delay_ms(1000);
}
}

interrupt [USART_RXC] void usart_rx_isr(void)
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get and return received data from buffer */

//дальше идёт обработка прерывания, выводится цифра на индикатор,
//подключенный к порту D и C и потом счётчик увеличивается на 1,
//но это почему-то не работает!!! Помогите!!!

tmp = URTNR0;
tmp = dbd[tmp];
PORTD = tmp;
PORTC = tmp;
URTNR0 = URTNR0 + 1;
}
Реклама
Открыл глаза
Сообщения: 61
Зарегистрирован: Пн окт 03, 2011 09:49:59

Сообщение port_wine777 »

ОЙ опечатка не UATR а UART
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Сообщение md5sum »

В void USART_Init не включили прерывание по приему.
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
— Не говорите мне что делать и я не скажу куда Вам идти...
Открыл глаза
Сообщения: 61
Зарегистрирован: Пн окт 03, 2011 09:49:59

Сообщение port_wine777 »

md5sum писал(а):В void USART_Init не включили прерывание по приему.
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
Огромное спасибо))
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «AVR»