完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
菜鸟请教各位前辈,为什么一下这段程序会自动进入中断,我想要用上位机发送“0xff”,下位机才进行回应,但是我用串口助手发送0xff以后就中断就一直在循环,中断不是只有在接收到数据才会打开吗,为什么一直会打开,另外我用查询法也试了,查询法是可以,在线仿真时用串口助手可以发一次收一次,但是我烧录到单片机以后就不成功了,好郁闷,这是为什么啊,在线仿真可以,烧录以后就不行,求解,谢谢void main(){init(); while(1){//while(!RI);//RI=0;//temp=SBUF;if(temp==0xff){adval2=AD(2);A1=adval2/100; A2=adval2%100/10;A3=adval2%10; adval1=AD(1);for(a=10;a>0;a--) { display(A1,A2,A3);};SBUF=adval1;while(!ti);TI=0; delayms(10);SBUF=adval2;while(!TI);TI=0; delayms(10);SBUF='O';while(!TI);TI=0;temp=0;ES=1;}}}void ser() interrupt 4{RI=0;temp=SBUF;if(temp==0xff){ ES=0;RD=!RD; //这里接了个发光管可以明显看到,及时没有数据,还是自动进入中断delayms(500);flag=1;}}[/mw_shl_code]
|
|
相关推荐
5个回答
|
|
因为你temp没有清空,即你收到0xff之后再主循环判断要把temp清空或者设为其他值,还有你为什么一定要0xff,搞个0X5A 0xA5之类不好么?有可能是当SBUF为空读回来的值就是0xff,还有中断里面尽量不要用delay(500)之类的函数。
|
|
|
|
你中断里要先判断一下 RI是不是1,不是立刻退出,是才执行你写的代码。
|
|
|
|
发送前如果不禁止串口中断,还要加一个标志位a,发送中断发生后,TI复位,标志位a置位,主程序查询这个标志位a
|
|
|
|
|
|
void ser() interrupt 4
{ RI=0; temp=SBUF; if(temp==0xff) { ES=0; RD=!RD; //这里接了个发光管可以明显看到,及时没有数据,还是自动进入中断 delayms(500); flag=1; } } 在这里要先判断是收中断还是发中断再进行读取 |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1186浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 07:55 , Processed in 1.245517 second(s), Total 87, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号