|
我用两个单片机实现通讯,在发送端可以进入发送完成中断,可以确定没有问题,在接受端怎么接收不到,而且无法进入接收完成中断,搞半天不知是哪里的问题,请帮我分析一下,谢谢!
以下是采用缓冲思路的代码
// USART Receiver interrupt service routine
interrupt [USART_RXC] 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[rx_wr_index]=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[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE)
rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
return 0;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|