文档详情

[工学]第七章 MCS51单片机串行接口

1506****555
实名认证
店铺
PPTX
916.49KB
约32页
文档ID:216277582
[工学]第七章 MCS51单片机串行接口_第1页
1/32

第七章 MCS-51单片机串行接口 第一页,共32页1 串行口控制寄存器(SCON) SCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行数据通信的控制单元地址为98H,位地址为98H9FH寄存器的内容及位地址表示如下:位地址 9FH 9EH9DH9CH 9BH9AH 99H98H位符号 SM0 SM1SM2RENTB8RB8TIRI7-1 串行口控制寄存器第二页,共32页各位的说明如下:1)SM0 、SM1串行口工作方式选择位 其状态组合和对应工作方式为: SM0 SM1 工作方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3第三页,共32页2)M2允许方式2、3的多机通信控制位 在方式2和3中,若SM21且接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入接收SBUF中,并置位RI产生中断请求;否则丢弃前8位数据若 SM20,则不论第九位数据(RB8)为1还是为0,都将 前8位送入接收SBUF中,并产生中断请求 方式0时,SM2必须置03)REN允许接收位 REN0 禁止接收数据 REN1 允许接收数据4)TB8发送数据位8 在方式2、3时,TB8的内容是要发送的第9位数据,其值由用户通过软件来设置。

第四页,共32页5)RB8接收数据位8 在方式2、3时,RB8是接收的第9位数据 在方式1时,RB8是接收的停止位 在方式0时,不使用RB86)TI发送中断标志位 在方式0时,发送完第8位数据后,该位由硬件置位 在其它方式下,于发送停止位之前,由硬件置位 因此,TI1表示帧发送结束,其状态既可供软件查询使用,也可请求中断 TI由软件清“0”第五页,共32页7)RI接收中断标志位 在方式0时,接收完第8位数据后,该位由硬件置位 在其它方式下,于接收到停止位之前,该位由硬件置位 因此,RI1表示帧接收结束,其状态既可供软件查询使用, 也可请求中断 RI由软件清“0”第六页,共32页2 串行口缓冲区SBUF SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作CPU在写SBUF,就是修改发送缓冲器;读SBUF,就是读接收缓冲器串行口对外也有两条独立的收发信号线RxD、TxD,因此可以同时发送、接收数据,实现全双工 第七页,共32页 PCON不可位寻址,字节地址为87H它主要是为CHMOS型单片机80C51的电源控制而设置的专用寄存器。

其内容如下: 与串行通信有关的只有D7位(SMOD),该位为波特率倍增位,当SMOD=1时,串行口波特率增加一倍,当SMOD=0时,串行口波特率为设定值当系统复位时,SMOD=0 位序D7D6D5D4D3D2D1D0位符号SMOD/GF1GF0PDIDL3 电源控制寄存器(PCON)第八页,共32页7-2 MCS-51串行的工作方式SM0 SM1方式功能说明波特率0 0方式0移位寄存器方式fosc/120 1方式18位UART可变1 0方式29位UARTfosc/64 或者fosc/321 1方式39位UART可变表8-1 串行口工作方式 串行口的工作方式由SM0和SM1确定,编码和功能如表8-1所示 方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由T1的溢出率决定第九页,共32页1 数据输出(发送) 当数据写入SBUF后,数据从RXD端在移位脉冲(TXD)的 控制下,逐位移入74LS164,74LS164能完成数据的串并转换当8位数据全部移出后,TI由硬件置位,发生中断请求若CPU响应中断,则从0023H单元开始执行串行口中断服务程序,数据由74LS164并行输出。

