1、10.1 串行口通信方式10.2 PC机与单片机的通信,第10章 串行通信接口技术,串行通信基础知识1数据通信计算机与外界的信息交换称为通信。通信方式有:并行通信和串行通信。2. 串行通信的数据传送方向 a.单工配置,即只允许某机的通信接口只能发送或接收. b.半双工配置,可以传送或接收数据,但同一时刻只能有 一个站发送.c.全双工配置,允许两机的发送和接收可以同时进行.,10.1 串行口通信方式,3异步通信和同步通信,(1)异步通信在异步通信中,数据或字符是分为一帧一帧地传送。下面是一种11位的帧格式:,在帧格式中,一个字符由四个部分组成:起始位、数据位、奇偶校验位和停止位。,(2)同步通信
2、同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,同步传送格式如下:,数据,4波特率(Baud Rate)波特率,即数据传送速率,表示每秒钟传送二进制代码的位数,单位是位秒。假如数据传送的速率每秒为120个字符,每个字符包含10个代码位(1个起始位、8个数据位、1个停止位),这时,传送的波特率为:10120位秒1200波特(bps),10.1.2 串行口控制寄存器,SM0,SM1:串行口操作方式选择位。 SM2:在方式2和方式3中,用于主从式多机通信的控制位,若SM21,则允许 接收到的第9位数据(RB8)为0,则接收中断标志RI不会被激活。在
3、方式1中, 若SM21,则只有接收到有效停止位时,中断标志RI才置1。 REN:允许接收控制位,用软件置1或清0。 TB8:在方式2和方式3中为准备发送的第9位数据位,可作为数据的奇偶校验位, 或在多机通信中作为地址帧或数据帧的标志。 RB8:在方式2和方式3中为接收到的第9位数据,既可作为约定好的奇偶校验位, 也可以作为多机通信时的地址帧或数据帧标志。 TI: 发送中断标志位。 RI: 接收中断标志位。,SCON 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H,2电源控制寄存器PCONPCON是为了在CHMOS的MCS-51单片机上实现电源控制而设置的其中只有SMOD与串行口
4、工作有关。它的格式和功能如下:,SMOD称为波特率选择位。在工作方式l、2和3时,若SMOD1,则波特率提高一倍;若SMOD0,则波特率不加倍。整机复位时,SMOD0,PSCON D7 D6 D5 D4 D3 D2 D1 D0,10.1.3 波特率的设计,方式0的波特率fosc/12方式2的波特率2SMODT1/64 方式1和方式3的波特率 2SMODT1/32溢出率 其中,T1的溢出率取决于T1的工作方式和初值。如果计数初值为x,则每过“256-x” 个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止T1中断。这时, 波特率2SMOD /32 fosc/(12(25
5、6-x) 例 已知805l单片机时钟振荡频率为11.0592MHz,选用定时器T1工作方式2作波特率发生器,波特率为2400波特,求初值X。 解:设波特率控制位SMOD0,则有:所以,(THl)(TLl)F4H。,串行口工作方式串行口的操作方式由SM0、SM1定义,编码和功能如表10-2所示。,1方式0,10.1.5 串行口应用举例,上图中,下面的程序将内部RAM区中20H和21H单元的内容经串行口由74LSl64并行送出。 START: MOV R6,#02H ;置发送字节数MOV R0,#20H ;设置片内RAM指针MOV SCON, #00H ;设置串行口方式0 SEND: MOV A,
6、R0 MOV SBUF,A ;启动串行口发送 WAIT: JNB TI,WAIT ;末发送完一帧,等待CLR TI ;清发送中断标志INC R0 ;取下一个数DJNZ R6,SEND ;判是否发送完,2设计一程序,实现两片MCS-51串行通信,将8051(1)片内RAM的50H5FH中的数据串行发送到805l(2)中,并储于805l(2)片内RAM40H4FH单元中。假设两单片机晶振均为11.0592MHz。,分析: 根据题目要求,选择串行口方式3通信。奇偶校验的过程是这样实现的:在发送端,TB8作奇偶校验位。在数据写入缓 冲发送器之前,先将数据的奇偶位写入TB8,作为第9位数据传送,这个奇偶
7、性数据传送到接收一方RB8位上。在接收一方,接收到一个字符(8位二进制信息与奇偶校验位)后,从SBUF转移到A中时,状态标志寄存器会产生已接收到数据的奇偶值,将此奇偶值与RB8中的奇偶值相比较,两者应该相符,否则接收字符有错。发现错误要通知对方重发。,如果选择波特率为9600bps、且选择T1方式2定时,则程序如下: (1)单片机(1)发送程序: TTTT: MOV TMOD,#20H ;定时器1方式2MOV TL1,#0FDH MOV THl, #0FDH ;置定时器初值,选定9600bps MOV SCON,0C0H ;选择通信方式3SETB TR1 ;启动定时器1MOV R0,#50H
8、;首地址50HR0MOV R7,#10H ;数据长度10HR7 LOOP: MOV A,R0 ;取数据AMOV C,PSW.0MOV TB8,C ;PTB8MOV SUBF,A ;数据SBUF启动发送JBC TI,CONT ;判断发送中断标志SJMP WAIT CONT: INC R0DJNZ R7,LOOP,(2) 单片机(2)接收程序 RRRR: MOV TMOD,#20H ;定时器1方式2MOV TL1,#0FDH MOV THl, #0FDH ;置定时器初值,选定9600bpsMOV SCON,0D0H ;选择通信方式3,允许接收(REN=1)SETB TR1 ;启动定时器1MOV R
9、0, #40H ;首地址40HR0MOV R7,#10H ;数据长度10HR7 LOOP: JBC RI,RECESJMP LOOP ;等待接收,RECE: MOV A,SUBF ;数据SBUF启动发送JB PSW.0,ONEE ;判断接收数据奇偶性JB RB8,ERRR ;判断发送瑞奇偶性SJMP RIGT ONEE: JNB RB8,ERRR RIGT: MOV R0,A ;接收正确INC R0DJNZ R7,LOOP ERRR: ;接收错误,图10-4 8250的引脚及功能框图,10.2 PC机与单片机的通信 异步通信芯片8250,以下为各部分的功能及引脚含义: (1) 数据输入/输出缓
10、冲器八条三态双向数据线(D0D7)实现8250芯片与处理机之间的双向通信,包括数据,控制 字及状态信息的传输。 (2) 读/写控制逻辑主要提供芯片与处理机之间的数据传输,并接受CPU的编程。包括如下引脚功能: 芯片选择(CS0、CS1、 )当CS0、CS1为高, 为低时,8250芯片被选中。 地址选通( ) 当 为低时,则锁存片选信号(CS0、CS1、 )和寄存器选择信号(A0、A1、A2),即 允许芯片和处理器进行数据传输。 寄存器选择(A0、A1、A2)芯片内部可供处理机访问的十个寄存器可由这三个信号和线路控制寄存器最高位DLAB共 同来选择。 数据输入选通(DISTR、 )当DISTR为
11、高电平,或 为低电平(只需其中一个有效),且芯片被选中,则允许处 理机从选定的寄存器中读出数据或状态信息。 数据输出选通(DOSTR、 )当DOSTR为高或 为低时,且该片被选中,则允许处理机将数据或控制命令写到选定的寄存器中。 收发器禁止(DDIS)该端输出为高电平时,禁止处理器对8250写操作。, 主复位(MR)当MR为高电平时,除接受缓冲器、发送保持寄存器、除数锁存器之外,其余寄存器和控 制逻辑均被复位。 外部时钟输入/输出(XTAL1、XTAL2)由外部基准定时振荡器提供时钟。 片选输出(CSOUT)当CSOUT为高电平时,8205已被CS0、CS1、 信号选中,数据传送可以开始。 中
12、断(INTRPT)每当任一种中断类型变成有效,且中断允许时,该输出端为高电平。 (3) 调制解调器(MODEM)控制逻辑实现8250与MODEM之间通信传输的控制。该逻辑包括如下引脚功能: 数据装置准备好( )输入信号。为低时,表示MODEM已作好准备与8250进行数据传输。 信号的状态可由调制解调 器状态寄存器的第5位(DSR)检测出来。 清除发送( ),输入信号每当MODEM状态寄存器的CTS位改变状态时,如果允许MODEM状态中断,则产生一次中断。 数据终端准备好( ),输出信号当 为低电平时,通知MODEM,8250准备好通信。 请求发送( ),输出信号当 低电平时,通知MODEM,8
13、250准备好发送数据。 接收线路信号检测( ),输入信号若为低时,表示MODEM已经检测出数据载波。每当MODEM状态寄存器的PLSD位改变状态时, 如果允许MODEM状态中断,则产生一次中断。, 振铃指示(RI)该端时MODEM控制功能的输入,若为低时,表示MODEM已收到一个电话响铃信号。若MODEM 状态中断被允许,每当MODEM状态寄存器的RI位由高变低时产生一次中断。 输出1( )用户指定的MODEM控制功能的输出。通过对MODEM控制寄存器第2位编程置1, 引脚就变成低电平。 输出2( )用户指定的MODEM控制功能的输出。通过对MODEM控制寄存器第3位编程置1, 引脚就变成低电
14、平。 (4) 接收器逻辑该逻辑包括接收器移位器和数据寄存器及相应的接收控制逻辑。其引脚功能如下: 接收器时钟(RCLK)输入接收波特率的16倍时钟信号。 串行输入(SIN)来自通信链路(如外设、MODEM、数据设备)的串行数据输入。(5) 发送器逻辑该逻辑包括发送器保持寄存器和移位器及相应的发送控制逻辑。其引脚功能如下: 波特输出(BAUDOUT)输出发送波特率的16倍时钟信号。 串行输出(SOUT)送到通信链路(如外设、MODEM、数据设备)的串行数据输出。,8250的内部寄存器,(1) 通信线控制寄存器(3FBH,只写),图10-5 通信线控制寄存器,(2) 通信线状态寄存器(3FDH,只
15、读),(3) 据发送保持寄存器(3 F 8H,只写)该寄存器包含将要串行发送的数据,其中第0位是串行发送的第1位。 (4) 数据接收缓冲寄存器(3F8H,只读)该寄存器存放接收到的数据,其中第0位是串行接收的第1位。 (5) 除数锁存器(3F8H/3F9 H,只写)除数锁存器为16位,由高8位和低8位锁存器组成,对时钟输入(1.8432MHZ)进行分频,产生16倍波特率的波特率发生器(即BAUDOUT)。除数可由下面公式算出: 除数1.8432106(波特率16)除数锁存器的值必须在8250初始化时预置。为此必须先把通信线控制寄存器的最高位(DLAB)置1,然后通过I/O口3F8H和3F9H访
16、问除数锁存器的低8位和高8位。,(6) 中断允许寄存器(3F9H,只写),对8250初始化的工作一般分成三步:(1) 设置波特率(假设为1200) MOV AL, 10000000B ;置DLAB=1 MOV DX, 3FBH ;写入通信线控制寄存器 OUT DX, AL MOV AL, 60H ;置产生1200波特率除数低位 MOV DX, 3F8H OUT DX, AL ;写入除数锁存器低位 MOV AL, 00H ;置产生1200波特率除数高位 MOV DX, 3F9H OUT DX, AL ;写入除数锁存器高位,(2) 设置通信数据格式假设7个数据位,1个停止位,偶校验,编程如下: M
17、OV AL, 00011010B ;设置数据格式 MOV DX, 3FBH ;写入通信线控制寄存器 OUT DX, AL,(3) 设置操作方式PC机异步通信适配器中的8250中断输出(INTRPT)外接成受引脚输出的三态门控制。只有当信号为低时,并有INTRPT产生,中断信号才可通过此三态门。因此只要控制输出,即可控制是否允许中断信号通过。对MODEM控制寄存器写入所要求的控制字,置位3为1,便可使为低电平,三态门变成常通状态,可在中断方式下工作(中断是否产生,受中断允许寄存器控制)。编程示例如下: ;不允许中断输出MOV AL, 03H ;使 为高, 、 有效MOV DX, 3FCHOUT
18、DX, AL ;允许中断输出MOV DX, 3FCHMOV AL, 0BH ;使 为低, 、 有效OUT DX, AL ;自测试工作方式MOV AL, 13H ;自测试下若允许中断则应为1BHMOV DX, 3FCHOUT DX, AL,(4) 设置中断允许寄存器 假设禁止中断,编程如下: MOV AL, 00H ;禁止所有中断的控制字 MOV DX, 3F9H OUT DX, AL ;写入中断允许寄存器,10.2.2 PC机与8051双机通信技术,图10-10 PC机与单片机串行通信接口线路图,MC1488将TTL电平转换为RS-232C电平,供电电压为12V;MC1489则是把RS-232
19、C标准电平转换为TTL电平,供电电压为5V,简单、经济的接口电路,省去了12V电源和1488、1489电平转换芯片,图10-11 PC机与8031通信接口电路,1. 通信软件设计,列举一个实用的通信测试软件。其功能是:PC机键盘的输入,将发送给单片机,单片机接收到PC机发来的数据后,回送同一数据给PC机,并在屏幕上显示出来。只要屏幕上所显示的字符与所键入的字符相同,即可表明PC机与单片机间通信正常。双方约定: 波特率:2400波特。 信息格式:8个数据位,一个停止位。 传送方式:PC机采用查询方式收发数据,51机采用中断方式 接收信息。,PC机通信软件 通信软件采用8086/8088汇编语言编
20、写。程序清单如下:,Stack Segment para stackstackdb 256dup(0) Stack ends Code Segment para public code Start proc farassume cs:code,ss:stackPUSH DS MOV AX, 0PUSH AXCLI INITOUT: MOV DX, 3FBH ; 通信线控制寄存器第7位置1(DLAB=1),以便设置波特率 MOV AL, 80H MOV DX, 3F8H ;设置除数锁存器低位 MOV AL, 30H OUT DX, AL MOV DX, 3F9H ;设置除数锁存器高位,MOV A
21、L, 0OUT DX, ALMOV DX, 3FBH ;设定数据格式,8数据位,1停止位,无校验MOV AL, 03HOUT DX, ALMOV DX, 3FCH ;设置MODEM控制信号MOV AL, 03HOUT DX, ALMOV DX, 3F9H ;禁止所有8250中断(四种类型)MOV AL, 0OUT DX, AL FOREVER:MOV DX, 3 ;发送保持寄存器不空则循环等待IN AL, DXTEST AL, 20H,JZ FOREVER WAIT: MOV AH, 1 ;检查键盘缓冲区,无字符则循环等待INT 16HJZ WAITMOV AH, 0 ;若有,取键盘字符INT
22、 16H SENDCHAR: MOV DX, 3F8H ;发送键入的字符OUT DX, AL RECEIVE: MOV DX, 3FDH ;检查接收数据,未准备好继续检查IN AL, DXTEST AL, 01HJZ RECEIVETEST AL, 1AH ;判接收数据是否出错,有错则转错误处理JNZ ERRORMOV DX, 3F8H ;从接收寄存器中读取数据IN AL, DXAND AL, 7FH ;去掉无效位,得到数据PUSH AXM0V BX, 0 ;显示接收到的字符,M0V AH, 14 INT 10HPOP AXCMP AL, 0DH ;得到的数据若不是回车符则返回JNZ OREV
23、ERMOV AL, OAH ;是回车行则回车换行M0V BX, 0M0V AH, 14INT 1OH JMP FOREVER ERROR: MOV DX, 3F8H IN AL, DXMOV AL,? ;功能调用,显示“?”号MOV BX, O M0V AH, 14INT 10HJMP FOREVER Start endsCode endsend Start,2MCS-51单片机通信软件 MCS-5l单片机通过中断方式接收PC机发送过来的字符,并回送给主机。 程序约定: 波特率设置;T1方式2工作,计数常数F3H,SMOD=1,波特率为2400波特。 串行口初始化:方式1,允许接收。 中断服务
24、程序入口: 0023H。 程序流程框图:,程序清单: ORG 0000HLJMP INITOUT ;转到初始化程序ORG 0023HLJMP SERVE ;串行口中断服务程序入口 ORG 0050H INITOUT: MOV TMOD, #20H ;定时器T1初始化MOV TH1, #0F3HMOV TL1, #0F3HMOV SCON, #50H ;串行口初始化MOV PCON, #80H ;SMOD=1SETB TR1 ;启动定时器TlSETB EA ;开中断SETB ES ;允许串行口中断LIMP Main ;转主程序,本例略,SERVE: CLR EA ;关中断CLR RI ;清接收中
25、断标志PUSH DPH ;保护现场PUSH DPLPUSH ACC Receive:MOV A,SBUF ;接收PC机发来的数据 Sendback:MOV SBUF,A ;将数据回送给PC机 Wait: JNB TI,Wait ;发送器不空则循环等待CLR TI Return:POP ACC ;恢复现场POP DPLPOP DPHSETB EA ;开中断RETI ;返回,10.2.3 PC机与805l多机通信技术,1. 多机通信原理,805l系列单片机的全双工串行IO接口支持四种串行通信工作方式。其中方式2和方式3是专为MCS-51单片机的多机通信而设置的。在方式2和方式3中,用户通过使用多机
26、通信控制位SM2,可以方便地实现主机一从机的一对一通信。PC机的串行通信接口是以8250为核心部件组成的。虽然8250本身并不具备805l系列单片机的多机道通讯功能,但通过软件的办法,可使得8250满足单片机多机通信的要求。,2. 通信接口设计,图10-15 通讯接口,接收端电平转 换电路,发送驱动电平 转换电路,3. 通信软件设计()PC机通信软件 PC机采用80868088汇编语言编制通信软件。程序约定:)波特率设置:9600波特。 )数据传输格式:1个起始位,8个数据位1个可编程位(奇偶位)、1个停止位。 )校验方式:由于奇偶校验位被用作发送地址码或数据的特征位,故数据通信的校核采用累加
27、和校验方法。 )数据传送方式: PC机采用查询方式发送和接收数据。,程序清单如下: COMUNI: MOV DX, 3FBH ;设置波特率(8250初始化)MOV AL, 80HOUT DX, ALMOV DX, 3F8HMOV AL, 0CHOUT DX, ALMOV DX, 3F9HMOV AL, 0OUT DX, ALMOV DX, 3FBHMOV AL, 2BH ;设置8位数据位,1位停止位OUT DX, ALMOV DX, 3FCH ;奇偶位为“1”MOV AL, 03HOUT DX, AL ;状态寄存器初始化MOV DX, 3F9HMOV AL, 0OUT DX, AL ;禁止中断
28、MOV AX, 0MOV BX, 00FFH ;设置传送字节数MOV SI, SOURCE ;设置发送数据指针MOV DI, DEST ;设置接收数据指针MOV DX, 3FDH,LEEP: MOV CX, 2801H ;延时常数 LEEP1: IN AL, DXTEST AL, 20HJZ LEEP1MOV DX, 3F8HMOV AL, NUMBER ;发送地址码OUT DX, AL LEEP2: LOOP LEEP2 ;延时MOV DX, 3FDH LEEP3: IN AL, DXTEST AL,01HJZ LEEP ;没收到回答信号重发TEST AL,1EHINZ ERRORMOV D
29、X,3F8HIN AL,DX ;接收回答信号JNZ ERRORMOV DX,3FBHMOV AL,3BH ;奇偶位为“0”OUT DX, AL START: MOV DX, 3FDHMOV CX, 2801H,SEND: IN AL, DXTEST AL, 20HJZ SENDMOV DX, 3F8HMOV AL, SI ;发送数据OUT DX, ALADD AL, AH ;累加和MOV AH, AL RECV: LOOP RECVMOV DX, 3FDHIN AL, DXTEST AL, 01HJZ SENDTEST AL, 1EHJNZ ERRORMOV DX, 3F8H ;读入数据IN
30、AL, DXMOV DI, ALDEC BXJZ END ;没完,继续INC SIINC DIJMP START,ERROR: MOV DX, OFFSET ERROR1MOV AH, 9INT 21HINT 20H END: MOV DX, 3FDH ;数据传送结束后发校验位MOV CX, 2801H END1: IN AL, DXTEST AL, 20HJZ END1MOV DX, 3F8HMOV AL, AHOUT DX, ALMOV DX, 3FDH END2: LOOP END2IN AL, DXTEST AL, 01HJZ ENDMOV DX, 3F8HIN AL, DX ;接收回
31、答信号AND AL, ALJZ END3JMP ERROR END3: INT 28H,(2) 单片机通信软件 单片机的数据通信由串行口完成,定时器T1作为波特率发生器。程序规定: )波特率设置:9600波特。 )数据传输格式:1位起始位,8位数据位,1位可编程位(TBS),l位停止位。 )工作方式设置:定时器T1设置为方式2,串行口设置为工作方式3。 )数据传送方式:单片机通过中断方式发送和接收数据。,程序如下:COMUN2: MOV TMOD, #20H ;设置波特率MOV TH1, #0FDHMOV TL1, #OFDHSETB TR1SETB EA RPT: SETB ESMOV SC
32、ON,#0F8HMOV PCON,#80HMOV 23H,#OCH ;设置接收数据指针MOV 22H,#00HMOV 21H,#08HMOV 20H,#00H ;设置发送数据指针MOV R5,#00H ;累加和单元置零MOV R6,25HMOV R7,26H ;取传送字节数INC R6NC R7,RPTT: SJMP RPTT ;等待中断 RPTR: CLR ES RPTR1: SJMP RPTR1 ;结束 0023H: LJMP INTU ;中断服务子程序入口 INTU: JBC RI,RI1 INTUR: JBC TI,INTUR1 INTUR1:RET1 TI1: MOV A,24H ;
33、取校验码XRL A,R5JZ TI3 TI2: POP ACC ;校验不正确回送“FF”POP ACCMOV DPTR,#RPTPUSH DPLPUSH DPHMOV SBUF,#OFFHRETI,TI3: POP ACC ;校验正确回送“00”POP ACCMOV DPTR,#RPTRPUSH DPLPUSH DPHMOV SBUF,#O0HRET TI4: MOV DPH,21H ;发送数据MOV DPL,20HMOVX A,DPTRINC DPTRMOV 21H, DPHMOV 20H, DPLMOV SBUF, A TI5: RETI RI1: JNB 9DH, RI3 ;判SM2MOV A, SBUF ;接收地址码CLR C,SUBB A, 27H ;与本机地址比较JNZ RI2 ;与本机地址码不符则返回MOV SBUF, #00H ;与本机地址码相符则回送“00”CLR 9BH RI2: RETI RI3: DJNZ R6, RI4 DJNZ R7, RI4 ;未完,继续传送和接收数据MOV 24H, SBUFAJMP TI1 RI4: MOV A, SBUF ;接收数据MOV DPH, 23HMOV DPL, 22HMOVX DPTR, AADD A, R5MOV R5, AINC DPTRMOV 23H, DPHMOV 22H, DPLAJMP TI4,