向发送缓冲器SBUF写入数据,两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
功能 | SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
/**************************************
> File Name: 串口通信实验
> Author: pengshp
> Mail: pengshp3@outlook.com
> Date: 2015年 7 月 22 日
***************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i;
/*串口初始化函数*/
void init_uart()
{
SCON=0x50; //设置为工作方式1
TMOD=0x20; //设置计数器工作方式2
PCON=0x80; //波特率加倍
TH1=0xF3; //计数器初始值,波特率为4800
TL1=0xF3;
EA=1; //打开总中断
ES=1; //打开接受中断
TR1=1; //打开计数器
}
void main()
{
init_uart();
while(1)
{
if(flag==1)
{
ES=0; //关闭串口中断
flag=0;
SBUF=i; //接受到的数据写入SBUF
while(!TI);//判断是否发送完
TI=0;
ES=1; //打开串口中断
}
}
}
void serial() interrupt 4
{
RI=0; //接受标志位清零
i=SBUF; //从SBUF读数据
flag=1; //说明接受到数据
}
波特率的计算和工作方式介绍略,常用的波特率为9600,晶振频率为11.0592MHZ,则误差为0%。我使用的晶振频率为12MHZ,有一定的误差。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qq_22512533/article/details/46995737