第11章 C51串行接口程序设计
51系列单片机提供了功能强大的全双工串行通信接口,可以方便地实现多机通信或单片机与计算机之间的通信。由于串行接口简单,需要的传输线少,其已经成为单片机与外部设备之间进行数据通信的主要途径,特别是在远程通信和分布式控制系统中,是单片机之间通信以及单片机和计算机之间通信的主要方式。
本章主要介绍了51系列单片机串行通信接口的结构、特殊功能寄存器。本章结合串行端口的4种工作模式,详细介绍了4种工作模式的波特率设计及其C51程序设计。
11.1 51系列单片机的串行接口
51系列单片机内部集成的全双工串行通信接口电路,常称为UART。该串行接口电路功能很强,不仅可以进行串行异步数据的发送和接收,也可以作为一个同步移位寄存器使用。
11.1.1 单片机串行通信概述
单片机和外部设备可以采用并行通信和串行通信两种方法进行数据传输。这两种数据传输方式分别如图11.1和图11.2所示。其中,并行通信是指数据的各个二进制位同时进行传输。并行通信传输速度快,效率高;缺点是需要比较多的数据线,易受外界干扰,传输距离不能太远。串行通信是指数据的各个二进制位按照顺序一位一位地进行传输。串行通信所需的数据线少,节省硬件成本以及单片机的引脚资源,并且抗干扰能力强,适合于远距离数据传输;其缺点是每次发送一个比特,导致传输速度慢,效率比较低。
图 11.1 单片机并行通信
图 11.2 单片机串行通信
单片机的串行异步通信异步通信是一种利用数据或字符的再同步技术的通信方式,其英文全称为Asynchronous Communication。在异步通信过程中,数据通常是帧为单位进行传送的,每个帧为一个字符或一个字节。发送方将字符帧一个一个地发送出去,接收方则一个一个地接收该字符帧。发送方和接收方各自有一个控制发送与接收的时钟,这两个时钟不同步,互相独立。由于异步串行通信的双方没有同步的时钟,因此在单片机进行异步通信的之前,需要在通信的双方统一通信格式。通信格式主要表现在两个方面,即字符帧的格式和通信波特率,分别介绍如下。
1.字符帧(Character Frame)
字符帧格式是字符的编码形式、奇偶校验形式以及所采用的起始位和停止位的定义。单片机在进行异步串行通信时,一个字符帧按顺序一般可以分为4部分:起始位、数据位、奇偶校验位和停止位。字符帧的格式如图11.3所示。下面分别介绍各位的含义。
图 11.3 异步通信中字符帧的格式
❑起始位,位于字符帧的开始,用于表示向接收端开始发送数据。起始位占用1个位,为低电平0信号。
❑数据位,即需要发送的数据。根据需要数据位可以是5位、6位、7位或8位数据,发送时首先发送低位,即低位在前,高位在后。
❑奇偶校验位,为可编程设置位,用来表明串行数据是采用奇校验还是偶校验。在字符帧中,奇偶校验位只占1位。
❑停止位,位于字符帧的末尾,表示一帧信息的结束。停止位可以取1位、1位半或2位,其为高电平1信号。
例如,在传送ASCII码数据时,起始位占1位,ASCII码有效数据位取7位,奇偶校验位占1位,停止位取1位,这样1个串行通信中字符帧共10位。通信的双方必须采用相同的字符帧格式。
2.波特率(Baud Rate)
波特率指的是串行通信过程中每秒发送的二进制位数。波特率的单位为bit/s,即位/秒,常称为波特。波特率是串行通信速度的重要指标,波特率越高,串行数据传输速度也就越快。
这里需要注意的是,波特率和字符的实际传输速度不相同,波特率等于一个字符帧的二进制编码的位数乘以每秒传递的字符数。例如,对于上面的ASCII码,1个字符帧用10位编码,如果波特率为1200bit/s,则实际的字符传输速度为1200/10=120字符/秒。在异步串行通信过程中,双方必须采用相同的波特率。