单独调试发送部分是正常的。
接收时,用串口调试助手,发现一直是0x00,在AVR stdio 里,RXC始终是1,UDR是0x00。不知道是什么原因,是程序哪里有错么?
#include<iom16v.h>
#include<macros.h>
void uart_init(void)
{
CLI();
UCSRB=0X00; // 禁止串口
UCSRA=0X02; // 倍速
UCSRC=0X06; // 8位数据
UBRRH=0X00;
UBRRL=12; // 9600
UCSRB=0X18; // 允许发送和接收
SEI();
}
// 数据发送
void uart_transmit(unsigned char i)
{
while(!(UCSRA&(1<<UDRE))); // 等待发送缓冲器为空
UDR=i; // 发送数据
}
// 数据接收
unsigned char uart_receive(void)
{
while(!(UCSRA&(1<<RXC))) // 等待接收数据
return UDR; // 获取数据
}
//主函数
void main(void)
{
unsigned char temp;
uart_init();
while(1)
{
temp=uart_receive();
uart_transmit(temp);
}
} |