其接口逻辑如图8.3所示图8.3接口逻辑一、串行工作方式0第十页,共32页2 数据输入(接收) 要实现接收数据,必须首先把SCON中的允许接收位REN设置为1当REN设置为1时,数据就在移位脉冲的控制下,从RXD端输入当接收到8位数据时,置位接收中断标志位RI,发生中断请求其接口逻辑如图8.4所示由逻辑图可知,通过外接74LS165,串行口能够实现数据的并行输入图8.4 外接移位寄存器输入 第十一页,共32页 【例7-1】使用74LS164的并行输出端接8支发光二极管,利用它的串入并出功能,把发光二极管从左到右依次点亮,并反复循环假定发光二极管为共阴极接法图8.5 电路设计 第十二页,共32页 ORG0000H LJMPMAIN ORG1000HMAIN: MOVSCON,#00H ;串行口工作在方式0 CLRES ;禁止串行中断 MOVA, #80H ;发光二极管从左边亮起DELR: CLRP1.0 ;关闭并行输出 MOVSBUF, A ;串行输出WAINT: JNBTI, WAIT ;状态查询 SETBP1.0 ;开启并行输出 ACALL DELAY ;调用延时子程序 CLRTI ;清发送中断标志 RRA ;发光右移 AJMPDELR ;继续 EDN 解:电路如图8.5。

软件部分如下:第十三页,共32页方式1为10位为一帧的异步串行通信方式其帧格式为1个起始位、8个数据位和1个停止位如图8.6所示:图8.6 方式1的帧格式1. 数据输出(发送) 数据写入SBUF后,开始发送,此时由硬件加入起始位和停止位,构成一帧数据,由TXD串行输出输出一帧数据后,TXD保持在高电平状态下,并将TI置位,通知CPU可以进行下一个字符的发送二、串行工作方式1第十四页,共32页2 数据输入(接收) 当REN=1且接收到起始位后,在移位脉冲的控制下,把接收到的数据移入接收缓冲寄存器(SBUF)中,停止位到来后,把停止位送入RB8中,并置位RI,通知CPU接收到一个字符3 波特率的设定 工作在方式1时,其波特率是可变的,波特率的计算公式为: 其中,SMOD为PCON寄存器最高位的值,其值为1 或0第十五页,共32页 当定时器1作波特率发生器使用时,选用工作方式2(即自动加载定时初值方式)选择方式2可以避免通过程序反复装入定时初值所引起的定时误差,使波特率更加稳定假定计数初值为X,则计数溢出周期为:第十六页,共32页 溢出率为溢出周期的倒数则波特率的计算公式为: 实际使用中,波特率是已知的。

因此需要根据波特率的计算公式求定时初值X用户只需要把定时初值设置到定时器1,就能得到所要求的波特率 第十七页,共32页4 应用举例(用方式1实现双机串行通信)(1)通信双方的硬件连接 作为应用系统首先要研究通信双方如何连接一种办法是把两片8051的串行口直接相连,一片8051的TXD与另一片的RXD相连,RXD与另一片的TXD相连,地与地连通由于8051串行口的输出是TTL电平,两片相连所允许的距离极短第十八页,共32页2)通信双方的软件约定 为实现双机通信,我们规定如下: 假定A机为发送机,B机为接收机 当A机发送时,先送一个“AA”信号,B机收到后回答一个“BB”信号,表示同意接收 当A机接收到“BB”后,开始发送数据,每发送一次求一次“检 查和”,假定数据块长16个字节,起始地址为30H,一个数据块发送完后再发出“检查和” 第十九页,共32页 为使波特率不倍增,设定PCON寄存器的SMOD=0,则 PCON00H .(3)基本的通信程序 设计程序框图如图8.7所示 B机接收的数据并转存到数据区,起始地址也为30H,同时每接收一次也计算一次“检查和”,当一个数据块收齐后,再接收A机发来的“检查和”,并将它与B机的“检查和”进行比较。

