1、1,第7章 串行口与串行通信,(学生事先必须预习,本章是一个难点、重点,注意学习的层次性) 7.1 串行通信概述 7.2 MCS-51的串行口结构 7.3 和串行通信有关的8个寄存器 SCON TCON PCON TMOD SBUF IE TH1 TL1 7.4 串行口四种工作方式 7.5 串行口的应用编程 7.6 串行通信总线标准及接口(了解),2,7.1 串行通信概述 单片机应用与数据采集或工业控制时,往往作为前端机(下位机)安装在工业现场,远离主机,现场数据采用串行通信方式发往主机(上位机)进行处理,以降低通信成本,提高通信可靠性.如下图所示.,3,7.1.1 并行通信与串行通信 1.并
2、行通信(Parallel):所传送数据的各位同时发送或接收,数据有多少位就需要多少根数据线. 特点:速度快,成本高,适合近距离传输(相距数米)如计算机并口,打印机,8255 . 2.串行通信(Serial):所传送数据的各位按顺序一位一位地发送或接收.只需一根数据,一根地线,共2根(如双向通信发送和接收各需1根数据线.)特点:成本低,硬件方便,串行通讯的距离可以从几米到几千米,传输速度低.,4,5,6,7.1.2 串行通讯的数据传输方向 按通信方向分类:单工、半双工、全双工通信方式 1. 单工方式(Simplex Mode):如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工.
3、一端是发送端,另外一端是接收端:如广播电台和收音机,7,2.半双工方式 (Half Duplex)如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输.每端口有一个发送器和一个接收器,通过开关连接在线路上,数据可以双向传送,但不能同时发送和接收. 要通过换向器转换方向.如对讲机.,8,全双工方式(Full Duplex)如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工.通信双方用两个独立的收发器单独连接,可以同时发送和接收数据,因而提高了速度.如电话机.,9,7.1.3 同步串行通信和异步串行通信(前提),1.异步通信:asynch
4、ronous异步串行通信一帧(Frame)数据格式:起始位+数据位+奇偶校验位+停止位 起始位: “0”(space)表示字符的开始(使通信双方协调同步); 数据位:58位即该字符的代码,规定低位在前,高位在后; 奇偶校验位:(可选),奇校验:数据位和奇偶校验位的1的个数是奇数;偶校验:数据位和奇偶校验位的1的个数是偶数; 停止位: “1”表示字符的结束. 字符与字符之间可能存在长度不等的空闲位状态“1”(Mark),10,优点:硬件结构简单 缺点:因为要附加一些标志信息,传输效率低,一般应用在低速通信系统.,第n个字符(一帧),n-1,n+1,起始位,数据位(58位),奇偶校验位,停止位,异
5、步串行通信的帧格式,11,2.同步通信 synchronous 在同步通信中,发送方在数据或字符开始处就用同步字符(一种特定的二进制序列)指示一帧的开始(比如:HDLC协议将0111 1110作为同步字符,检出了同步字符就找到了数据的起始位置),由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节.见下图:,SYN字符1,因为不采用起始位和停止位,所以有较高的传输效率,速度快,但是硬件复杂,成本高,使用与高速率、大容量的数据通信中,12,7.1.4 波特率(Baudrate) 波特率是双方对数据传送速率的约定,表示每秒传送的二进制
6、位数(bit),是串行通信的一个重要指标,反映了串行通信的速率,也反映了对传输通道的要求.单位是bps (Bit Per Second), bit/s例如:120字符/秒,1个字符10位, 波特率为:12010=1200bps 平均每一位传送占用时间:Td=1/1200=0.833ms,常用的波特率有:(离散) 19200/9600/4800/2400/1200/600/300/150/100/50, 还有10M/100M,13,7.1.5 通信协议(了解)双机通信必须要有协议,所谓通信协议就是通信双方必须共同遵守的一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定
7、义等(ADSL 猫).在串行传输中,通信的双方都按通信协议进行,串行接口的基本任务就是: 1.实现数据格式化 因为CPU发出的数据是并行数据,接口电路应实现不同串行通信方式下的数据格式化任务,如自动生成起止方式的帧数据格式(异步方式)或在待传送的数据块前加上同步字符等.,14,2.进行串、并转换在发送端,接口将CPU送来的并行信号转换成串行数据进行传送;在接收端,接口要将接收到串行数据变成并行数据送往CPU,由CPU进行处理. 3.控制数据的传输速率接口应具备对数据传输率-波特率的控制选择能力,即具有波特率发生器. 4.进行传送错误检测在发送时,对传送的数据自动生成校验位或校验码,在接收端能检
8、查校验位或校验码,以确定传送中是否有误码.,15,能够完成上述“串并”转换功能的电路,通常称为“通用异步收发器” (UART: Universal Asynchronous Receiver and Transmitter),串口通讯-接口电路,16,7.2 MCS-51的串行口结构及传送过程 51单片机有一个可编程的全双工异步串行通信接口,它可作UART用(Universal Asynchronous Receiver & Transmitter)(通用异步接受和发送),也可作同步移位寄存器,其帧格式可有8位、10位或11位,并能设置各种波特率,给使用者带来很大的灵活性.,17,图7.1 串
9、行口结构框图,1.串行口的内部结构,18,(1)5l单片机通过串行数据接收引脚RxD(P3.0)和串行数据发送引脚TxD(P3.l)与外界进行通信.图中有两个物理上独立的接收/发送缓冲器SBUF,它们占用同一地址99H,可同时发送、接收数据.发送缓冲器SBUF只能写入/不能读出,CPU写SBUF,一方面修改发送寄存器,同时启动数据串行发送;接收缓冲器SBUF只能读出/不能写入,CPU读SBUF,就是读接收寄存器.,19,(2)波特率发生器可以有两种选择: 1.定时器T1作波特率发生器,改变计数初值就可以改变串行通信的速率,称为可变波特率.(variable) 2. 以内部时钟的分频器作波特率发
10、生器,因内部时钟频率一定,称为固定波特率.(fixed),20,2.串行通信的传送过程,21,发送和接受过程的叙述:甲方发送时,CPU执行指令MOV SBUF,A,就启动了发送过程,数据并行送入SBUF,在发送时钟shift的控制下由低位到高位一位一位发送;乙方在接收时钟shift的控制下,由低位到高位顺序进入移位寄存器SBUF;甲方一帧数据发送完毕,置位发送中断标志TI,该位可作为查询标志(或引起中断),CPU可再发送下一帧数据.乙方一帧数据到齐,即接收缓冲器满,置位接收中断标志RI,该位可作为查询标志(或引起接收中断),通过MOV A,SBUF, CPU将这帧数据并行读入.,22,由上述可
11、知: 1.甲、乙方的移位时钟频率应相同,即应具有相同的波特率,否则会造成数据丢失. 2.发送方是先发数据再查标志,接收方是先查标志再收数据. 3.接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对RI/TI清0,以备下一次收/发(CLR TI,CLR RI),23,7.3 与串行通信有关的8个寄存器,24,1.串行口控制寄存器 SCON Serial Port Control Register. Bit Addressable(98H) 8051串行通信的方式选择,接受和发送控制及串行口的标志均由专用寄存器SCON控制和指示,存放串行口的控制和状态信息,其格式如下(难
12、点),25,SM0 SM1 SM2 REN TB8 RB8 TI RI,SM0 SM1:串行口4种工作方式的选择位.(具体介绍在下一节) 方式0(00):8位移位寄存器I/O, 波特率固定=fosc/12 方式1(01):8位UART(1+8+1位), 波特率可变,按公式计算 方式2(10):9位UART(1+8+1+1位),波特率固定=fosc/32或fosc/64 方式3(11):9位UART(1+8+1+1位),波特率可变,按公式计算,SCON,26,SM0: SCON.7 Serial port Mode specifier. SM1: SCON.6 Serial port Mode
13、specifier.,(*) NOTE: The baud rate indicated in this table is doubled if PCON.7 (SMOD) is set.,27,SM2:(难点)多机通信控制位(作为方式2、方式3的附加控制位).当选择方式2或方式3时,发送机设置SM2=1,以发送第九位TB8=1作为地址帧寻找从机,以TB8=0作为数据帧进行通信,从机初始化时设置SM2=1,若接收到的第九位数据RB8=0,不置位RI,即不引起接收中断,亦既不接收数据帧,继续监听,如接收到的RB8=1,置位RI,引起接收中断,中断程序中判断所接收的地址帧和本机的地址是否符合,若不
14、符合,维持SM2=1,继续监听,若符合,则清SM2,接收对放发来的后续信息.,SCON,28,SM2: Enable the multiprocessor communication feature in modes 2 & 3. In mode 2&3, if SM2 is set to 1 then RI will be activated if the received 9th data bit (RB8) is 0. In mode 1, if SM2=1 then RI will not be active if a valid stop bit was not received.I
15、n mode 0, SM2 should be 0.,综上所述,SM2的作用为: 在方式2,3中,发送机SM2=1(程序设置).接收机SM2=1,若RB8=1,激活RI,引起接收中断.RB8=0,不激活RI,不引起中断.发送机SM2=0,无论RB8=1还是RB8=0均激活RI引起接收中断. 在方式1中,当接收时SM2=1,则只有收到有效停止位才激活RI; 在方式0中,SM2应置为0.,29,SM0 SM1 SM2 REN TB8 RB8 TI RI,REN:串行口接收允许控制位 Set/Cleared by software to Enable/Disable reception =1 允许接
16、收; (SETB REN)=0 禁止接收.系统复位后,REN=0,不允许接受,SCON,30,RB8:在串行工作方式2&3中,是收到的第9位数据.该数据来自发送机的TB8 In modes 2&3, is the 9th data bit that was received. In mode 1, if SM2=0, RB8 is the stop bit that was received. In mode 0, RB8 in not used.在多机通信中,用作区别地址帧/数据帧的标志.(奇偶校验),TB8:在串行工作方式2TB8=1 表示发送的是地址.(奇偶校验),SCON,31,TI:
17、串行口发送数据申请中断标志位. Transmitted Interrupt flag. 发送前必须用软件清零,发送过程中TI保持零电平,发送完一帧数据后,由硬件置“1”,如果再发送,必须用软件再清零.Set by hardware at the end of the 8th bit time in mode 0, or at the beginning of the stop bit in the other modes. Must be cleared by software.,SCON,32,RI:串行口接受数据申请中断标志位. Receive Interrupt flag. 接收前必须用
18、软件清零,接收过程中RI保持零电平,接收完一帧数据后由片内硬件自动置“1”.如果再接收必须用软件清零.Set by hardware at the end of the 8th bit time in mode 0, or halfway through the stop bit time in the other modes (except see SM2).Must be cleared by software.=1 申请中断; =0 不申请中断,SCON,33,2.SBUF: Serial Buffer Register (99H) 两个物理上独立的接收、发送缓冲器SBUF,它们占用同一
19、地址99H,可同时发送、接收数据. 发送缓冲器SBUF只能写入、不能读出,CPU写SBUF,MOV SBUF,A 一方面修改发送寄存器,同时启动数据串行发送; 接收缓冲器SBUF只能读出、不能写入,CPU读SBUF,MOV A,SBUF 就是读接收寄存器.,34,3.电源控制寄存器 PCON Power Control Register. Not Bit Addressable (87H) 最高位SMOD位和串行通信有关(了解),(1)只能字节寻址,初始化时SMOD=0. (2)SMOD: Double baud rate bit. 在串行口工作方式1/2/3中,波特率加倍位=1时,波特率加倍
20、 (MOV PCON,#80H 加倍)=0时,波特率不加倍.(MOV PCON,#00H 默认是不加倍的) (串行通信只用其中的最高位SMOD)If Timer1 is used to generate baud rate and SMOD=1, the baud rater is doubled when the Serial Port is used in modes 1,2,3.,PCON,35,GF1,GF0:用户可自行定义使用的通用标志位 GF1: General purpose Flag bit. GF0 :General purpose Flag bit.,SMOD GF1 GF
21、0 PD IDL,PCON,PD:掉电方式控制位 Power Down bit. =0:常规工作方式. =1:进入掉电方式:振荡器停振片内RAM和SRF的值保持不变P0P3口维持原状程序停止只有复位能使之退出掉电方式. Setting this bit activates Power Down operation in the 80C51BH. (Available only in CHMOS),36,IDL (Idle Mode bit) 待机方式(空闲方式)控制位. =0:常规工作方式. =1:进入待机方式:振荡器继续振荡中断、定时器、串口功能继续有效片内RAM和SRF保持不变CPU状态保
22、持、P0P3口维持原状程序停顿.中断和复位能退出待机,继续后面的程序.Setting this bit activates Idle Mode operation in the 80C51BH. (Available only in CHMOS),SMOD GF1 GF0 PD IDL,37,4.TMOD 定时器方式寄存器 Timer/Counter Mode control register. Not bit addressable (89H) 用于控制T0和T1的操作模式 (MOV TMOD,#20H),38,方式0: 00:13位 Timer 方式1: 01:16位 Timer 方式2:
23、 10:8位自动重装的Timer波特率发生器 方式3: 11:T0 分为2个8位 Timer;,(1)M1,M0:工作方式定义位 ( 定义4种方式 ):,39,(2)GATE:门控位 Timer可由软件与硬件两者控制GATE=0 普通用法Timer的启/停由软件对TR1位写“1”/“0”控制 (SETB TR1) (3)C/T* :计数器/定时器选择位=0 (Timer) 片内时钟定时器.对机器周期脉冲计数定时,5-6.TH1 (Timer High) :定时器/计数器1高字节(8Dh)TL1 (Timer Low) :定时器/计数器1低字节(8Bh),MOV TH1,#*H MOV TL1,
24、#*H(相同的初值),40,(1) TF1:Timer 1 overflow flag 定时器溢出中断申请标志位 Set by hardware when the Timer/Counter 1 overflows. Cleared by hardware as processor vectors to the interrupt service routine.=0:定时器未溢出;=1:定时器溢出申请中断,进中断后自动清零.,7.TCON:定时器/计数器控制寄存器,用于T/C的管理与控制 TIMER/COUNTER CONTROL REGISTER. BIT DDRESSABLE (88h)
25、,41,(2) TR1: T1运行控制位 Timer 1 run control bit. note: Set/cleared by software to turn Timer/Counter 1 ON/OFF TR1=1, 启动T1计数 setb tr1 TR1=0, 停止T1计数 clr tr1,42,8.IE 中断允许寄存器 (0A8H) Interrupt Enable register. Bit addressable,EA:总的中断允许控制位(总阀门) (Enable All interrupt) ES:串行口中断允许位 (Enable or disable the Serial
26、 port interrupt)SETB EASETB ES,IE,43,7.4 串行口四种工作方式(难点) 回顾:定时器也有四种工作方式,不要混淆,7.4.1 工作方式0 SM0 SM1=00 (常用)(special,记忆)串行口作为同步移位寄存器使用,数据传输波特率固定为fosc/12,串行数据由RxD(P3.0)输入输出,同步移位脉冲由TxD(P3.1)输出,数据的发送和接受以8位为一帧数据,低位在前,高位在后,无起始位、奇偶位和停止位.,44,1.发送:SBUF中的串行数据由RxD逐位移出;TxD输出移位时钟,频率=fosc/12;每送出8位数据,TI就自动置1;需要用软件对TI清零
27、 (CLR TI) 2.接收:串行数据由RxD逐位移入SBUF中;TxD输出移位时钟,频率=fosc/12;每接收8位数据,RI就自动置1;需要用软件对RI清零(CLR RI),45,3.经常配合“串入并出的移位寄存器芯片74LS164/CD4094 ”“并入串出的移位寄存器芯片74LS165/CD4014” 一起使用,达到扩展一个I/O口使用的目的.,46,QA-QH: 并行输出端; A,B: 串行输入端(联到一起) CLR*: 清除端,低电平时输出端清零,一般 接高电平 CLK:时钟脉冲输入端,在脉冲的上升沿实现移位当CLEAR*=1,CLK=0,74LS164保持原来的数据状态,47,4
28、8,4.方式0工作时,多用查询方式编程:发送: MOV SBUF,A 接收: JNB RI,$JNB TI,$ CLR RI CLR TI MOV A, SBUF,5.复位时,SCON=00H 缺省值:方式0,6.接收前,务必先置位REN=1,允许接收数据,因为系统复位后,SCON.4=0,SCON,49,7.串行口方式0的应用(经常用到),串行口常用工作方式0扩展出并行I/O口,而工作方式1、2、3则常用于串行通信.,74LS164是串入并出芯片;74LS165是并入串出芯片,50,共阳极,介绍:共阳LED数码管 公共端(字位) 接高电平, 笔划(字段) 置为低电平 就被点亮了,h g f
29、e d c b a,1 1 0 0 0 0 0 0,0C0H = “0”,比如要显示“0”须令a b c d e f 为“0”电平,g h为“1”电平.,再比如要显示“3”须令a b c d g 为“0”电平,e f h为“1”电平.,1 0 1 1 0 0 0 0,0B0H = “3”,h g f e d c b a,a,b,c,d,g,e,f,h,51,例1:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示09.,AB,CLK,h g f e d c b a,CLR,+5V,Vcc,TxD,RxD,51单片机,74LS164,共阳LED数码管,52,根据上图编写的通过串
30、行口和74LS164驱动共阳LED数码管显示0-9数字的子程序(查表) :入口参数:A,DISPLAY: MOV DPTR, #TABLEMOVC A, A+DPTRMOV SBUF, A ;发送JNB TI, $CLR TIRETTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92HDB 82H,0F8H,80H,90H ;共阳极段码表,53,例2 采用串行通信方式0,扩展I/O接口,接八个数码管,使内部数据存储器58H5FH单元的内容送数码管显示;,分析:由于TXD,RXD运行在工作方式0时,可方便的连接串入并出寄存器74LS164,RXD发送数据,TXD发送移位脉冲,
31、P3.3用于显示器的输入控制,通过74LS164接八个数码管,电路如下图所示.,54,55,ORG 0050HSETB P3.3 ;允许移位寄存器工作MOV SCON,#00h ; 0000 0000 选串行通信方式0 MOV R7,#08H ;显示八个字符MOV R0,#5FH ;先送最后一个显示字符MOV DPTR,#TAB ;DPTR指向字形表首址 DLO: MOV A,R0 ;取待显示数码MOVC A,A+DPTR ;查字形表MOV SBUF,A ;送出显示JNB TI, $ ;一帧输出完?CLR TI ;已完,清中断标志DEC R0 ;修改显示数据地址DJNZ R7, DLO CLR
32、 P3.3 ;8位送完,关发送脉冲(软件控制硬件)SJMP $ TAB: DB 0C0H,0F9H,0A4H,B0H,99H,92H ;共阳极段码DB 82H,0F8H,80H,90H,83H,83H,0C6HDB 0A1H,86H,84H,0FFH,0BFH,56,7.4.2 工作方式1 SM0 SM1=01方式1是10位(记忆)为一帧的异步串行通信方式,包括1个起始位,8个数据位和1个停止位,波特率可变,由TxD端发送数据,RxD端接受数据.(和方式0不一样),57,SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON,(1)SM0/SM1:串行口工作方式选择位.0 1 :
33、方式1,10位UART(1+8+1位) (2)SM2:串行口多机通信控制位,作为方式2、3的附 加控制位,此处不用,可写成“0” (3)REN:串行口接收允许位. REN=1 允许接收 (4)TB8/RB8/TI/RI等位由运行中间的情况决定,可先写成“0”,串行口控制寄存器SCON,0 1 0 1 0 0 0 0,58,NOTE:,1.常用于串行通讯,除发/收8位数据外,在D0位前有一个起始位“0”;在D7位后有一个停止位“1”. 2.方式1工作时:发送端自动添加一个起始位和一个停止位;接收端自动去掉一个起始位和一个停止位. 3.波特率可变用定时器T1,以工作方式2,8位自动重新加载做为波特
34、率发生器(系统规定的),可以省去重新加载初始值的麻烦和误差.,59,波特率=(2SMOD/32)T1的溢出率,溢出率:溢出周期的倒数,即:T1溢出一次所需时间的倒数.假定计数初值为X,则计数溢出周期为:,4.初值的计算:,记忆,60,例3:要求用T1工作于方式2来产生波特率1200,已知晶振频率=6MHz.要求出T1的初值.解:1200=(20/32)T1的溢出率 T1的溢出率=32*1200=38400T1的溢出周期=1/38400s=1000/38400ms=1000,000/38400us 6MHz下转成计数值是: 1000,000/38400/2=13.02(有误差) 256-13=2
35、43=0F3H(小软件) (后面用到),61,例4:要求用T1工作于方式2来产生波特率1200,已知晶振频率fosc=11.0592MHz,要求出T1的初值: (11.0592=212*27),解:1200=(20/32)T1的溢出率 T1的溢出率=32*1200T1的溢出周期=1/38400s=1000/38400ms=1000,000/38400us 11.0592MHz下转成计数值是: 6MHZ-2us 12 11.0592MHz-Xus X= 12MHZ-1us 11.0592 1000,000 12 1000,000*11.059238400 11.0592 38400*12 256
36、-24=232=0E8H(小软件),62,NOTE:晶振也止一种,表格有多种,5.常用波特率和T1初值速查表,63,6.工作方式1的接收/发送 (1)RxD引脚为接收端,TxD引脚为发送端,由波特率发生器T1控制发送速度;不同于方式0下,收/发都需要由TxD送出移位时钟;(2)串行口的初始化包括:a.对SCON选工作方式;b.对PCON波特率加倍位“SMOD”进行设定(缺省值=0);c.如果是接收数据,仍要先置“1”REN位;(3)T1作波特率发生器时初始化包括:TMOD设置为定时器工作方式2(8位自动重装);将计算(或查表)出的初值X赋给TH1,TL1;启动T1 (SETB TR1); 对T
37、1不要开中断 !,64,例6.在内部数据存储器20H3FH单元中共有32个数据,要求采用串行方式1发送出去,传送速率为1200波特,设fosc=12MHz.(采用查询方式) 解:T1工作于方式2,作波特率发生器,取SMOD=0,T1的时间常数计算如下: 波特率=1200=(1/32)12106/12(256-x) x=230=E6H(小软件),65,发送程序:ORG 0000H MOV TMOD,#20H ;T1方式2 0010 0000MOV TH1,#0E6H MOV TL1,#0E6H ;T1时间常数SETB TR1 ;启动T1MOV SCON,#40H ; 0100 0000串行口工作
38、于方式1MOV R0,#20H ;R0指发送缓冲区首址 MOV R7,#32 ;R7作发送数据计数 LOOP: MOV SBUF,R0 ;发送数据JNB TI, ;一帧未发完继续查询CLR TI ;一帧发完清TIINC R0DJNZ R7,LOOP ;数据块未发完继续SJMP ,66,接收程序:ORG 0000H MOV TMOD,#20H ;T1方式2 0010 0000 MOV TH1,#0E6H MOV TL1,#0E6H ;初始化T1, T1时间常数SETB TR1 ;启动T1MOV SCON,#50H ;0101 0000设定串行方式1,并允许接收 MOV R0,#20H MOV R
39、7,#32 LOOP:JNB RI, ;一帧收完?CLR RI ;收完清RIMOV R0, SBUF ;将数据读入INC R0DJNZ R7, LOOP SJMP ,67,(1)11位UART(1+8+1+1位)(记忆),两种波特率,由TxD端发送数据,RxD端接受数据.,7.4.3 工作方式2 SM0,SM1=10,(2)由于波特率固定,常用于单片机间通讯.数据位由8+1位=9位组成,通常附加的一位(TB8/RB8 在SCON寄存器中)用于“奇偶校验”.,68,(3)方式2的波特率=fosc2SMOD/64 即:fosc/32或fosc/64 两种 (4)奇偶校验是检验串行通信双方传输的数据
40、正确与否的一个措施,并不能保证通信数据的传输一定正确.换言之:如果奇偶校验发生错误,表明数据传输一定出错了; 如果奇偶校验没有出错,绝不等于数据传输完全正确. (5)奇校验:8位有效数据连同1位附加位中,“1”的个数为奇数偶校验:8位有效数据连同1位附加位中,“1”的个数为偶数,69,约定接收采用奇校验:若接收到的9位数据中“1”的个数为奇数,则表明接收正确,取出8位有效数据即可;若接收到的9位数据中“1”的个数为偶数,则表明接收出错!应当进行出错处理.,约定发送采用奇校验:若发送的8位有效数据中“1”的个数为偶数,则要人为添加一个附加位“1”一起发送;若发送的8位有效数据中“1”的个数为奇数
41、,则要人为添加一个附加位“0”一起发送.,70,约定发送采用偶校验:如果ACC中1的个数是奇数(P=1),将TB8写成“1”发出去;如果ACC中1的个数是偶数(P=0),将TB8写成“0”发出去.约定接收采用偶校验: 若收到的数中P=0,且检查到RB8=0就可能对了若收到的数中P=1,且检查到RB8=1就可能对了若P=0且RB8=1或P=1且RB8=0就一定出错了!,71,回顾:程序状态字寄存器PSW中有一个奇偶状态位P,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,P (PSW.0):奇偶状态位(Parity Flag).P=1 表示目前ACC中“1”的个数为奇数P=0
42、 表示目前ACC中“1”的个数为偶数 CPU随时监视着Acc的“1”的个数并自动反映在P中,串口工作方式2的奇偶校验用法,72,例7:程序段选用偶校验方式发送PIPL: PUSH PSW ;保护现场PUSH ACC CLR TI ;清发送中断标志以备下次发送MOV A,R0 ;取由R0所指向的单元中的数据MOV C, P ;将奇偶标志位通过C放进TB8MOV TB8, C ;一起发送出去MOV SBUF,A ;启动发送(分析,看懂)INC R0 ;指针指向下一个数据单元POP ACC ;恢复现场POP PSWRETI ;中断返回,73,选用偶校验方式接收:(分析,看懂)PIPL:PUSH PS
43、W ;保护现场PUSH ACC CLR RI ;清发送中断标志以备下次发送MOV A,SBUF ;读进收到的数据MOV C, P ;奇偶标志位CJNC L1 ;C=0时转到L1,即P=0时转到L1JNB RB8,ERR ;P=1,RB8=0“出错”,P=1,RB8=1顺序执行SJMP L2 ;RB8=1 则表明接收正确,转L2L1: JB RB8,ERR ;P=0且RB8=1表明“出错”L2: MOV R0, A ;P=0且RB8=0表明接收正确INC R0 ;指针指向下一个数据单元POP ACC ;恢复现场POP PSW RETI ;中断返回 ERR: ;出错处理,74,7.4.4 工作方式
44、3 SM0,SM1=11,(1)11位UART(1+8+1+1) 波特率可变(记忆!) (2)其通信过程和方式2完全相同,唯一的区别是波特率机制不同;方式2的波特率固定的,为时钟周期的32或64分频,不可变.此工作方式与其他串行通讯设备连接困难,因此方式2不常用. (3)方式3的波特率可以根据需要进行设定,按前面的公式计算:,波特率=(2SMOD/32)T1的溢出率,波特率=,2SMOD fosc 32 12(2n - X),其中:X 是定时器初值,75,7.5 串行口的应用编程,1.串行口的波特率有两种方式:固定波特率(fixed)可变波特率(variable) 注意:使用可变波特率时,先确
45、定T1的计数初值,并对T1进行初始化. 2.串行通信的编程方式: (1)查询方式: 查TI或RI是否为“1”. (2)中断方式:如果预先开了中断,当TI、RI 为“1”,会自动产生中断. 注意:两种方式中当发送或接受数据后都要注意清TI或RI,76,3.查询方式发送程序:(先发后查) 发送一个数据查询TI发送下一个数据查询方式接收程序:(先查后收)查询RI读入一个数据查询RI读下一个数据 4.中断方式发送程序:发送一个数据等待中断,在中断中再发送下一个数据.中断方式接收程序:等待中断,在中断中再接收一个数据.,77,查询方式发送流程图,7.5.1 查询方式,78,查询方式接收流程图,79,7.
46、5.2 中断方式,中断方式的初始化编程同查询方式,不同的是要开中断,即置位EA和ES,编写中断服务程序.中断方式串行通信的程序流程见下图:,80,中断方式发送流程图,T1初始化、启动T1工作,设定串行通信方式,置发送数据块首址 数据块长度计数器,发送数据,全部数据发送完?,等待中断,1EA,1ES,发送数据,中断返回,0EA,0ES,中断服务程序,主程序,修改地址指针 和块长度计数器,清TI,Y,N,81,中断方式接收流程图,82,例7.接线如图,编一个自发自收程序,检查单片机的串行口是否完好,f=12MHz,波特率=600,取SMOD=0,解:依据公式波特率=求得,小软件,83,MOV TM
47、OD,#20H ;0010 0000 T1工作在方式2MOV TH1, #0CCHMOV TL1, #0CCH ;设定波特率SETB TR1 ;启动TR1MOV SCON, #50H ;0101 0000设定串行方式1,并允许接收 ABC: CLR TICLR P1.0 ;LED灭ACALL DELDAY ;延时MOV A, #0FFHMOV SBUF, A ;发送数据FFHJNB RI, $ ;RI=0等待,84,CLR RI MOV A, SBUF ;接收数据,A=FFHMOV P1, A ;灯亮JNB TI, $ ;TI=0 等待 ACALL DELDAY ; 延时SJMP ABC DELDAY:MOV R0, #0 DAL: MOV R1, #0DJNZ R1, $DJNZ R0, DAL RET ;如果发送接收正确,可观察到P1.0接的发光二极管闪亮.,85,根据串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准. 常见的有: 通用异步收发器(UART)本课程介绍的串口 RS-232C/RS-485/RS422A标准 SPI总线 USB通用串行总线 I2C总线 CAN总线,