基础介绍

首先学习一下异步串口通信的帧格式和波特率的概念。

异步串口通信帧格式

波特率的定义:每秒传输二进制数码的位数。

波特率的倒数即为每位数据传输的时间。

接下来我们来学习单片机上和串口有关的寄存器。

1.串行数据缓冲器SBUF

SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。

2.串行控制寄存器SCON

SCON寄存器

RI、TI —— 接收及发送中断标志

RB8、TB8 —— 接收及发送数据第9位

REN —— 接收控制,0:禁止,1:允许

SM2 —— 多机通信,0:双机,1:多机

SM0、SM1 —— 串行口工作方式选择位

串行口工作方式

常见的波特率设置

常见的波特率

具体使用

硬件电路:

在Proteus中搭建出这样的电路图:

仿真电路图

其中,电路图右边的的虚拟终端可以通过以下方法添加:

虚拟终端的添加方法

双击单片机组件,设置晶振频率为11.0592MHz。

设置单片机晶振

双击虚拟终端,按以下参数进行设置:

设置虚拟终端波特率

软件代码:

#include <reg51.h>
#include <stdio.h>
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);//延时
    }
}

仿真效果

仿真效果图

发表评论

电子邮件地址不会被公开。 必填项已用*标注

 
返回顶部
ett