ATmega128 を使用して uart をシミュレートしようとしています。このコードは AVR STUDIO 4 で書きました。
PORTB0 はスイッチを使用するためのもので、押すと 5V DC に接続され、「a」が uart1 に送信されます。それ以外の場合は、グランドに接続されます。データの受信は割り込みによるものです。デバッガを使用して、UDR1 にデータがあり、RXC1 が設定されている場合、プログラムは ISR にジャンプし、UDR レジスタはすぐにクリアされ、何も取得されません。なぜこれが起こるのか教えてもらえますか?
これがコードです。
volatile unsigned char rxdata;
void uart_init(void)
{
UCSR1A = 0x00;
UCSR1B |= (1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1); //0b10011000;
UCSR1C |= (1<<7)|(1<<UCSZ11)|(UCSZ10); //0b10000110;
UBRR1H = 0;
UBRR1L = 103; //9600 baud rate
}
ISR(USART1_RX_vect)
{
rxdata = UDR1;
PORTC = rxdata;
}
void putch(char data)
{
while(!(UCSR1A & 0x20));
UDR1 = data;
}
そしてメインプログラムは
void port_init(void)
{
DDRC = 0xFF;
}
int main(void)
{
port_init();
uart_init();
sei();
while(1)
{
if (PINB & 0x01){
putch('a');
}
}
}