《第7章串口通信讲义》由会员分享,可在线阅读,更多相关《第7章串口通信讲义(41页珍藏版)》请在金锄头文库上搜索。
1、1,第7章 AT89S51单片机的串行口,2,并行通信:传送的数据的各位同时发送,并排传输,同时被接收。控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。,引言,串行通信传送数据的各位按分时顺序一位一位地传送(即一位一位的发送和接收)。特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。,八个人站成一排一起通过,八个人站成一纵队一一通过,3,7.1.1 串行通信的基本概念 一、异步通信与同步通信 1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。 以帧作为传送单位,每一帧由起
2、始位、数据位、校验位和停止位组成,结构如图。,4,2.同步方式 同步方式仅在开始用若干字符作为同步号令,然后连续发送数据,如图所示。由于没有在每一个字符中,配置起始、停止位,所以结构紧凑,传输效率高、速度快,其组成如下图所示:,同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。 例如IIC通信,SPI通信等,5,二、串行通信的传输方向 1、单工 单工是指数据传输仅能沿一个方向,不能实现反向传输。 2、半双工 半双工是指数据传输可以沿两个方向,但需要分时进行。 3、全双工 全双工是指数据可以同时进行双向传输。,
3、单工 半双工 全双工,6,四、串行通信的错误校验 1、奇偶校验 在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。,3、循环冗余校验,2、代码和校验 送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。
4、,7,五、传输速率与传输距离 1、传输速率 波特率bps(bit per second)定义: 每秒传输数据的位数,即: 1波特 = 1位/秒(1bps) 如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位) 10位240个/秒 = 2400 bps,相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。,8,7.2 80C51的串行口,有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器1个,因为发送时CPU是主动的,不会产生重叠错误。,7.2.1 80C51串行口的结构,9,数据缓冲器S
5、BUF 发送数据 通过指令MOV SBUF,A将数据写入SBUF,然后串口自动将数据按事先设置的方式及速率从TXD(P3.1)端口输出,数据发送完毕,串口向CPU申请中断,且通过硬件将TI置1,表示发送已经结束,等待写入第二帧数据。 接收数据 当有数据送给单片机串口时,串口按事先设置的方式及速率自动从端口RXD(P3.0) 接收数据,数据校验正确后送SBUF,一帧数据接收完毕 RI=1,串口向CPU请求中断且表示接收已经结束。单片机只要通过执行: MOV A,SBUF,10,串行口的控制寄存器,MCS-51的串行口有四种工作方式,用户可以通过对串行控制寄存器SCON编程来设定。此外,还有波特率
6、控制寄存器PCON,必须详细了解这些特殊功能寄存器,才能正确应用串行通信接口。 1串行口控制寄存器SCON 特殊功能寄存器SCON的地址为98H,具有位地址,可位寻址,复位时为00H,其格式如下:,SM0、SM1:串行口的方式选择位,见表7-1。,11,SM2:方式2和方式3的多机通信控制位; REN:允许串行接收位。 TB8:在方式2和方式3中,发送的第9位数据,需要时由软件置位或复位。 RB8:在方式2和方式3中,接收到的第9位数据; 在方式1时,RB8是接收到的停止位;在方式0,不使用RB8。 TI:发送中断标志。TI必须由软件清“0” RI:接收中断标志,RI必须由软件清“0”。,12
7、,PCON中只有一位SMOD与串行口工作有关 :,SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。 PCON的其他位为掉电方式控制位,详见2.8节,13,6.2.3 80C51串行口的工作方式,一、方式0:串口扩展为并口 1)波特率固定为 发送位数据等于一个机器周期。 2)不论是发送还是接收,数据都是从RXD(P3.0)端出入。TXD端而作为同步移位脉冲输出端。 3)工作于方式0时,可将串行接口扩展为并行接口。 1、方式0输出,14,2、方式0输入,方式0接收和发送电路,15,一、方式0,必
8、须注意:在接收时,除了设置SCON控制字为方式0外,还应设置允许接收控制位REN为“1”,清除RI中断标志,才能启动接收器工作。 方式0工作时,必须使SCON控制字的SM2位(多机通信控制位)为“0”,从而不影响TB8和RB8位。由于波特率固定,故无需用定时器提供。但以中断方式传输数据时,CPU响应中断不会自动清除TI、RI标志,所以在中断服务程序中,必须由指令将TI、RI清“0”。,16,二、方式1 :8位异步通信接口 方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位(低位在前),1位停止位。,1、方式1输出,
9、17,2、方式1输入,18,(1)发送: CPU向发送缓冲器SBUF写入一个数据后,便启动串行口在TXD端输出帧信息,先发送起始位“0”,接着从低位开始依次输出8位数据,最后输出停止位。发送完一帧信息后,发送中断标志TI置“1”,向CPU请求中断。 (2)接收:当允许接收位REN置“1”后,接收器便采样RXD端电平,当采样到“1”到“0”的跳变时,启动接收器接收。计数器的16个状态把1位时间等分成16份,并在第7、8、9个计数状态时,采样RXD电平。因此,每一位的数值采样三次,取其中至少有两次相同的值为确认值。启动后,如果三次采样的确认值不是“0”,则起始位无效,复位接收电路重新检测。如果确认
10、值为“0”,起始位有效,则开始按从低位到高位的顺序接收一帧的数据信息。 必须注意,在方式1接收中设置有数据辨识功能:只有同时满足以下两个条件时,接收到的数据才有效,才会将数据装入SBUF,并置RI为“1”,向CPU请求中断;否则,所接收的数据帧无效。当SM2=1时,接收到的停止位“1”装入RB8中。 RI=0。 接收到停止位为“1”。,19,方式1的特点: 1)波特率可变 串口波特率由定时器T1产生,T1工作于方式2,并决定于T1定时时间,而T1的定时时间决定于装入的时间常数N,因此可根据时间常数N推出波特率,即 2)传送数据为8位,连同一位起始位、一位停止位组成一帧,即一帧为10位,发送由T
11、XD输出,接收由RXD输入,可构成全双工的串行通信端口。 例:设计波特率为4800b/s,晶振频率为11.0592MHz,定时器T1工作在方式2,SMOD0,则计数器初值为 。,20,三、方式2和方式3 方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚 。,方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。,21,3方式2、方式3 串行口工作在方式2、方式3时,为9位异步通信口,1帧信息
12、由11位组成,即1位起始位、8位数据D0D7(低位在前)、1位可编程的第9位D8(发送时,第9位为SCON中的TB8;接收时,第9位为SCON中的RB8)及1位停止位,如图7-10所示。,图7-10 方式2、方式3数据格式,(1)发送:当CPU向发送缓冲器SBUF写入一个数据后,便立即启动发送器发送。先发送起始位“0”,接着从低位开始依次输出8位数据,再发送SCON中的TB8,最后输出停止位。发送完一帧信息后,发送中断标志TI置“1”,向CPU请求中断。 (2)接收:使用与方式1类似的方法识别起始位。必须注意,方式2、方式3接收中也设置有数据辨识功能:只有同时满足以下两个条件时,接收到的数据才
13、有效,才能将接收到的数据装入SBUF和RB8,并置RI为“1”;否则,所接收的数据帧无效。 RI=0。 接收到的停止位为“1”。 方式2、方式3的区别:方式2的波特率为fosc/32或fosc/64,而方式3的波特率可变。,22,三、串口工作方式 2、3 方式2、3的工作性能 1)方式2波特率固定,并等于。 方式3波特率计算方法同方式1,即等于。 2)一帧数据为11位,包括1位起始位、8位数据位、1位可编程位、1位停止位。数据位低位在前高位在后,第9位可编程位发送时从SCON中的TB8取出,接收时第9位存SCON中的RB8。,23,第四节 串口初始化编程,一、计算波特率 串口方式0 串口方式1
14、和串口方式3 串口方式2,24,25,二、对SCON、PCON、TMOD初始化 以设计一8051单片机控制系统为例,设主振频率为12MHz,要求串口发送数据为8位、波特率为1200bps.则初始化步骤为: 1.先按波特率要求,计算T1的时间常数N,设SMOD=1。 已知主振频率为12MHz,波特率为1200bps.,串口工作于方式1,按式7-2可求得 N=203.920CCH 2.写出初始化程序 MOV SCON,#50H ;串行口工作于方式1 MOV PCON,#80H ;SMOD=1, MOV TMOD,#20H ;T1工作方式2定时方式 MOV THl,#0CCH ;设置时间常间为N M
15、OV TLl,#0CCH ;自动装入时间常数 SETB TR1 ;启动T1,返回本章首页,26,【例7-1】电路如图所示,试编制程序按下列顺序要求每隔0.5秒循环操作。 8个发光二极管全部点亮; 从左向右依次暗灭,每次减少一个,直至全灭; 从左向右依次点亮,每次亮一个; 从右向左依次点亮,每次亮一个; 从左向右依次点亮,每次增加一个, 直至全部点亮; 返回从不断循环。,7.3 单片机串行口应用举例,27,28,LIGHT:MOV SCON,#00H ;串行口方式0 CLR ES ;禁止串行中断 MOV DPTR,#TAB ;置发光二极管亮暗控制字表首址 LP1: MOV R7,#0 ;置顺序编号0 LP2: MOV A,R7 ;读顺序编号 MOVC A,A+DPTR ;读控制字 CLR P1.0 ;关闭并行输出 MOV SBUF,A ;启动串行发送 JNB TI,$ ;等待发送完毕 CLR TI ;清发送中断标志 SETB P1.0 ;开启并行输出 LCALL DLY500ms ;调用延时0.5秒子程序 INC R7 ;指向下一控制字 CJNE R7,#30,LP2 ;判循环操作完否?未完继续 SJMP LP1 ;顺序编号029依次操作完毕,从0开始重新循环 TAB: DB 0FFH,7FH,3FH,1FH,0FH,07H,03H,01H,00H;从左