1.39k likes | 1.56k Views
学习情景四 门禁系统. 学习目标: 了解串行通信的基本知识 掌握串行口的工作方式 掌握波特率的设计 掌握串行口工作方式的应用 掌握程序调试的基本方法和技巧。 技能目标: 会对串行口进行初始化。 会计算串行口通信波特率。 能够实现单片机与单片机之间、单片机和 PC 机之间的通信。. 任务一 智能电子产品控制芯片通信 第一部分 项目要求
E N D
学习情景四 门禁系统
学习目标: 了解串行通信的基本知识 掌握串行口的工作方式 掌握波特率的设计 掌握串行口工作方式的应用 掌握程序调试的基本方法和技巧。 技能目标: 会对串行口进行初始化。 会计算串行口通信波特率。 能够实现单片机与单片机之间、单片机和PC机之间的通信。
任务一 智能电子产品控制芯片通信 第一部分 项目要求 利用AT89S52实现单片机点对点通信。要求将存放在甲机的数据存储器20H—27H单元中数据,首先在甲机上显示,然后发送到PC机,进而再发送到乙机,以实现单片机与PC机和单片机与单片机之间的通信。
单工形式:数据只能单方向从一端向另一端传送;如:有线电视节目。单工形式:数据只能单方向从一端向另一端传送;如:有线电视节目。 数据线 发送端 接收端 地线 发送端 接收端 数据线 接收端 发送端 地线 第二部分 相关知识一、串行通信基本知识(一)串行通信的基本概念 单工 半双工形式:数据可以双向传送,但任一时刻只能向一个方向传送。既可分时双向传送数据 。 如:某些对讲机 半双工
全双工形式:同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接收能力。全双工形式:同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接收能力。 通信效率最高,适合于计算机之间的通信。 数据线 发送端 接收端 接收端 发送端 数据线 地线 全双工
(二)串行通信基本通信方式 通信双方要正确的进行数据传输,需要解决何时开始传输、何时结束传输,以及数据传输速率等问题,这就是数据传输中的同步问题。 通常,实现数据同步有两种方式:异步通信和同步通信。 1.异步通信: 数据一帧一帧地传送。发送端和接收端可以由各自的时钟控制数据的发送和接收,两个时钟源彼此独立,互不同步。 数据的一帧:由一个字符代码组成。
帧格式:一个字符由四部分组成:起始位、数据位、奇偶校验位和停止位。帧格式:一个字符由四部分组成:起始位、数据位、奇偶校验位和停止位。 起始位(0):位于字符帧的开头,占用一位,用来通知接收设备一个待接收的字符开始到达。 数据位:紧跟起始位后, 5~8位数据(规定低位在前,高位在后) 奇偶校验位(可省略),占一位,用于对字符传送作正确性检查,因此奇偶校验位是可选择的,共有三种可能,即奇偶校验、偶校验和无校验,由用户根据需要选定。 停止位(1)停止位用来表征字符的结束。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已传送完毕
2. 同步通信 在一个数据块的开头使用同步字符。数据传送时使用同一频率的脉冲来实现发送端与接收端的严格时间同步。
89S52 89S52 89S52 89S52 二、串行通信总线标准及其接口 传输距离不同,可以选择不同的总线标准。 短距离传送,只需要TX、RX和GND三根线。 距离在15米左右,采用RS-232标准接口。 如果是长距离传送,可采用RS-485标准。
(一)RS-232标准 RS-232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的于1969年公布的通信协议。 • 1.RS-232C的电气特性 • 数据线上的信号电平 • mark(逻辑1) = -3~-15V • space(逻辑0) = +3~+15V • (2) 控制和状态线上的信号电平 • ON(逻辑0)= +3~+15V(接通) • OFF(逻辑1)= -3~-15V(断开)
电平转换 RS-232C接口采用双极性信号、公共地线和负逻辑;不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意!在实际应用时,必须通过专用电平转换芯片进行电平转换。 电平转换芯片MC1488、MC1489、 MAX232 • MC1488可实现TTL→RS-232的电平转换; • MC1489可实现RS-232→TTL的电平转换。 • MAX232芯片可完成TTL到EIA双向电平的转换
89S52 89S52 通过MAX232实现RS-232C电平转换
MAX232管脚说明如下: ①C1+、C1-、C2+、C2- 是外接电容端; ②R1IN、R2IN则是2路RS-232C电平信号接收输入端; ③R1OUT、R2OUT是2路转换后的TTL电平接收信号输出端,送80S52的RxD接收端; ④T1IN、T2IN是2路TTL电平发送输入端,接80S52的TxD发送端; ⑤T1OUT、T2OUT是2路转换后的发送RS-232C电平信号输出端,接传输线; ⑥V+经电容接电源十5V; ⑦V-经电容接地。
C1+ V+ + + C1 C3 +5 V VCC C1- IBM-PC C5 AT89S52 C2+ GND + + C2 C4 C2- V RXD TXD T1out T1in RS232 MAX232 TXD RXD R1in R1out GND GND • PC机与AT89S52单片机串行通信电路 • 图中外接电解电容C1、C2、C3、C4用于电源电压变换,提高抗干扰能力,它们可以取相同数值电容1.0 μF/16 V。电容C5用于对+5 V电源的噪声干扰进行滤波,其值一般为0.1 μF
(二)AT89S52串行口结构与控制 1. 串行口的结构
2. 串行口控制 (1)串行口控制寄存器SCON(98H) SM0、SM1:串行口工作方式控制位,两位对应四种工作方式,如下表所示(fosc是晶振频率)。
SM2:多机通信控制位,主要用于方式2和方式3 • 当串行口以方式2或方式3接收时,如SM2=1,则只有当接收到的第9位数据(RB8)为1,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求,否则将接收到的前8位数据丢弃。 • SM2=0,不论第9位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断申请。 • 在方式0时,SM2=0。 • REN:允许接收控制位 • REN=1,允许接收;REN=0,禁止接收。
TB8:发送数据第9位 • 方式0,此位未使用 • 方式1,此位未使用 • 方式2和方式3:TB8=1,说明该发送帧为地址帧。 • TB8=0,说明该发送帧为数据帧 • RB8:接收数据第9位 • 方式2和方式3:RB8存放接收到的第9位数据,代表接收数据的某种特征。 • 若SM2=1,RB8=1,说明收到帧为地址帧。
TI:发送中断标志 • 在一帧数据发送完时置位。TI=1,申请中断,中断被响应后,TI不能自动清零,必须由软件清零。 • RI:接收中断标志 • 在接收到一帧有效数据后,由硬件置位。RI=1,申请中断。RI不能自动清零,必须由软件清零。
(2)电源控制寄存器PCON PCON不能位寻址。 SMOD—串行口波特率的倍增位 当SMOD=1时,串行口波特率加倍。 系统复位时,SMOD=0。
三、AT89S52串行口工作方式 (一)串行口波特率设计 1. 波特率 波特率的定义是每秒钟传送二进制数码的位数(亦称比特数),单位是b/s。 假设数据传送速率是120字符/s,而每个字符格式包含10个代码(1个起始位、1个终止位、8个数据位)。这时,传送的波特率为 (10b/字符)×120字符/s = 1200 b/s 每一位代码的传送时间Td为波特率的倒数。
2. 波特率设计 方式0波特率 方式0波特率 = fosc /12 方式2波特率 方式2波特率 = (2SMOD/64) × fosc SMOD为0时,波特率等于振荡器频率的1/64 SMOD为1时,波特率等于振荡器频率的1/32。 方式1和方式3的波特率 串行口方式1和方式3的波特率由定时器T1或T2的溢出率和SMOD所确定。 波特率= 2smod/32×(定时器1溢出率)
例如振荡频率fosc=11.0592MHZ,若SMOD=0,通信波特率为9600波特,则例如振荡频率fosc=11.0592MHZ,若SMOD=0,通信波特率为9600波特,则 X=256-[11.0592×106×(1+0)]/ (9600×384) =253=FDH 初始化程序如下: MOV TMOD,#20H ;设T1为定时方式2 MOV THl,#0FDH ;设定波特率为9600bit/s MOV TLl, #0FDH SETB TRl ;启动定时器 MOV PCON,#00H ;SMOD=0 MOV SCON,#50H ;串行口工作在方式1
(二)串行口工作方式 1. 工作方式0 当SM0 SMl=00时,串行接口选择工作方式0,为同步移位寄存器输入/输出方式,常用于扩展I/O口。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出,作为外接部件的同步信号。发送或接收的是8位数据(低位在前,高位在后)。其波特率固定为fosc/12。 发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。
74LS164 89S52 接收前置REN=1和RI=0,当8位数据接收结束,RI被置“1”,可通过指令MOV A,SBUF将数据读入。 下图采用一个串入并出移位寄存器,TXD连接串行口输出移位寄存器164的时钟端,RXD连接164的输入端,P1.0连接164的CLR选通端。
根据硬件连接,方式0发送数据程序如下: SETB P1.0 ;选通74LS164 MOV SCON,#00H ;串口工作在方式0 MOV A,#DATA MOV SBUF,A ;发送数据 JNB TI,$ ;等待发送完? CLR TI ;清除TI中断标志 CLR P1.0 ;关闭74LS164
2. 工作方式1 工作方式1,SM0 SMl= 01,为可变波特率的8位异步通信方式。 发送数据由TXD端输出,接收数据由RXD端输入。 方式1以10位为一帧传输,设有1个起始位(0),8个数据位和1个停止位(1)。其帧格式起始位(0),8个数据位和1个停止位(1)。
发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位。 接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0”,开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。
【例4.1】89S52串行口按双工方式收发ASCII字符,甲机发送的字符从外部RAM的1000H开始,检测到结束字符0AH就结束发送,乙机将接收的字符放在内部RAM的30H开始的空间。要求通信的波特率为9600波特,用中断方式编写通信程序。【例4.1】89S52串行口按双工方式收发ASCII字符,甲机发送的字符从外部RAM的1000H开始,检测到结束字符0AH就结束发送,乙机将接收的字符放在内部RAM的30H开始的空间。要求通信的波特率为9600波特,用中断方式编写通信程序。 主程序: MOV TMOD,#20H ;定时器1设为工作方式2 MOV TLl,#0FDH ;定时器初值 MOV THl,#0FDH ;8位重装值
SETB TRl ;启动定时器1 MOV SCON,#50H ;将串行口设置为方式1, REN=l MOV DPTR,#1000H ;发送数据区首址送 DPTR MOV R0, #30H ;接收数据区首址送R0 SETB ES SETB EA ;开中断 ACALL SEND ;先发送一个字符 L00P: SJMP $ ;等待中断
发送子程序 SEND:CLR TI MOV A,@DPTR ;取发送数据到A INC DPTR ;修改发送数据指针 MOV SBUF,A ;发送ASCII码 CJNE A,#0AH,SEN1 ;是否是结束字符 CLR ES ;关闭串口中断 SEN1:RET ;返回
中断服务程序 ORG 0023H ;串行口中断入口 AJMP RSI ;转至中断服务程序 ORG 0100H RSI:JNB RI, SEN ;TI=1,为发送中断 ACALL REV ;RI=1,为接收中断 SJMP NEXT ;转至统一的出口 SEN:ACALL SEND ;调用发送子程序 NEXT: RETI ;中断返回
接收子程序 REV: CLR RI MOV A, SBUF ;读出接收缓冲区内容 MOV @R0, A ;读入接收缓冲区 INC R0 ;修改接收数据指针 CJNE A,#0AH,RES ;是否是结束字符 CLR ES ;关闭串口中断 RES: RET ;返回
3. 工作方式2 SM1 SM0= 10,串行接口选择工作方式2。 方式2是11位异步通信方式,每帧数据由1个起始位“0”、9个数据位和1个停止位“1”共11构成。其中发送的第9位由SCON的TB8提供,接收的第9位存在SCON的RB8位。其波特率是固定的为fosc/32或fosc/64。 方式2发送:CPU执行一条写入SBUF的指令就启动串行口的发送,并把TB8的内容装入发送寄存器的第9位。首先发送起始位0,此后每经过一个时钟周期产生一个移位脉冲,并且由TXD输出一个数据位,当11位数据全部发送后,使TI置1。
方式2接收:接收过程和方式1类似,当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位数据。在方式2的接收中,若RI=0, SM2=0或接收到的第9位数据为1,成立则RI=1,8位数据进入SBUF,第九位进入RB8。 若不满足上述两个条件则接收到的信息将丢失,不再恢复,也不置位RI。 【例4.2】设计一个发送程序,将片内RAM30H~3FH中的数据串行发送,串行口设定为方式2状态,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时第9位数据作奇偶校验用。
程序清单如下: TRT: MOV SCON,#80H ;方式2设定 MOV PCON,#80H ;取波特率为fosc/32 MOV R0,#30H MOV R7,#10H ;数据长度10H LOOP:MOV A,@R0 ;取数据送A MOV C,PSW.0; MOV TB8,C MOV SBUF,A ;数据送SBUF,启动发送 WAIT:JBC TI,CONT ;判断发送结束否 SJMP WAIT CONT:INC R0 DJNZ R7,LOOP RET
四、串行口通信应用举例 (一)双机通信应用举例 1. 通信双方的协议 (1)通信双方的波特率均为9600波特,均工作在串口方式1。甲机发送,乙机接收。 (2)甲机开始发送时,先发一个呼叫信号“0FH”,乙机接收后,若同意接收数据就发一个应答信号“01H”。 (3)当甲机接到“01H”后,开始发送数据。假设发送的数据块首地址是片内RAM 40H,数据块长度64H。数据块发送结束后,发送累加校验和。累加校验和是指数据块中每个字节的算术累加和。
(4)乙机接收数据并存在数据缓冲区。假设数据缓冲区的首地址是片内RAM 40H。乙机在接收过程中对接收的数据块也作算术累加和,并与甲机发送的累加和作比较,若相等则表示接收正确,给甲机发“00H”;若不等则表示接收不正确,给甲机发“FFH”,请求重发。 (5)甲机收到“00H”后,结束发送,否则将数据重发一次。
2.查询方式下的通信程序 甲机发送子程序: ATX: MOV TMOD,#20H ;设T1为定时方式2 MOV THl,#0FDH ;设定波特率为9600bit/s MOV TLl, #0FDH MOV PCON,#00H SETB TRl ;启动定时器T1 MOV SCON,#50H ;串行口初始化 ATXl: MOV A,#0FH ;发送呼叫信号 MOV SUBF,A ATWl: JBC TI, ATRl SJMP ATWl ;等待发送出去 ATR1:JBC RI,ATR2 ;等待乙机应答 SJMP ATRl
ATR2: MOV A, SBUF ;接收应答信号 XRL A, #01H JNZ ATX1;乙机未准备好,继续呼叫 ATX2: MOV R0,#40H ;数据块首地址送R0 MOV R2,#64H ;数据块长度送R2 MOV R3 ,#00H ;清校验和寄存器 ATX3: MOV A,@R0 ;发送一个数据字节 MOV SBUF, A MOV A,R3 ADD A,@R0 ;求校验和 MOV R3,A INC R0 ;修改地址指针
ATW2:JBC TI,ATX4 SJMP ATW2 ATX4: DJNZ R2,ATX3;判数据块发送完否 MOV A,R3 ;发送校验和 MOV SBUF,A ATW3:JBC TI, ATR3 SJMP ATW3 ATR3: JBC RI,ATR4 ;等待乙机应答 SJMP ATR3 ATR4: MOV A, SBUF JNZ ATX2 ;若乙机回答出错,则重发 RET
接收子程序: BRXD:MOV TMOD,#20H ;设T1为定时方式2 MOV THl, #0FDH ;设定波特率为9600bit/s MOV TLl, #0FDH MOV PCON,#00H SETB TRl ;启动定时器T1 MOV SCON,#50H ;串行口设为方式1 BRXl: JBC RI, BRX2 ;等待甲机呼叫信号 SJMP BRXl BRX2: MOV A,SBUF XRL A,#0FH JNZ BRXl ;判呼叫信号是否正确 BTXl: MOV A, #01 H ;发应答信号 MOV SBUF,A
BWl: JBC TI, BRX3 SJMP BWl BRX3:MOV R0, #40H;R0指向接收数据缓冲区首址 MOV R2, #64H ;数据块长度送R2 MOV R3, #00H ;校验和单元清零 BRX4:JBC RI, BRX5 SJMP BRX4 BRX5:MOV A, SBUF MOV @R0, A ;接收的数据转存 INC R0 ADD A, R3 ;求校验和 MOV R3, A DJNZ R2, BRX4 ;判数据块接收完否 BW2: JBC RI, BRX6 ;接收甲机校验和
SJMP BW2 BRX6:MOV A, SBUF XRL A,R3 ;比较校验和 JZ BEND MOV A,#0FFH ;校验和不等,发错误标志 MOV SBUF,A BW3: JBC TI, AGAIN ;转重新接收 SJMP BW3 BEND:MOV A,#00H ;向甲机发正确标志 MOV SBUF,A BW4: JBC TI, WRITE SJMP BW4 AGAIN:LJMP BRX3 ;返回重新接收数据 WRITE:RET
89S52 89S52 89S52 89S52 (二)多机通信简介
多机通信控制过程如下: (1)使所有从机的SM2=1,准备接收主机发送的地址帧。 (2)主机发送地址帧(TB8=1),指出接收从机的地址。 (3)从机接收到地址帧后,与自身地址相比较。 (4)与主机发送地址相同的从机将SM2=0,准备接受数据帧,地址不相同的从机SM2仍为“1”。 (5)主机发送数据帧(TB8=0),已被寻址的从机SM2=0,可以接收数据帧;未被寻址的从机由于SM2=1,不能接收此帧数据。 (6)此次通信结束后,被寻址的从机将SM2=1,进行下次通信。