Добрый день, дорогие форумчане!
Осваиваю UART, столкнулся с такой проблемой: глобальная переменная не видится в прерывании.
Вот код:
В теории программа должна по получению байта записывать его в глобальную переменную и по нажатию кнопки выдавать в канал, но выдает она только то, что в нее занесли при инициализации (либо 0). Подобную тему на этом форуме уже находил, но ничего полезного там не нашел. Заранее спасибо
Раздел: AVR
Осваиваю UART, столкнулся с такой проблемой: глобальная переменная не видится в прерывании.
Вот код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define XTAL 8000000L
#define baudrate 9600L
#define bauddivider (XTAL/(16*baudrate)-1)
volatile unsigned char ccc='d'; //вот она
ISR(USART_RXC_vect)
{
unsigned char temp;
temp=UDR; //без этого прерывание встает
ccc=temp;
}
inline void HrdInit(void)
{
PORTD=(1<<5|1<<4);
DDRB=(1<<3|1<<4);
PORTB=(1<<3|0<<4);
}
void uart_SendByte(unsigned char B)
{
while(!(UCSRA & (1<<UDRE))) ;
UDR=b;
}
unsigned char uart_RecByte(void)
{
while(!(UCSRA&(1<<RXC))) ;
return UDR;
}
void USART_init()
{
UBRRH=(unsigned char)(bauddivider>>8);
UBRRL=(unsigned char)(bauddivider);
UCSRA = 0;
UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE;
UCSRC = 1<<UCSZ0|1<<UCSZ1;
}
void main()
{
USART_init();
HrdInit();
asm("SEI");
while(1)
{
if(!(PIND & (1<<4)))
{
uart_SendByte(ccc);
}
}
В теории программа должна по получению байта записывать его в глобальную переменную и по нажатию кнопки выдавать в канал, но выдает она только то, что в нее занесли при инициализации (либо 0). Подобную тему на этом форуме уже находил, но ничего полезного там не нашел. Заранее спасибо
Раздел: AVR