完善资料让更多小伙伴认识你,还能领取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。
|
|
|
|
|
|
|
|
|
|
while(jieshou!=0x60);
while(jieshou==0x60)。。。 while(1); 这几个while循环一旦退出后就不会在进入了,可以在检查下编程和测试流程 |
|
|
|
|
|
|
|
|
|
|
|
不错的文档,很受用
|
|
|
|
好在艰难慢了无数倍
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
116 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
541 浏览 0 评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发板简介与上电测试
655 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之传参
478 浏览 0 评论
【xG24 Matter开发套件试用体验】点灯之后的UART测试
552 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11021 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-8 13:12 , Processed in 1.066820 second(s), Total 96, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191