若两者相等,说明接收正确,B机回答一个00;若两者不相等,说明接收不正确,B机回答一个FF,请求重发 A机收到00的答复后,结束发送若收到的答复非0,则重新将数据发送一次 双方均以1200波特的速率传送假设晶振频率为6MHz ,计算定时器1的计数初值: 第二十页,共32页图8.7 双机通信程序结构图 第二十一页,共32页A机通信程序:ASTART: MOV TMOD,#20H ;设定定时器1工作方式2 MOV TL1,#0F2H ;设定计数初值 MOV TH1,#0F2H ;计数重装值 MOV PCON,#00H ;波特率不倍增 SETB TR1 ;启动T1 MOV SCON,#50H ;设置串行口方式1ATT1: MOV SBUF, #0AAH ;发送“AA”AWAIT1: JBC TI, ARR1 ;等待一帧发送完 SJMP AWAIT1ARR1: JBC RI,ARR2 ;等待应答信号 SJMP ARR1 根据结构图设计出下述通信程序:第二十二页,共32页ARR2: MOVA, SBUF XRLA,#0BBH JNZATT1 ;判断是否是应答信号“00”ATT2: MOVR0, #30H MOVR7,#10 MOVR6,#00HATT3: MOVSBUF, R0 MOVA,R6 ADDA,R0 MOVR6,A INCR0AWAIT2: JBCTI,ATT4 SJMPAWAIT2 ;发送有效数据ATT4: DJNZR7, ATT3 ;判断是否传送完毕 MOV SBUF, R6第二十三页,共32页。

AWAIT3: JBC TI, ARR3 SJMPAWAIT3 ;等待ARR3: JBCRI, ARR4 SJMPARR3 ;等待ARR4: MOVA, SBUF JNZATT2AEND: RETB机通信程序:BSTART: MOVTMOD, #20H;设定定时器1工作方式2 MOV TH1,#0F2H ;设定计数初值 MOV TL1,#0F2H ;计数重装值 MOVPCON,#00H ;波特率不倍增 SETBTR1 MOVSCON,#50H第二十四页,共32页BRR1: JBC RI,BRR2 SJMP BRR1 ;等待BRR2: MOV A,SBUF ;把接收到的数据送入A XRL A,#0AAH ;判断接收到数据是否是“AA” JNZ BRR1 ;如果不是继续等待BTT11: MOVSBUF,0BBH ;发送应答信号BWAIT1: JBCTI, BRR3 ;等待 SJMPBWAIT1BRR3: MOVR0,#30H ;接收有效数据 MOV R7,#10 MOV R6,#00HBRR4: JBCRI,BRR5 SJMP BRR4 第二十五页,共32页BRR6: MOV A, SBUF XRL A,R6 JZ BEND MOV SBUF,#0FFHBWAIT3: JBC TI, BRR3 SJMP BWAIT3BEND: MOV SBUF, #00H RET 第二十六页,共32页。

方式2为11位为一帧的异步串行通信方式其帧格式为1个起始位、9个数据位和1个停止位如图8.8所示图8.8 方式2的帧格式 三、串行工作方式2第二十七页,共32页 在方式2下,字符还是8个数据位,只不过增加了一个第9个数据位(D8),而且其功能由用户确定,是一个可编程位 在发送数据时,应先在SCON的TB8位中把第9个数据位的内容准备好这可使用如下指令完成: SETB TB8 ;TB8位置“1” CLR TB8 ;TB8位置“0”第二十八页,共32页 发送数据(D0D7)由MOV指令向SBUF写入,而D8位的内容则由硬件电路从TB 8中直接送到发送移位器的第九位,并以此来启动串行发送一个字符帧发送完毕后,将TI位置“1”,其他过程与方式1相同 方式2的接收过程也于方式1基本类似,所不同的只在第9数据位上,串行口把接收到的前8个数据位送入SBUF,而把第九数据位送入RB 方式2的波特率时固定的,而且有两种一种是晶振频率的三十二分之一;另一种是晶振频率的六十四分之一即fosc/32和fosc/64如用公式表示则为:第二十九页,共32页 由此公式可知,当SMOD为0时,波特率为fosc/64,。

下载提示
相似文档
正为您匹配相似的精品文档