51单片机学习笔记【六】——串口通信实验

2019-04-15 18:40发布

一.串口通信基础

1.串行通信

  • 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。特点是:传输线少,长距离传送成本低,但数据传送控制复杂。
  • 串行通信的传输的传输方向:单工(数据传输只能沿一个方向),半双工(传输数据和接受数据分布进行),全双工(传输和接受同步进行)。
  • 单片机采用异步通信,发送和接受设备使用各自的时钟频率,容易实现,但传输效率不高,数据格式
    异步通信

2.MAX232

  • 实验通过MAX232电平转换芯片,可把计算机串口电平(-12V~+12V)转换为单片及TTL电平。电路原理图如下
    MAX232

3.80C51串行口

80C51
向发送缓冲器SBUF写入数据,两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。

4.工作方式寄存器SCON

位 D7 D6 D5 D4 D3 D2 D1 D0 功能 SM0 SM1 SM2 REN TB8 RB8 T1 R1
  • 介绍
  • RI:接收中断标志位
    接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)
  • TI:发送中断标志位
    发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)
  • TB8:用来存放发送的第9位。
  • RB8:用来存放接收的第9位。
  • REN:是串行接收允许位
    0时:禁止串行接收
    1时:允许串行接收

5.工作方式寄存器PCON

  • PCON是没有位寻址的,也就是说不能直接操作SMOD要直接操作PCON寄存器。
  • SMOD:是波特率是否加倍的选择位。
    0时:波特率不加倍。
    1时:波特率加倍。

6.串口的操作步骤:

第一步:设置波特率,设置定时器T1为工作方式2(设置TMOD寄存器),给计数器赋初值(工作方式2会自动重装)

第二步:设置串口工作方式,设置SCON(如果允许)。

第三步:如果使用中断方式,那么打开相应的中断和总中断。

第四步:打开定时器T1,开始产生波特率。TCON设置TRx。


二.实验例程

1.说明:本实验通过使用串口调试助手向计算机发送数据,并返回,实验不需要接线。

2.程序源代码如下:

/************************************** > File Name: 串口通信实验 > Author: pengshp > Mail: pengshp3@outlook.com > Date: 2015年 7 月 22 日 ***************************************/ #include #define uchar unsigned char #define uint unsigned int uchar flag,i; /*串口初始化函数*/ void init_uart() { SCON=0x50; //设置为工作方式1 0101 0000 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,有一定的误差。