请马老师帮我看一下我的UART接收是那的问题
我用两个单片机实现通讯,在发送端可以进入发送完成中断,可以确定没有问题,在接受端怎么接收不到,而且无法进入接收完成中断,搞半天不知是哪里的问题,请帮我分析一下,谢谢!以下是采用缓冲思路的代码
// USART Receiver interrupt service routine
interrupt void usart_rx_isr(void)
{
unsigned char status,data;
status=UCSR0A;
data=UDR0;
//如果没有错误那么以下的检测位将为0,如果出错将为1
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer=data;
if (++rx_wr_index == RX_BUFFER_SIZE)
rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
}
}
//读取接受缓冲区的数据
unsigned char getchar(void)
{
char data;
if(rx_counter>0)
{
data=rx_buffer;
if (++rx_rd_index == RX_BUFFER_SIZE)
rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
return 0;
} 我在线等,知道的朋友可以讲一下吗! 接收端串口初始化贴出来看看 这个是书上的缓冲队列例程吧。先确定下两机的自发自收有没问题。我也做了两机收发,没成功。看下硬件电路有没问题。 我的自发自收没有问题,以下是初始化
// 初始化串行异步通讯
void usart_init(unsigned char band)
{
UCSR0B=0X00;//disable while setting baud rate
UCSR0A=0X00;
//设置波特率
UBRR0L=band;
UBRR0H=0x00;
//设置帧格式:8个数据位,2个停止位
UCSR0C=(1<<USBS0)|(3<<UCSZ00);
//接收器和发送器使能,接收完成中断使能
UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);
} 马老师能抽点时间帮我看看吗 SREG=0X80 总中断没有打开吧
页:
[1]