对于固定的数据,可以通过顺序判断来识别用if或switch语句来判决即可通过串口中断,每次进入把SBUF的值赋给T,通过判决、累加NUM的值最终取得冒号后面的数值(不知楼主是否是要最后的数值)voidUART_Int(void)interrupt,staticucharNUM=,ucharT;if(RI==,{RI=。P,,=,manin{while(!RI);//等待串口信号if(SBUF==,,P,,=,//如果手机发送的是,,启动继电器elseP,,=,//如果手机发送的不是,,释放继电器RI=。
SBUF,=temp;//将接收到数据送出.while(TI,==,;//发送标志位是否产生.TI,=,//清发送标志位……上述程序,会死机的。while(TI,==,;//发送标志位是否产生.--永远等不到TI,=,一旦为,立即就进入中断,在中断函数中,马上清零了。看你这程序编的,ha查询RI不是等于,而是,有当数据传送过来的时候,RI才会由,为,所以需要查询的状态是,不是,接收完数据后,再进行对RI的清零还是不多说了,上程序,若满意请记得采纳一下,谢谢!这是一个由串口助手发送十六进制码来控制单片机的。
从程序看:while(q==,{ES=,//关闭了中断,这就要丢失数据,………有的数据,你没有及时处理,就被后续收到的串行数据,覆盖了。—实际的接收程序,是应该在接收机里面,有一个存储队列,把新数据排在后面,并向主程序给出“有了新数据”的标志;主程序,从队列的起始处。while(!RI),决定了它每收到一个字节,发出“It
感谢您的来访,获取更多精彩文章请收藏本站。

暂无评论内容