基础介绍
首先学习一下异步串口通信的帧格式和波特率的概念。
波特率的定义:每秒传输二进制数码的位数。
波特率的倒数即为每位数据传输的时间。
接下来我们来学习单片机上和串口有关的寄存器。
1.串行数据缓冲器SBUF
SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。
2.串行控制寄存器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);//延时
}
}
仿真效果