完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面的程序主要作用是从UART一串命令里找到两个相邻的数,分别是0X40和0XF1。用串口工具发送0X40和0XF1给单片机,第1次不亮、第2次亮、第3次不亮、第4次亮就这样奇数不亮偶数亮。请问这是为什么??
如果只从UART里找一组数就是正常的!超过两组就成这样了!那位大神帮忙看看这是怎么回事?? 备注:波特率单片机为115200,串口工具为115200,单片机用的是22.1184MHZ晶振误差0,所以波特率没问题。且串口工具都是以16进制发送! #include ***it LED1=P1^0; unsigned int b,c; void main() { TMOD = 0x20; SCON = 0x50; TH1 = 0xFF; TL1 = TH1; PCON = 0x80; EA = 1; ES = 1; TR1 = 1; while(1) { c=0; //变量C归0 c = SBUF; //C存储SBUF接收的数据 while(RI==!1); //等待接收完毕 RI =0; //RI归0 if(c==0x40) //检测C是否等于0X00,是的话就执行IF内的语句 { c=0; //C归0 c = SBUF; //继续接收SBUF的数据 while(RI==!1); //等待接收完毕 RI =0; //RI归0 if(c==0xf1) //检测C是否等于0XF1,是的话就执行IF内的语句 { LED1=0; //LED灯亮 b=60000;while(b--); //延时 LED1=1; //LED灯灭 } } } } |
|
相关推荐
5个回答
|
|
|
|
|
|
|
|
你发送一次,等个10S左右观察下状态,是怎样的
|
|
|
|
|
|
|
|
逻辑不通啊,中断函数也不发出来。先检测数据接收完成再处理数据啊。我怀疑写程序的人没理解while(RI==!1)的意思,他可能以为等待接收完成是等待c接收完成SBUF的数据。其实while(RI==!1)是等待硬件发送给SBUF的数据是否完成,完成后再c=SBUF这样c接收的的数据才是真实可靠的数据。
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3456 浏览 1 评论
8988 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:07 , Processed in 1.303308 second(s), Total 88, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号