完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为什么我用两个单片机做实验,一个很简单的程序,让甲发送信息(0x60)给乙,在没收到乙的反馈信息(0x50)前,甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。为什么乙每次都能收到甲的信息,但乙的反馈信息却传不回甲处?极少数情况能传回甲处。 另外,不知我的奇校验子程序是否有问题呢?能提供个串口通信带奇偶校验例程吗?! 这是我的程序: 甲单片机: #include #define uchar unsigned char #define uint unsigned int ***it start=P0^0;//发光二极管,用来检测数据是否在发送 unsigned char a=0xff,i=100,b,jieshou; void delay(unsigned int m) //延时程序 { unsigned int i,j; for(i=0; i } bit jiaoyan(uchar m)//奇校验 { int i; bit tmp; for(i=0;i<8;i++) { tmp=tmp^m&0x01; m>>=1; } tmp=~tmp; return tmp; } void main() { SCON=0xd0;//串口通信方式3 TMOD=0x20;//设置定时器1为工作方式2 TH1=0xfd; TL1=0xfd; TR1=1;//开计数器 EA=1; ES=1;//开串口中断 ti=0; RI=0; while(jieshou!=0x50) { TB8=jiaoyan(0x60); SBUF=0x60; delay(1100); start=0; delay(1100); start=1; } start=0; while(1); } void ser0() interrupt 4//串口中断 { uchar temp; ES=0; if(TI==1) { TI=0; } if(RI==1) { temp=SBUF; if(RB8==jiaoyan(temp)) { jieshou=temp; } // else // {jieshou=0xff;} RI=0; } ES=1; } 乙单片机: #include #define uchar unsigned char #define uint unsigned int ***it start=P0^0;//发光二极管,用来检测数据是否在发送 unsigned char a=0xff,i=100,b,jieshou,xh=1; void delay(unsigned int m) //延时程序 { unsigned int i,j; for(i=0; i } bit jiaoyan(uchar m)//奇校验 { int i; bit tmp; for(i=0;i<8;i++) { tmp=tmp^m&0x01; m>>=1; } tmp=~tmp; return tmp; } void main() { SCON=0xd0;//串口通信方式3 TMOD=0x20;//设置定时器1为工作方式2 TH1=0xfd; TL1=0xfd; TR1=1;//开计数器 EA=1; ES=1;//开串口中断 TI=0; RI=0; while(jieshou!=0x60); while(jieshou==0x60)(这个语句总是判断不到,当接收到甲的信号后,就直接跳到下一个语句停在while(1);处了,而不是进行循环发送,而我如果改成while(i--);就能进行循环,但要在发送几十次后才能成功让甲单片机收到信号) { TB8=jiaoyan(0x50); SBUF=0x50; start=0; delay(2200); start=1; delay(1100); } start=0; while(1); } void ser0() interrupt 4//串口中断 { uchar temp; ES=0; if(TI==1) { TI=0; } if(RI==1) { temp=SBUF; if(RB8==jiaoyan(temp)) { jieshou=temp; } // else // {jieshou=0xff;} RI=0; } ES=1; } |
|
相关推荐
10个回答
|
|
甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。
------------------- 甲不能一直处于发送状态,应该是发送完成后立即进入接收状态才能及时收到乙方反馈的信息 |
|
|
|
单片机间的串口通信方式3带奇偶校验的通信:
|
|
|
|
有一个问题,就是你主函数和中断函数都调用了校验这个函数。有可能产生混乱。你可以先试一下用方式1。看看有没问题再用方式2。
|
|
|
|
|
|
我去!!这贴是2011年发的啊???!!!
|
|
|
|
while(jieshou!=0x60);
while(jieshou==0x60)。。。 while(1); 这几个while循环一旦退出后就不会在进入了,可以在检查下编程和测试流程 |
|
|
|
。。。。。。
|
|
|
|
|
|
|
|
不错的文档,很受用
|
|
|
|
好在艰难慢了无数倍
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
770 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
544 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
677 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
904 浏览 2 评论
649 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11990 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 16:32 , Processed in 0.659872 second(s), Total 61, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号