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

举报
爱打瞌睡的CV君 发表于 2022/07/07 23:02:20 2022/07/07
【摘要】 文章目录 题目:利用单片机串口实现甲乙两机的数据传输。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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。