我正在尝试使用 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');
}
}
}