第6章单片机串行通信接口的C51语言编程6.1串行数据通信s的基本概念6.251系列单片机的串行通信接口6.3串行通信接口的C51语言编程6.3本章小结6.5实训六单片机之间的单工通信返回首页教学提示51系列单片机内部有一个可编程全双工串行通信接口,它具有UART的全部功能,该接口不仅可以同时进行数据的接收和发送,还可以作同步移位寄存器使用。该串行口有4种工作方式,帧格式有8位、10位和11位3种,并能设置各种波特率。在介绍关于串行通信的基础知识后,本章重点讲述51系列单片机的串行口及其通信应用。教学要求理解串行数据通信的基本概念,包括串行数据通信的分类、串行通信数据的传送方向、串行数据通信的接口电路;掌握异步串行通信的两个重要指标,字符帧格式,波特率;掌握51系列单片机串行口的结构及工作原理;掌握51系列单片机串行口的控制寄存器;掌握51系列单片机串行口的工作方式及其波特率生成方法;掌握51系列单片机串行通信的两种编程方式:查询方式,中断方式。6.1串行数据通信的基本概念6.1.1串行数据通信的分类6.1.2串行通信数据的传送方向6.1.3串行数据通信的接口电路在单片机应用系统中,经常会遇到数据通信的问题,如在单片机与外围设备之间、一个单片机应用系统与另一个单片机应用系统之间、单片机应用系统与PC之间的数据传送都离不开通信技术。6.1.1串行数据通信的分类两个实体之间的通信有两种基本方式:并行通信和串行通信,如图6.1所示。图6.1两种通信方式的示意图按照串行数据的时钟控制方式,串行通信可分为异步通信和同步通信两类。1.异步通信在异步通信(AsynchronousCommunication)中,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。字符帧格式、波特率是异步通信的两个重要指标。在异步通信中,接收端是依靠字符帧(CharacterFrame)格式来判断发送端是何时开始发送及何时结束发送的。字符帧也称为数据帧,由起始位、数据位、奇偶校验位和停止位4部分组成,如图6.2所示。1)字符帧图6.2异步通信的字符帧格式在异步串行通信中,两个相邻字符帧之间是否有空闲位,由用户来决定。2)波特率波特率(BaudRate)为每秒钟传送二进制数码的位数,也称为比特数,单位为b/s,即位/秒。波特率用于表征数据传输的速率,波特率越高,数据传输速率越大。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内所传送的字符帧的帧数,和字符帧格式有关。通常,异步通信的波特率为50~9600b/s。异步通信的优点是不需要传送同步时钟,字符帧长度不受限制,故设备简单。缺点是字符帧中因包含起始位和停止位而降低了有效数据的传输速率。2.同步通信同步通信(SynchronousCommunication)是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图6.3所示。信息帧通常由同步字符SYN、数据字符和校验字符CRC这3部分组成。在同步通信中,同步字符可以采用统一的标准格式,也可以由用户约定。图6.3同步通信的信息帧格式同步通信的优点是数据传输速率较高,通常可达56000b/s或更高,其缺点是要求发送时钟和接收时钟必须保持严格同步。同步通信的同步方法有外同步、自同步两种,如图6.4所示。图6.4同步通信的同步方法6.1.2串行通信数据的传送方向按照数据传送方向,串行通信可分为单工(Simplex)传送、半双工(HalfDuplex)传送和全双工(FullDuplex)传送3种制式,如图6.5所示。图6.5单工、半双工和全双工串行通信示意图6.1.3串行数据通信的接口电路串行接口电路的种类和型号很多,能够完成异步通信的硬件电路称为UART,即通用异步接收器/发送器;能够完成同步通信的硬件电路称为USRT;既能够完成异步又能同步通信的硬件电路称为USART。从本质上说,所有的串行接口电路都是以并行数据形式与CPU接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给CPU,或从CPU接收并行数据,转换成串行数据后输出到外部逻辑。在单片机应用系统中,数据通信主要采用异步串行通信。在设计通信接口时,必须根据需要选择标准接口,并考虑传输介质、电平转换等问题。采用标准接口后,能够方便地把单片机和外围设备、测量仪器等有机地连接起来,从而构成一个测控系统。异步串行通信接口主要有RS-232C、RS-449、RS-422、RS-423和RS-485,20mA电流环等,它们都是在RS-232接口标准的基础上经过改进而形成的。下面简要介绍常用的RS-232C接口。RS-232C是指用二进制方式进行数据交换的数据通信设备(DCE)与数据终端设备(DTE)之间的接口技术。RS-232C适合于数据传输速率在0~20000b/s范围内的、短距离(小于15m)或带调制解调器的通信场合。由于通信设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在计算机通信接口中广泛采用。1.RS-232C的信号接口RS-232C接口规定了21个信号和25个引脚,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道。对于一般双工通信,仅需几条信号线就可以实现,包括一条发送线、一条接收线和一条地线。与RS-232C接口相匹配的标准D型连接器为DB-25,如图6.6所示。除DB-25外,还有简化的DB-15和DB-9。图6.6DB-25连接器引脚排列图2.RS-232C接口的电气特性为了能够同计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换,否则将使TTL电路烧坏,实际应用时必须注意!实现这种变换的方法可用分立元件,也可用集成电路芯片(如MC1488、MC1489,MAX232等)。由于RS-232C是在TTL电路之前研制的,与TTL以高低电平表示逻辑状态的规定不同,RS-232C是用正负电压来表示逻辑状态的。RS-232C采用负逻辑:+3~+15V为逻辑“0”;-3~-15V为逻辑“1”;-3~+3V为过渡区。6.251系列单片机的串行通信接口6.2.1串行口的结构及工作原理6.2.2串行口的控制寄存器6.2.3串行口的工作方式与波特率51系列单片机内部有一个可编程全双工串行通信接口,它具有UART的全部功能,该接口不仅可以同时进行数据的接收和发送,还可以作为同步移位寄存器使用。该串行口有4种工作方式,帧格式有8位、10位和11位这3种,并能设置各种波特率。6.2.1串行口的结构及工作原理串行口的结构如图6.7所示。它主要由数据接收缓冲器SBUF、数据发送缓冲器SBUF、电源控制器PCON、串行口控制寄存器SCON、发送控制器TI、接收控制器RI、移位寄存器、输出控制门等组成。图6.7串行口结构示意图1.发送(输出)数据将待发送的数据写入串行口的数据发送缓冲器SBUF后,串行口会自动地按照软件设定的格式将待发送的数据组成数据帧,发送控制器TI按波特率发生器(由定时器T1或T2构成)提供的时钟速率,通过引脚TXD(P3.1)逐位地将发送缓冲器SBUF中的并行数据输出。输出完一帧数据后,硬件自动置TI=1,形成中断请求,通知CPU准备下一帧的发送工作。注意:TI必须由软件清零。发送为主动,只要发送缓冲器SBUF中有数据,就发送。2.接收(输入)数据当软件置位REN(允许/禁止串行接收控制位)、清零RI(接收中断标志位)后,串行口即进入接收状态(SBUF只读不写)。接收控制器RI按要求的波特率对引脚RXD(P3.0)上的输入信号进行采样,待接收到一个完整的字节后,就装入SBUF。数据接收完,硬件自动置RI=1,必须由软件清零RI。6.2.2串行口的控制寄存器51系列单片机为串行口设置了两个SFR:串行口控制寄存器SCON,电源及波特率选择寄存器PCON。1.串行口控制寄存器SCONSCON用来控制串行口的工作方式和状态,可以位寻址,字节地址为98H。单片机复位时,所有位全为0。其格式如图6.8所示。图6.8串行口控制寄存器SCON2.电源及波特率选择寄存器PCONPCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,字节地址为87H,不可以位寻址。在HMOS型单片机中,PCON除了最高位以外,其他位都是虚设的。其格式如图6.9所示。图6.9电源及波特率选择寄存器PCON根据SCON中的SM1、SM0位的状态组合,串行口有4种工作方式。其中,方式0主要用于扩展并行I/O口,方式1、2、3则主要用于串行通信。在串行通信中,收发双方对传送的数据速率即波特率要有一定的约定。在串行口的4种工作方式中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器T1的溢出率决定。6.2.3串行口的工作方式与波特率1.工作方式0在工作方式0下,串行口的内部结构相当于一个8位的同步移位寄存器,波特率固定为fosc/12,引脚RXD(P3.0)固定为串行数据的输入或输出端,引脚TXD(P3.1)固定为同步移位脉冲的输出端。串行数据的发送和接收格式以一个字节为一组。其发送顺序为低位先发,高位后发。其接收顺序为低位先收,高位后收。1)发送当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前),发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。2)接收在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中断。在再次接收数据之前,必须由软件清RI为0。借助于外接的移位寄存器,工作方式0可方便地实现单片机I/O端口的扩展,即由串入并出移位寄存器(如74LS164、CD4094等)来扩展输出端口;由并入串出移位寄存器(如74165、CD4014等)来扩展输入端口。串行控制寄存器SCON中的TB8和RB8在工作方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应TI或RI中断后,必须由用户用软件清0。在工作方式0下,SM2必须为0。3)波特率工作方式0的波特率为固定值,恒等于振荡器频率fosc的1/12,即OSC0BPS/12f【例6.1】用8位串入并出移位寄存器74LS164扩展单片机的输出端口,电路如图6.10所示。试编写程序完成:依次点亮8个发光二极管D1~D8,待所有发光二极管均点亮后,再重新开始。要求采用中断方式编程。(74LS164的工作原理见表6-2)图6.10工作方式0用于扩展输出端口表6-274LS164的功能表【例6.2】用8位并入串出移位寄存器74LS165扩展单片机的输入端口,电路如图6.11所示。试编写程序完成:开机7段数码管显示0。按K1键显示1;按K2键显示2;……;按K7键显示7;在其他状态下数码管均显示0。要求采用查询方式编程。(74LS165的工作原理见表6-3)图6.11工作方式0用于扩展输入端口表6-374LS165的功能表2.工作方式1在工作方式1下,串行口的内部结构相当于一个波特率可调的10位通用异步串行通信接口UART。使用RXD引脚作为串行数据输入线,使用TXD引脚作为串行数据输出线。10位字符帧由1位起始位(低电平0)、8位数据位和1位停止位(高电平1)组成,如图6.12所示。图6.1210位字符帧格式1)发送发送时,数据从TXD输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。2)接收接收时,需先将REN置1,即允许串行口接收数据。串行口采样RXD,当由1到0跳变时,确认是起始位“0”后,就开始接收一帧数据。当RI=0且停止位为1或SM2=0时,停止位进入RB