利用单片机串口实现甲乙两机的数据传输

题目:利用单片机串口实现甲乙两机的数据传输。

要求:

  • ①甲机连续发送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];  //显示接收值
        }
    }
}

如有不足,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056

  • 35
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱打瞌睡的CV君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值