首页 > 其他 > 详细

串口发送数据

时间:2020-09-06 19:46:28      阅读:56      评论:0      收藏:0      [点我收藏+]

 

#include <reg52.h>

 

char rData = 0;

char RFlag = 0;//如果接收到数据后将RFlag置为1

char TBusy = 0;//TBusy为1表示正在发送数据

 

void SerialInt() interrupt 4

{

    if(RI)//如果接收到数据就将SBUF中存的接收的数据赋值给rData 。手动将RI 标志位置为0

    {

        RI = 0;

        rData = SBUF;

        RFlag = 1;

    }

    if(TI)//如果发送数据完毕,手动将 TI标志置为0

    {

        TI = 0;

        TBusy = 0;

    }

}

//19200波特率

void UartInit(void)//初始化配置定时器1

{

    TMOD = 0x20;       //T1 方式2

    PCON = 0x80;       //SMOD = 1

    SCON = 0x50;      //方式1 8个数据位

    TH1=0xFD;

    TL1=0xFD;

    TR1 = 1;          //启动定时器1

    ES=1;              //开串口中断

    EA=1;              //开总中断

}

 

void main()

{

    UartInit();

    while(1)

    {

        if(RFlag)//如果接收到数据,并且发送数据处于空闲状态(TBusy==0时),将接收到的数据再发送出去

        {

            RFlag = 0;

            while(TBusy);

            TBusy = 1;

            SBUF = rData;

        }

    }

}

同样使用上面接收数据使用的软件进行测试:

技术分享图片

 

 需要注意发送和接收的编码要设置成一致,不然接收的可能显示出来就是乱码

/** ****************************************************************************** * @file : main.c * @brief * @author : 涛声依旧 * @version : V1.0.0 * @date : 2019-12-13 * Fuction List : 1. ... <version>: <modify staff>: <data>: <description>: 2. ... ****************************************************************************** ** * * COPYRIGHT(c) 2019, 机器鸟 www.qshikong.cn * * 满足以下条件,允许修改或者修改后以源代码和二进制形式重新分发和使用。 * 1. 重新分发源代码必须保留上述版权声明,以及此条件列表 * 和以下免责声明。 * 2. 二进制形式的重新分发必须复制上述版权声明, * 此列表内容和以下免责声明于发行版随附的材料中。 * 3. 机器鸟的名称或其贡献者的名称未经事先特别说明许可,不可用于认可 * 或推广从该产品衍生的产品。 * * 免责声明:本软件只用于教学、学习、测试使用,对于任何直接、间接、偶发、 * 特殊等损害,版权持有人或贡献者在任何情况下均不承担责任。 * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include <reg52.h> /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ char rData = 0; char RFlag = 0; char TBusy = 0; /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ void SerialInt() interrupt 4 { if(RI) { RI = 0; rData = SBUF; RFlag = 1; } if(TI) { TI = 0; TBusy = 0; } } //19200波特率 void UartInit(void) { TMOD = 0x20; //T1 方式2 PCON = 0x80; //SMOD = 1 SCON = 0x50; //方式1 8个数据位 TH1=0xFD; TL1=0xFD; TR1 = 1; //启动定时器1 ES=1; //开串口中断 EA=1; //开总中断 } void main() { UartInit(); while(1) { if(RFlag) { RFlag = 0; while(TBusy); TBusy = 1; SBUF = rData; } } }

串口发送数据

原文:https://www.cnblogs.com/maycpou/p/13622502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!