利用单片机串口实现甲乙两机的数据传输
【摘要】
文章目录
题目:利用单片机串口实现甲乙两机的数据传输。1、虚拟电路图2、实现的效果3、相关代码
题目:利用单片机串口实现甲乙两机的数据传输。
要求:
①甲机连续发送0-...
题目:利用单片机串口实现甲乙两机的数据传输。
要求:
- ①甲机连续发送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);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- ②接收机部分
#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]; //显示接收值
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
如有不足,还请大佬评论区留言或私信我,我会进行补充。
感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。
作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
文章来源: luckystar.blog.csdn.net,作者:爱打瞌睡的CV君,版权归原作者所有,如需转载,请联系作者。
原文链接:luckystar.blog.csdn.net/article/details/118018789
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)