题目:利用单片机串口实现甲乙两机的数据传输。
要求:
①甲机连续发送0-F,共记16个字符,并显示再数码管上;
②乙机接受甲机内容并用数码管显示后回传;
③甲机接收到乙机回传内容后与当前内容相比较,若一致则发送下一个;
④晶振为11.0592Mhz,数据通讯波特率为2400。
1、虚拟电路图
2、实现的效果
3、相关代码
- ①发送机部分
#include<reg51.h> #define uchar unsigned char char code map[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71 }; void delay(unsigned int time){ unsigned int j = 0; for(;time>0;time--) for(j=0;j<125;j++); } void main(void){ uchar counter=0; //定义计数器 TMOD=0x20; //T1定时方式2 TH1 = TL1 = 0xf4;//2400b/s PCON=0; //波特率不加倍 SCON = 0X50; //串口方式1,TI和RI清零,允许收敛 TR1=1; //启动TI while(1){ SBUF = counter;//发送联络信号 while(TI==0); //等待发送完成 TI=0; //清TI标志位 while(RI==0); //等待乙机回答 RI=0; if(SBUF == counter){ //若返回值与发送值相同,组织新数据 P2 = map[counter];//显示已发送值 if(++counter>15) counter=0;//修正计数器值 delay(1000); } } }
- ②接收机部分
#include<reg51.h> #define uchar unsigned char char code map[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71 }; void main(void){ uchar receive; //定义接收缓冲 TMOD=0x20; //TI定时方式2 TH1=TL1=0xf4; //2400b/s PCON=0; //波特率不加倍 SCON=0x50; //串口方式1,TI和RI清零,允许接受 TR1=1; //启动TI while(1){ while(RI==1){ //等待接收完成 RI = 0; //清RI标志位 receive = SBUF; //取得接收值 SBUF = receive; //结果返送主机 while(TI==0); //等待发送结束 TI = 0; //清TI标志位 P2 = map[receive]; //显示接收值 } } }
如有不足,还请大佬评论区留言或私信我,我会进行补充。