配色: 字号:
第5章 并行、定时器、串行口
2022-05-27 | 阅:  转:  |  分享 
  
第5章MCS-51的并、串行口、定时器MCS-8051单片机内部集成了3个功能部件。1、并行口 2、定时器/计数器; 3、串行通信接
口。5.1定时器/计数器8051单片机内部有二个16位定时器/计数器,即:T0--定时器/计数器0T1--和定时器/计数
1两者都有定时和计数功能,可进行定时控制、延迟、对外部事件计数及检测等。定时/计数器内部是一个加法计数器,受编程控制、切换。
作定时器用时:每过一个机器周期计数器加1,直到计数计满溢出,可见:定时器的定时时间与系统的振荡频率有关;与计数器的初值和长度有关。
作计数器用时:由引脚T0(P3.4),TI(P3.5)接外部信号计数,在每个机器周期的S5P2期间采样引脚输入信号,当前一个机器
周期采样值为“1”,下一个机器周期采样值为“0”,使计数器加1,所以检测一个“1”至“0”的跳变需要2个T周期,即最高计数频率为振
荡频率的1/24。为了确保某个电平在变化前至少被采样一次,其电平保持时间至少是一个完整的机器周期。定时器/计数器通过编程
设置工作方式,一旦设定了就按设定的工作方式独立运行,不再占用CPU操作,只有当计数计满溢出时,才可能中断CPU当前操作。CPU也
可重新设置定时器工作方式,以改变其操作,8051单片机的T0和T1有四种工作方式,由专用寄存器TMOD设置和TCON来控制。其
结构如下图:T1T0TH1TL0TH0TL1启动启动溢出溢出8051DB方式方式溢出中断TMODTCON5.28051内
部定时器/计数器原理结构图定时器/计数器内部结构图D7D6D5D4D3D2D1D089H:GATEM1M0GATEM1M0定时/
计数器1定时/计数器05.2.1定时器/计数器方式选择寄存器一、工作方式选择寄存器(TMOD)格式为:TMOD:用来设置
定时器/计数器的工作方式,其中:低四位用来设置T0;高四位用来设置T1。D7D6D5D4D3D2D1D0GATEM1M0
GATEM1M089H:定时/计数器1定时/计数器0各位的定义如下:(1)M1和M0——方式选择位M1M0工作方式功能说明
00方式013位计数器(TLX的低5位,THX8位)01方式116位计数器(TLX8位,THX8位)10方式2自
动再装入8位计数器11方式3定时器0:分成2个8位计数器定时器1:停止计数D7D6D5D4D3D2D1D0GATEM1M0
GATEM1M089H:(2)——功能选择位:(3)GATE——门控位:TMOD不能位寻址,只能
用字节传送指令工作方式。复位时,TMOD所有位为“0”TF1TR1TF0TR0IE1IT1IE0IT08EH88H8FH8CH8B
H8AH8DH89H88H:5.2.2控制寄存器TCON控制TCON的格式为:TF1(TCON.7)定时器1溢出标志定时器1
溢出时由硬件置”1”,并申请中断进入中断服务程序后,由硬件自动清”0”,也可用软件清”0”。TR1(TCON.6)定时器1运行控
制位,由软件置“1”或清“0”来开启或关闭定时器。TF1TR1TF0TR0IE1IT1IE0IT08EH8DH88H8FH8CH8
BH8AH89HTF0(TCON.5)——定时器0溢出标志,其功能操作如:TF1TR0(TCON.4)——定时器0运行控制位
其功能操作如:TR1IE1(TCON.3)——外部边沿触发中断1请求标志,当检测到引脚上有“1”到“0”的跳变时由硬件置位
,请求中断进入 中断服务程序后,被硬件自动清除。TF1TR1TF0TR0IE1IT1IE0IT08EH8DH88H8FH8C
H8BH8AH89HIT1(TCON.2)——外部中断1触发方式选择位IT1=0,低电平触发;IT1=1,下降沿触发。I
E0(TCON.1)——外部边沿触发器中断0请求 标志,其功能操作如:IE1IT0(TCON.0)—
—外中断0触发方式选择位,其功能操作如:IT1。复位时,所有位均清”0”。5.2.3定时器/计数器的工作方式8051中的
定时器/计数器,由软件对TMOD中的控制位进行设置,可选择为定时功能或计数功能;对M1、M0位进行设置,可选择四种工作方式:
方式0;方式1;方式2;方式3。1.方式0当=0时:多路开关连接振荡器的12分频输出,T1对机器周期计数,这就是定时器工作
方式,其定时时间为:当=1时:多路开关与T1(P3.5)引脚相连,外部计数器脉冲由T1输入,当外信号电平发生“1”到“0”跳变时,
计数器加1,这就是T1为外部时间计数器方式.当满足条件:为真时,接通计数输入端T1,当计数值由全“1”再增1变为全“0”时,
使TF1置1,即请求中断。若TR1=1,GATE=1,则TH1+TL1是否数计,取决于信号。当由“
0”变“1”时:开始计数。当由“1”变“0”时:停止计数。这种操作方法,可以测量在端出现的正脉冲的
宽度。在这种方式下,16位计数器(TH1和TL1)只用了13位。TL1的高3位未用当TL1的低5位溢出时,向TH1进位,当T
H1溢出时,向中断标志TF1位进位,并申请中断。2.方式1方式1是一个16位定时器/计数器。其结构和操作方式几乎与
方式0完全相同。唯一的差别是:在方式1中,寄存器TH1和TL1是以全16位二进制数参与操作,其定时时间为:3.方式2方式2
是把定时器的寄存器配置成一个可以自动重装载初值的八位计数器。当TL1计数溢出时,使溢出标志TF1置1,自动把TH1中的值重装
入TL1中,TH1中的值由软件预置,重装载后其值不变。方式2对定时控制特别有用。例如:希望实现每隔250μs产生一个定时控制
脉冲,可采用12MHZ的振荡器,把TH1预 置为6,并使=0由公式
可算出(28-T1初值)×1/(12×106)×12=250T1=(28-25
0)×1×10-6=(256-250)×1×10-6=6具体编程:MOVTH1,#06;定时初值MOV
TL1,#06MOVTMOD,#20H;模式2,定时方式SETBTR1启动...........O
RG1BHAJMPTT1;转去中断服务......RETI4.工作方式3方式3对定时器/计数器0和定时
器/计数器1是大不相同的。对于定时器/计数器1,设置为方式3时,它将保持原有的计数值,其作用如同使TR1=0(不计数)对于定时器/
计数器0,设置为方式3时,使TL0和TH0成为2个互相独立的八位计数器,如下图所示.其中TL0利用了定时器/计数器0本身的一
些控制位:如、GATE、TR0、、TF0它的操作情况与模式0和模式1类同。但
TH0被规定只用作定时器对机器周期计数,它占用了定时器1的控制位TR1和TF1,因此,这时的TH0控制了定时器1的中断。 方式3
适用于要求增加一个额外的8位定时器的场合,把定时器/计数器0设置于方式3,TH0控制了定时器1的中断。而定时器/计数器1还可以
设置成方式0~2,可用在任何不需要中断控制的场合。5.2.3定时器/计数器2定时器/计数器2是一个具16位自动重装载或捕获能
力的定时器/计数器。专用寄存器T2CON是它的控制寄存器它的工作方式可分为两类:一为定时器/计数器方式;另为波特率发生器
方式。下图为定时器/计数器方式的逻辑图作定时器用时:TH2和TL2计的是机器周期数。作计数器用时:外部计数脉冲由T2输入,其工作
特性和时序关系与定时器/计数器0和1完全一样。在定时器/计数器工作方式下,都可以通过T2CON中的控制位来选
择捕获操作或重装载操作。TH2和TL2中内容的捕获或自动重装载是通过一对捕获/重装载寄存器(RCAP2H和RCAP2L)来实现的。
TH2、TL2和RCAP2H、RCAP2L之间接有三态门双向缓冲器。操作过程:时:为自动装载操作,把RCAP2H和RCAP2
L的数据自动装入TH2和TL2中时:为捕获操作,即把TH2和TL2中的数据传送到RCAP2H和RCAP2L中1ms5.2
.4定时器/计数器应用举例1、方式0的应用: 用T0控制产生宽度为1个T的负脉冲,由P1.0送出。设定时脉冲产生的周期为1MS,f
osc=12MHz,采用中断方式编程。分析:由题意可知:每隔1毫秒产生一个负脉冲计算初始时常数,由公式可知:(213-N)×T=
1×10-3,(式中T=1×10-6)N=(7192)10=1C18H=0001110000011000=1110
000011000=E018H编程:ORG 0000HAJMP STARTORG 0BHSJMP TT0ORG 10
0HSTART:MOV TMOD,#00MOV TH0,#0E0HMOV TL0,#18HMOV IE,#82HSETB TR0
SJMP $TT0:CLR P1.0SETBP1.0MOV TH0,#0E0HM
OV TL0,#18HSETB TR0RETIEND5.3串行接口 计算机与计算机或与其他仪器设备进行数据
传输,叫通信。通信又分并行通信和串行通讯。 并行通信速度快,串行通信速度慢。串行通信又分同步通信和异步通信。同步通信:接收/发
送使用同一时钟,以数据块方 式传输,每个数据块通过同步字符使 收/发双方同步.起始位校验位D0D1D2DN停止位
异步通信:接收/发送双方都有自己的时钟信 号,通信中时钟频率必须保持一致.传 送一 帧数据时,有一位起始位,有N位 数据
位和一位停止位.其帧格式如下:波特率:每秒传送的位数量叫:波特率.如:1秒传送1位,波特率为1.标准波特率有:
600﹑1200﹑2400﹑4800﹑9600﹑192008051单片机片内有一个全双工串行通信接口,它可以作为UART(通用
异步接收和发送器)用,也可以做同步移位寄存器用。介绍内容:4.3.1数据缓冲寄存器SBUF4.3.2串行口控制寄存器SCO
N4.3.3模式04.3.4模式14.3.5模式2和34.3.6多处理机通信4.3.7串行桢4.3.8波
特率5.3.1数据缓冲寄存器(SBUF)SBUF——可直接寻址的专用寄存器。在物理上,对应着两个寄存器:一个发送寄存器,一
个接收寄存器。CPU对SBUF进行写操作时:就是修改发送寄存器的内容。CPU对SBUF进行读操作时:就是读取接收寄存器的内
容。5.3.2串行口控制寄存器(SCON)SCON——用来控制和监视串行口的工作状态。它的各位定义如下:格式:D7D6D5D4
D3D2D1D0SM0SM1SM2RENTB8RB8TIRI接收器是双缓冲的:双缓冲的作用是避免在接受下一帧数据之前,未能及时响
应接受器的中断,即没有把上一帧数据读走,而产生两帧数据重叠的问题。对于发送器来说,为了保持最大的传输速率,一般不需要双缓冲。因
为发送数据时是CPU主动的,不会产生写重叠的问题。目录D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI
SM0和SM1——串行口操作模式选择位,所选择的4种模式如下表:SM0SM1模式功能波特率000同步移位计数器fosc/1201
18位UART可变1029位UARTFosc/64或fosc/321139位UART可变SM2——在模式2和3中多处理机和通信使能
位在模式2和3中——若SM2=1,且接收到的第9位数据(RB8)=0,则RI(接收中断标志)不会置“1”。在模式1中—
—若SM2=1,且没有接收到有效的停止位,则RI不会置“1”。在模式0中——SM2必须是0。REN——允许接收位。由软件设置或
清除,REN=1时:允许接收,REN=0时:禁止接收。TB8——发送数据位8。该位是模式2和3中要发 送的第9位数据
。在许多通信协议中,该位是奇偶位。可按 需要由软件置位或清除。在8051多处理机通信中,该位用于表示是地址桢还是数据桢。R
B8——接收数据位8。是模式2和3中已接收的第9位数据。(例如:可能是奇偶位,或是地址/数据标识位)在模式1中,若SM2=0,
RB8是已接收的停止位。在模式0中,RB8未用。TI——发送中断标志。在模式0中,当发送完第8位数据时,由硬件置位;在其他模
式中,在发送停止位之初,由硬件置位。当TI=1时:申请中断,CPU响应中断后发送下一桢数据。在任何模式中,都必须有软件来清除TI
。RI——接收中断标志位。在模式0中,接收完第8位时,由硬件置位;在其他模式中,在接收停止位的半中间,有硬件置位;RI=1时:申
请中断,要求CPU取走数据;但在模式1中:SM2=1时,若未接收到有效的停止位。则不会对RI置位;必须靠软件清除RI;在系统复
位时:SCON中的所有位都被清“0”。5.3.6 串行口的应用1、8051单片机一对一的串行通信8051(2)8051(1)R
XDTXDTXDRXD 将甲机内部RAM中20H~3FH单元的ASCII数据,在最高位加上奇校验位后,传送给乙机,并存放在内部RA
M30H开始的单元中。 采用异步通信,波特率为9600,主振频率为11.0592MHZ,设串行口工作在模式1,发送和接收采用查询方
式。甲机发送程序: MOV TMOD,#20H,波特率发生器 MOV TL1,0FDH MOV TH1,0FDH SETB
TR1MOV SCON,#40H;串口模式1MOV R0,#20H;源数据指针MOV R7,#20H ;数据长度MOV
A,@R0 ;取发送数据ACALL SPOUT ;调发送子程INC R0DJNZ R7,LOOP﹍﹍LOOP:SPOU
T: MOV C,P;P=1,A中为奇数个1, CPL C;因奇校验A中最高位 MOV ACC.7,C;应放0,故取反。
MOV SBUF,A;发送 JNB TI,$;等待发送完。 CLR TI RETMOV TMOD,#20HMOV TL1,
#0FDHMOV TH1,#0FDH;初始化程序段SETB TR1MOV R1,#30HMOV R6,#20H乙机接收程序: 采用
异步通信,波特率为9600,主振频率为11.0592MHZ,设串行口工作在模式1,接收数据存放在内部RAM30H开始的单元中。LI
P:ACALL SPINJC ERR ;接收为偶数个1出错MOV @R1,AINC R1DJNZ R7,L
OPSPIN:MOV SCON,#50H;方式1,允许接收JNB RI,$ ;等待接收MOV A,SBUF
MOV C,P ;奇偶位取反CPL CANL A,#7FH;去掉最高位(奇偶位)RET5.3.3模式0把串
行口设置成操作模式0时,可以作为同步移位寄存器用。——这时,它的波特率是固定的(fosc/12)——数据是由RXD(P3.0
)端输入输出。——同步移位时钟由TXD(P3.1)端输出。——发送或接收的是8位数据,低位在先。接收发送1桢数据格式如下所示:
D0D1D2D3D4D5D6D78051内部总线写SBUFSRXDP3.0替代输出功能DQSBUFCLSHIFT零检测器STAR
TSHIFT发送控制器S5TXCLOCKSENDTI串行口中断TXDP3.1替代输出功能移位时钟STARTRIRECEIVE接收
控制器SHIFT11111110RXCLOCKRENRXDP3.0替代输入功能R1输入移位寄存器移位装载SBUFS
BUF读SBUF串行口模式08051内部总线如果执行一条“MOV SBUF,A”就开始发送一桢数据。发送数据的过程:当S6
P2时刻出现‘写SBUF’信号时,8位数据由内部总线通过被选通的三态缓冲器写入SBUF中。同时,写SBUF这个信号还选通另一个三态
缓冲器,使D触发器的S端置“0”,即使该触发器置“1”,这个D触发器构成了发送移位寄存器的第9位。因此,在写信号作用下,第9位变为
“1”。‘写SBUF’信号同时还接到发送控制器的启动端(START),告诉控制器开始发送。‘写SBUF’信号有效后,整整相隔一
个机器周期,发送控制器的SEND端才变为有效(=1)S4S5S6S1S2S3S4S5S6S1S2~S6使得与RXD
端相连接的与门被打开,允许从RXD端送出数据。同时,使得与TXD端相连的与非门被打开,允许从TXD端输出移位时钟。在SEND有效
期间,每个机器周期的S6P2时刻,由发送控制器的SHIFT端送出移位信号,使发送移位寄存器的内容右移一位。如下图所示:移位信
号同时还接到作为移位寄存器第9位的D触发器的CL端,此触发器的数据端D始终保持低电平,故发送移位寄存器的内容右移一位时,就从左边添
一个“0”。因此,当数据字节的最高位(第8位)移至移位寄存器的输出位置时,在其左边的恰好是开始时置入的第9位“1”,再往左边的有
效位全为零,左边7位“0”经“0”检测器检测,通知发送控制器作最后一次移位,然后使SEND无效,停止发送数据和移位时钟。并置TI为
“1”,申请中断。这二个动作发生与‘写SBUF’信号有效后的第10个机器周期的S1P1时刻。由此可见,发送一桢数据的全过程,需
要11个机器周期的时间。一旦数据停止发送,TI有效,若CPU响应中断,就由23H单元开始执行串行口中断服务程序。REN(SCO
N.4)=1;RI(SCON.0)=0允许接收,就会启动一次接收过程。当接收数据的工作过程:在下一个机器周期的S6P2时刻,
接收控制器向接收移位寄存器写入11111110的数据字节。并在再下一节拍(S1P1)时刻,使RECEIVE端有效,使(P3.1
)端的与非门打开,移位时钟由TXD端送出。此波形与发送时一样。在RECEIVE有效时,每个机器周期的S5P2时刻对RXD(P3.
0)引脚上的数据进行采样,并在同一周期的S6P2时刻接收移位寄存器的内容左移一位,其右端补上刚由RXD引脚采到的数据。这样开始
时,在接收移位寄存器中写入的7个“1”,就逐位从左端移出去,而RXD引脚上的数据就逐位从右端移入。当开始装入到移位寄存器最右端的一
个“0”移到最左端时,表示已接收了7位数据,这时将通知接收控制器进行最后一次接收移位,并把所接收到的数据装入SBUF中。 在启动接
收过程(‘写SCON’,清除RI位)后的第10个机器周期的S1P1时刻,接收控制器的RECEIVE端被清除,而SCON中RI被置
位,发出中断申请。这时便完成了一桢数据的接收过程。如图所示:若CPU响应中断,将执行由23H作为入口的中断服务程序。118
85.3.4利用模式0实现对I/O口的扩展 1、串行通信模式0,实现I/O接口的输出扩展。这种I/O扩展,实际上是由串行传输的数据
变换为并行的数据输出。8051P3.0P3.1P1.1CD4094Q5DCD4094DSTBCLKCLKSTB工作过程:
在单片机串行口连续送出2桢串行数后,利用另一根口线送出CD4094的选通信号,于是把16位数据同时由CD4094输出去,起到了I/
O的扩展输出作用。从理论上讲,CD4094可以无限地串级起来,具有无限的扩展能力。但这样无限的扩展,并行输出的速度会严重受到影响
。∵移位时钟频率为fosc/12,若fosc=12MHZ,则每移一位需要1μs。 MOV SCON,#00;初化串口为方式0
MOV R7,#02;发送桢次数 MOV R0,#30H;存放发送数据首址JX:MOV A,@R0; 取发送数据MOV
SBUF,A;发送一桢数据 JNB TI,$;等待发送完 CLR TI ;清发送标志 IN
C R0 ;指向下一桢发送数据 DJNZ R7,JX;未发完继续 END;结束1…………81……
……82、I/O输入口的扩展 I/O输入口的扩展是把并行输入的数据变为串行输出的数据形式移入移位寄存器。8051P3.0
P3.1P1.1CD4014DINQ8CD4014Q8P/SCLKCLKP/S MOV R6,#2 MOV R1,#40H
CLR P1.1;P1.1低电平 SETB P1.1;打入数据 CLR P1.1;置移位状态JX: MOV SCON,#
10H;模式0,允许接收 JNB RI,$;接收完?CLR RI;清RI MOV A,
SBUF;接收到 MOV @R1,A;保存 INC R1 DJNZ R6,JXENDP1.1用于控制CD4014的工作状
态:当此P1.1发出高电平时(=1),并行数据置入CD4014中;当P1.1发出低电平时,CD4014处于串行移位状态。同样
的,这种形式可以扩充很多输入口,但它受到速度上的限制。目录5.3.5模式1UART接收/发送器,传输一桢的格式如下:0D0D7
1起始位停止位传输位共10位:1位起始位;8位数据位;1位停止位。TXD——发送端RXD——接收端波特率可变,这取决于T
1或T2的溢出率。如果:T2CON中的RCLK=1和TCLK=1时:T2作为接收/发送的波特率发生器;若:RCLK=0
和TCLK=0时:T1作为接收/发送的波特率发生器。二者也可交叉使用,即发送和接收可采用不同的波特率。(模式1的功能简图和相应
的时序图:如下页)内部总线T1溢出T2溢出TB8写SBUFSTXDDQ1/2SBUFCLSMOD=1零检测器SMOD=0“1”
“0”SHIFTDATASTARTTCLK发送控制器1/16SENDTXCLOCK“1”“0”TI串行口中断RCLK1/16采样
装载SBUFRIRXCLOCKLOAD接收控制器1到0检测器SHIFTSTART1FFH位检测器输入移位寄存器(9位)装载SBU
FRXD移位SBUF读SBUF串行口模式1内部总线789工作过程类似于模式0,发送过程是执行一条“MOVSBUF,
A”指令引起的。‘写SBUF’信号以来,把发送的数据打入SBUF的同时,还把TB8(=1)打入发送移位SBUF的第9位,并通
知发送控制器进行发送。实际上,发送过程始于16分频计数器下次满度翻转后的T的S1P1时刻。每位的发送过程与16分频计数器同
步,而不与’写SBUF‘信号同步。一旦发送开始,端有效(=“0”),这时,DATA端还无效(DATA=“0”
),故或门输出为“0”,这表示从TXD端发送一个起始位“0”;一位以后(时间上),DATA端变为有效,打开了与门,使SBUF中
的数据经与门送至TXD。在DATA和有效期间,每产生一个SHIFT移位脉冲,使SBUF中的数据右移1位,并从
左端补入“0”,这种移位发送过程,直到数据字节的最高位移到SBUF的输出位置。这时,一开始装入的TB8(=1)位,恰好在其左边,
再左边的各位全是“0”,这种状态被零检测器检测到,就通知发送控制器作最后一次移位,同时使TI=1,申请中断。这些动作发生于‘写SB
UF’后的16分频计数器的第10次满度翻转时刻(全‘1’→全‘0’)移一次:01XXXXXXXX移二次:001XXXXXX
XX….移七次:00000001XXXXXXXX接收过程:当RXD端检测到有负跳度时,便开始接收一桢数据,此时CPU对
RXD端不断采样,采样速率为波特率的16倍。一旦检测到有负跳变,16分频计数器立刻复位,同时把1FFH打入移位寄存器。16分频计数
器复位的目的是:使计数器满度翻转的时刻恰好与输入信号位的边沿对准。计数器的16个状态把一位的时间分为16等份,在第7,8,9状态时
,位检测器对RXD端的值进行采样,这3个状态从理论上正对准每位的中央段。若TXD端与RXD端的波特率有差异,就会产生偏移,这种差异
只要在允许范围内,就不至于产生错位或漏码。在上述三个状态下,可取得3个采样值,其中至少2个值一样,这种一样的值才被接收。这种3
取2的表决法可以抑制噪声。若接收的第一位不是“0”,说明它不是一桢数据的起始位,该位被放弃,接收电路复位,等待另一个负跳变的到来
。若起始位有效(=“0”),则被移入输入移位寄存器,并开始接收这一桢中的其它位。←1111111110←当
接收的数据一位一位由右边移入时,原先打入移位寄存器中的1FFH逐位从左边移出。当起始位“0”移到最左边时,就通知接收控制器进行最
后一次移位,并把移位寄存器的内容装入SBUF和RB8,同时使RI=1申请中断。第9次移位后:1111111110XXXXX
XXX一桢移完后:1111111110XXXXXXXX1装载SBUF和RB8以及置RI信号,只有在产生最后一个移位脉冲时,同
时满足2个条件,才会发生。这两个条件如下: 1.RI=0,即上一桢数据接收完成时发出的中断请求已被响应,SBUF中的上一桢数据已
取走。2.SM2=0,或接收到的停止位=1,这时8位数据进入SBUF中,停止位送入RB8中。否则,这桢数据丢失,不再恢复。注意
:模式1接收时:应先用软件清除RI和SM2标志。目录5.3.6 串行口的应用1、8051单片机一对一的串行通信8051(2)80
51(1)RXDTXDTXDRXD 将甲机内部RAM中20H~3FH单元的ASCII数据,在最高位加上奇校验位后,传送给乙机,并存
放在内部RAM30H开始的单元中。 采用异步通信,波特率为9600,主振频率为11.0592MHZ,设串行口工作在模式1,发送和接
收采用查询方式。甲机发送程序: MOV TMOD,#20H MOV TL1,0FDH MOV TH1,0FDH SETB TR
1MOV SCON,#40H;串口模式1MOV R0,#20H;源数据指针MOV R7,#20H ;数据长度MOV
A,@R0 ;取发送数据ACALL SPOUT ;调发送子程INC R0DJNZ R7,LOOP﹍﹍LOOP:SPOUT:
MOV C,P;P=1,A中为奇数个1, CPL C;因奇校验A中最高位 MOV ACC.7,C;应放0,故取反。 M
OV SBUF,A;发送 JNB TI,$;等待发送完。 CLR TI RETMOV TMOD,#20HMOV TL1,#0
FDHMOV TH1,#0FDH;初始化程序段SETB TR1MOV R1,#30HMOV R6,#20H乙机接收程序: 采用异步
通信,波特率为9600,主振频率为11.0592MHZ,设串行口工作在模式1,接收数据存放在内部RAM30H开始的单元中。LIP:
ACALL SPINJC ERR ;接收为偶数个1出错MOV @R1,AINC R1DJNZ R7,LOP
SPIN:MOV SCON,#50H;方式1,允许接收JNB RI,$ ;等待接收MOV A,SBUFM
OV C,P ;奇偶位取反CPL CANL A,#7FH;去掉最高位(奇偶位)RETPC机8051MAX232
COMXRXDTXD5.3.78051单片机与PC的通信 PC机通信程序采用BIOS中的通信驱动程序编程.首先PC机发送5
5H,8051单片机接收到55H后,发送11H,22H,33H等20个数.PC机将接收到的数显示在显示屏上.1﹑PC机的发送和
接收程序STACK SEGMENT‘STACK’DW30 DUP(0)STACK ENDSCODE SEGMENTB
EGIN PROC FARASSUME SS:STACK,CS:CODEPUSH DSSUB AX,AX PSUH AX
MOV DX,00 MOV AL,83H;初化串行口 MOV AH,00 INT 14H MOV DX,00 MOV A
H,01;发55H MOV AL,55HINT 14CALL DELAYMOV DX,00MOV AH,01M
OV AL,55H;再发55HINT 14CALL DELAYMOV CX,10;接收字符MOV DX,0
0MOV AH,02INT 14TEST AH,80H;测试通信线状态JNZ RRRR:PUSH CXMOV DH,ALMO
V CL,04;接收字符高位放DH的ROR DH,CL;低4位.CALL ALLB;显示DH的低4位.MOV DL,2
0HMOV AH,02;显示一空格INT 21HPOP CXLOOP RRRETBEGIN ENDPDELAY
PROC PUSH CX MOV CX,10DLOP:PUSH CX MOV CX,00;延时 LOOP $ PO
P CX LOOP DLOP POP CX RETDELAY ENDPALLB PROCMOV DL,DHAND DL
,0FHADD DL,30HCMP DL,3AH;显示DHJC NAD7的低4位ADD DL,07NAD
7: MOV AH,02INT 21HRETALLB ENDPCODE ENDSEND BEGIN2﹑8051单片机
的接收和发送程序 ORG 0000 AJMP MAIN ORG 23H CLR RI CLR ES MOV R0,SBUF JNB
RI,$ CLR RI MOV R0,SBUF CJNE R0,#55H,BAK POP DPH POP DPL串行口中断服务
程序 MOV DPTR,#ISR PUSH DPL PUSH DPH RETIMAIN:MOV TMOD,#20H MOV S
CON,#40H MOV PCON,#00 MOV TH1,0F3H MOV TL1,0F3H SETB TR1 SETB EAL
OOP:MOV R5,#10WT: ACALL DELAY DJNZ R5,WT SETB ES SETB REN ACALL
DELAY SJMP $-4ISR: CLR REN MOV R5,#20;接收20个数SENDP:ACALL DELAY MO
V SBUF,R0 JNB TI,$ CLR TI INC R0 DJNZ R5,SENDP SJMP LOOPDELAY:MOV
R6,#0DLOP: MOV R7,#0A0H DJNZ R7,$ DJNZ R6,DLOP RET END起始位TB8停止位D
0D7D85.3.8模式2和模式3在模式2和3中:发送和接收一桢数据都是11位,即在发送或接收一桢信息时包括有:1位起始位
0;8位数据位;1位附加程控位;1位停止位1。发送过程:发送前,先根据通讯协议设置TB8(如作奇偶校验位或地址/数据标志位)
,然后将要发送的数据写入SBUF中,即启动发送,从TXD端输出一桢信息;接收过程:REN=1,允许接收,当采样到RXD端有”1
”到”0”的跳变时,开始接收一桢数据,并送入移位寄存器(9位);在RI=0,且SM2=0或接收到的第9位数据位为“1”时,前8位数
据送入SBUF中,附加第9位数据送入SCON中的RB8位,并置中断标志RI为“1”;否则丢失接收到的信息。目录模式2中有关控制位的
操作关系如下:SM2RB8操作11置(RI)=1,申请中断,接收数据10(RI)=0,不申请中断0X置(RI)=1,申请中断
,接收数据 模式3为波特率可变的11位异步通讯模式,除波特率外,模式3和模式2完全相同。5.3.9多处理机通信串行接口工作
在模式2和模式3时,有一个专门的用途,即多机通信。在串行口控制寄存器SCON中,设有多机通信控制位SM2。当串行口以模式2或模式
3接收数据时,有两种情况:1.若SM2=1:接收到的第九位数据为“1”时,才将接收到的数据送入接收SBUF中,并使RI置“1”,请
求中断,否则将丢失接收的信息;RT主机8051RT从机18051RT从机n8051…R
T主机8051RT从机18051RT从机n8051…2.若SM2=0:无论接收到的第九位是“0”
还是“1”,都能将数据装入SBUF中,并产生中断。根据这一特点,便可以实现主机与多个从机之间的串行通信。多机通信连接示
意图如下:半双工全双工当主机向几个从机分别发送数据时,在连线连接好的情况下,通过编程来实现的。在具体编程以前,先要对几个从机确定
地址编号.如;从机1——编号为01;从机2——编号为10…具体编程: 设定主机为发送方式设定从机为接收方式从机置SM2=1
允许中断TB8=1发送从机地址TB8=0发送数据在主机向某一从机通信之前,主机先向从机发一地址字节,这一地址字节就确定了某
一从机和主机的通信。怎样区别主机发送的是地址字节还是数据字节是靠第9位来区分的:第9位=1时:为地址字节;第9位=0时:为数
据字节。在主机发送地址时:地址/数据标志位TB8=1,表示地址桢。 各从机接收到信息后,第9位RB8若为“1”,则使中断标志RI
置位,——也就是说主机发送地址帧时,可使所有的从机产生中断。 各从机被中断后,判断主机送来的地址是否与自己相符,如果相符,则自己作
为目标从机,这时被寻址的目标从机把它的(SM2)标志清“0”,准备无条件接收主机送来的数据桢。没有被寻址的从机则保持SM2=“1
”。接着主机发送数据桢,(这时TB8=0),各从机同时接收到数据桢,但只有被寻址的从机的SM2=“0”而产生中断,并接收该桢数据
。其它从机因接收到RB8=“0”,且SM2=1,将使数据丢失。简单地说,被选中的从机便产生中断,接收主机送来的数据。未被选中
的从机对主机送来的数据不予接收。这就实现了由主机控制的主——从通讯。RB8(接收)TB8(发送)5.3.10串行桢串行桢——由一定
数量的位组成;模式0——一桢的长度为8位;模式1——一桢的长度为10位;模式2和3——一桢的长度为11位。模式1,2和3(异步通讯
)每桢都包含有:1位起始位;8位或9位数据位;1位停止位。8位数据位装到SBUF中,位8通常在一对一对处理机通信的情况下,模式
2和模式3中的第9位数据位作奇偶校验位。假设要传送的数据字节已在A累加器中,可采用下面一段程序把数据字节和奇偶校验位从串行口发
送出去。MOV C,P;把奇偶标志传给进位位;MOV TB8,C;把进位位传送给TB8;MOVSBUF,A;把数据
字节装入SBUF。注意:A中值“1”的位数为奇数时,P=“1”,否则P=“0”。如:程序中用偶校验法,即保证 发送一桢数据
中“1”的个数为偶数。.1STARTDATA.0.2.3.4.5.6奇偶停止STARTDATA.0.1.2.3.4.5.6.7奇偶
停止几种典型的桢格式:1.110波特率的电传打字机(TTY)STARTDATA.0.1.2.3.4.5.6奇偶停止停止2.
典型的ASCII终端3.多机通讯格式桢STARTDATA.0.1.2.3.4.5.6.7ADDRESS/DATA停止或STA
RTDATA.0.1.2.3.4.5.6.7.8停止这两桢是多机串行通信的桢格式,双机通信时,用后者格式更为简便一些。目录f
osc2SMOD波特率=×3212×(28-N)5.3.11波特率模式0——波特率是固定的,为fosc/12;模式2——波特率
=2SMOD×fosc/64若SMOD=0,波特率为fosc/64;若SMOD=1,波特率为fosc/32。模式1和3——波特
率=2SMOD×T1的溢出率/32。T1作为波特率产生器,工作在方式2。波特率计算公式为:21×6×106=243=F3
HN=256-2400×32×12 波特率的计算方法: 先应设置PCON中的SMOD位。然后选择波特率,再求出时间常数。例如:
设fosc=6MHz,置SMOD=1,波特率选择2400。时常数为:下面为T1产生波特率的初设化程序。MOV PCON,#8
0H ;SMOD=1。MOV TMOD,#20H ;T1为方式2。MOV TH1,#0F3H ;时常数初值。MOV TL1,#0F
3H ;时常数初值。MOV SCON,#50H ;串口为模式1, 允许接收。SETB TR1 ;
启动产生波特率Fosc=11.0592MHz产生波特率的时常数为:波特率 SMOD 时常数19.2K 1
0FDH9.6K 0 0FDH4.8K 0 0FAH2.4K 0 0F4H1.2K
0 0E8H5.3.12定时器1(T1)作波特率发生器 在MCS—51单片机串行通信应用中,一般使用定时器/计数器1工
作于方式2,作为波特率发生器。 1、定时器T1的溢出率计算 因为T1工作于方式2是一个8位可重装载的计数器。故计满溢出一次所需时间
为:(28-N)×12时钟周期=(256-N)×12×(1/fosc)(秒)即:定时器T1每秒溢出的次数为: T1的溢出率=
fosc/(12×(256-N)式中fosc为系统时钟频率,N为时常数,即TH1的预置初值。2SMOD波特率=×(定时器/计数
器1溢出速率)32fosc2SMOD×=3212×(256-N)2、定时间常数 在系统设计时,已知fosc,先选定波特率,然后
确定时间常数N。可由下式得出。波特率=(定时器/计数器1溢出速率)/n其中n=32或16,取决于PCON中的SMOD值:S
MOD=0时,n=32;SMOD=1时,n=16.因此,则可以用下式来确定。2SMOD×fosc即得:N=256-波特率×3
2×1221×6×106N=256-=242.982400×32×12≈243≈F3H例如:fosc=6MHZ,
波特率为2400,SMOD=1,则时常数得:21×6×106波特率=≈2403.8532×12×(256-243)2400-2
403.85=0.16%波特率误差为=24003、SMOD位对波特率的影响①当SMOD=1,将上述得出的时常数代入 波特率公式
有:20×6×106N=256-≈249=F9H2400×32×1220×6×106波特率=≈2238.832×12×(256
-249)2400-2238.8=6.7%波特率误差为=2400②当SMOD=0时,计数常数为:将F9H置入TH1,可得实际
的波特率及误差为:举例:要求波特率为9600,fosc=11.059MHZ,则设置SMOD=0,=0,设定时器1为模式2,重装载
值=0FDH,目录小结一、定时器/计数器1.8051单片机的二个16位定时器/计数器是由TH0、TL
0、TH1、TL1、TMOD、TCON专用寄存器组成。其中,TH0和TL0组成T0的计数器,TH1和TL1组成T1的计数器。2.
TMOD的用途——控制T0、T1的工作方式由M1、M0确定的四种工作方式如下:在方式0时:TH0(TH1)存放13位数的高8
位,TL0(TL1)的低5位存放13位数的低5位成为13位定时器/计数器。在方式1时:作为16位定时/计数器,TH0(TH1)存
放高8位,TL0(TL1)存放低8位在方式2时:具有自动装入初值功能TL0(TL1)用作8位计数器,TH0(TH1)则用于暂存8
位初值在方式3时:属T0独有,TL0可作8位定时/计数。但TH0只可用作简单计时。3.TCON的用途:1).控制定时器的启
动和停止(TRX);2).作为定时器/计数器溢出中断源(TFX);3).作为外部中断触发方式控制位(ITX);4).外部边缘触发中
断标志位(IEX),无需编程。定时器/计数器的编程控制,就是要对TMOD和TCON进行具体的编程。另外,要对TH0、TL0和TH1
、TL1预放初值。串行通讯并行通讯1.单片机与外界的通讯有两种方式二、串行口8051的串行通讯接口为:全双工I/
O口,可设置成同步通讯或异步通讯二种形式。2.在同步(模式0)通信中,常用移位寄存器来扩展I/O引线,形成硬件通讯接口,波特率为
时钟频率的十二分之一。3.异步通讯采用了UATR(通用异步接收发送器)结构,双缓冲接收,单缓冲发送。异步通讯有三种模式:模式1——10位数据,波特率可变;模式2——11位数据,波特率为fosc/32或fosc/64;模式3——11位数据,波特率可变。4.由上可知,串行口可设置四种工作方式,它们的差别主要在于同步或异步通讯,字符桢格式,以及发送波特率不同。9CH9BH9AH99H98H9FH9DH9EHSM0SM1SM2RENTB8RB8TIRI5.SCON——是与串行通讯有关的控制和状态寄存器,各位定义归纳如下:SM0,SM1——选择工作方式:00-方式0;01-方式1;10-方式2;11-方式3。SM2——多机通讯(方式0,取0)REN——允许接受“1”有效TB8——发送第9位(方式0无效)RB8——接受第9位(方式0无效)TI——发送中断标志,“1”有效RI——接受中断标志,“1”有效6.方式1和方式3的波特率由T1的溢出率决定,除方式0外,PCON最高位SMOD置”1”能使波特率加倍。7.中断向量地址为23H(包括TI和RI)。P59:参考答案 1、怎样找到指令操作数或操作数所在地,叫寻址方式。即:立即;直接;寄存器;寄存器间接;基址+变址;相对寻址;位寻址 2、指令系统是由能完成各种功能任务的若干条指令的集合。8051指令系统按功能划分为:数据传送;算术运算;逻辑运算;控制程序转移和位操作等5类,共111条指令。 3、①直接寻址;②寄存器、寄存器间接;③基址+变址;④直接、立即;⑤位寻址 4、 MOV SP,#20H;(SP)=20H MOV A,#20H;(A)=20H MOV B,#30H;(B)=30H PUSH ACC;(SP)=21H;((SP))=20H PUSH B;(SP)=22H;((SP))=30H POP ACC; (A)=((SP));(SP)=21H POP B;(B)=((SP));(SP)=20H5、标号:指令操作码 [操作数][;注释]标号的限制有:必须字母打头,标号与指令操作码之间由”:”隔开,标号与”:”之间不能有空格,”:”与指令操作码之间可有空格.注释是对指令或程序段进行功能说明.6、ORG----定义起始地址 DB----字节定义;EOU----变量赋值DW----字定义;DS----预留地址 BIT----位定义;END----结束 伪指令的作用是由源程序编译成目标码时起到协助作用. 7、编写源程序.ASM汇编、连接.OBJ目标们码.EXE8、MOV B,A ;ANL A,#0FH;MOV 20H,A;MOV A,B ;ANL A,#0F0HSWAP AMOV21H,A9、CLR CMOV A,20HSUBB A,21HJCJSSMOV 30,ASJMP JJSJSS: MOV 30H,21HJJS: END
献花(0)
+1
(本文系太好学原创)