eskysky
发布于 2020-07-01 / 22 阅读
0

51单片机串口发送数据的简单使用

基础介绍

首先学习一下异步串口通信的帧格式和波特率的概念。 异步串口通信帧格式 波特率的定义:每秒传输二进制数码的位数。 波特率的倒数即为每位数据传输的时间。 接下来我们来学习单片机上和串口有关的寄存器。 1.串行数据缓冲器SBUF SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。 2.串行控制寄存器SCON SCON寄存器 RI、TI —— 接收及发送中断标志 RB8、TB8 —— 接收及发送数据第9位 REN —— 接收控制,0:禁止,1:允许 SM2 —— 多机通信,0:双机,1:多机 SM0、SM1 —— 串行口工作方式选择位 串行口工作方式 常见的波特率设置 常见的波特率

具体使用

硬件电路:

在Proteus中搭建出这样的电路图: 仿真电路图 其中,电路图右边的的虚拟终端可以通过以下方法添加: 虚拟终端的添加方法 双击单片机组件,设置晶振频率为11.0592MHz。 设置单片机晶振 双击虚拟终端,按以下参数进行设置: 设置虚拟终端波特率

软件代码:

#include 
#include 
unsigned char code MESSAGE[]="Hello World!\r\n";
unsigned char a;
void delay(unsigned int i)
{
    unsigned char j;
    for(i;i>0;i--)
        for(j=200;j>0;j--);
}
void main(void)
{
    SCON = 0x50;//设置串行口工作方式1,接收控制打开
    TMOD |= 0x20;//定时器1设置工作方式2
    TH1 = 0xFD;//设置波特率为9600,数据位8,停止位1,无校验位,晶振频率11.0592M
    TL1 = 0xFD;
    TR1 = 1;//启动定时器1
    
    while(1)
    {
        a=0;
        while(MESSAGE[a]!='\0')
        {
            SBUF = MESSAGE[a];//将一个字符放入串行数据缓冲器SBUF
            while(!TI);//等待发送中断标志为1
            TI=0;//清除发送中断标志
            a++;//准备下一个字符
        }
        delay(500);//延时
    }
}

仿真效果

仿真效果图