各位高手,我是个刚开始用AVR的小鸟,请教一个uart中断接收的问题。我在电脑这边用串口调试肋手向单片机发数据,发的是ascii码,单片机在中断程序里收数据,但无论我选择奇校验还是偶校验,或者不校验,都有同样的问题,收纯1234这些数字时很少错,但收数字与字母混合的信息时就比较多错,真是搞不懂,各位看看我的程序是否有问题
在主程序里启动接收 UCSR1A &= ~(1<<RXC1); //>>>接收中断标志先清0 UCSR1B |= (1<<RXCIE1); //开中断 UCSR1B |= (1<<RXEN1); //>>>启动接收
void uart1_receive_finish(void) //中断接收程序 { if(!(UCSR1A & (1<<UPE1)) && (receive_count < 39)) //接收39Byte,校 { //验标志不能有错 receive_Data[receive_count] = UDR1; receive_count++; }
else if(receive_count < 39) //如果校验标志有错就用0xee来指明出错 { receive_Data[receive_count] = UDR1; receive_Data[receive_count] = 0xee;//用0xee代替相应字节的内容,指出 receive_count++; //错误 } else temp = UDR1; //>>>如果已接收了39Byte数据,就不保存了, } //只是读出以清0中断标志 |