接收数据超时,则说明数据传输错误,退出串口中断,等待下次中断接收,在C51中强制退出串行口中断需要在中断函数中如何处理: void serial_isr(void) interrupt 4 using 0 {bit chaoshi=0; //超时标志位 j=0; RI=0; receive[0]=SBUF; //接收机器号,响应串口中断后撤除接收中断 if (receive[0]==ID) //判断机器号,对号则接收 { for (i=1;i<8;i++) { while(j<100) //?????超时退出的处理问题 {if(RI==1){receive=SBUF;RI=0;chaoshi=0;break;} j++;chaoshi=1;
} if(chaoshi==1)goto tuichu; } ............. ......... .... tuichu:chaoshi=0; }
我的意思是如果中断接收数据两个字节之间的时间超时(这个时间很短零点几毫秒不会影响主程序),立即停止接收,到中断函数末尾,退出中断。 |