1、第第4 4章章 MCS-51MCS-51单片机的单片机的功能模块功能模块4.1 MCS-514.1 MCS-51单片机的功能模块单片机的功能模块4.2 MCS-514.2 MCS-51单片机的定时器单片机的定时器/计数器计数器4.3 MCS-514.3 MCS-51单片机的串行口单片机的串行口4.1 MCS-514.1 MCS-51单片机的中断系统单片机的中断系统 4.1.1 4.1.1 中断的概念中断的概念 当当CPUCPU正常处理某个事件时,由于内部事件或外设请求,引正常处理某个事件时,由于内部事件或外设请求,引起起CPUCPU暂时中止当前正在运行的程序,转去执行请求中断的外设暂时中止当前
2、正在运行的程序,转去执行请求中断的外设或内部事件的中断服务子程序,中断服务程序执行完毕,再返或内部事件的中断服务子程序,中断服务程序执行完毕,再返回原来被中止的地方,继续原来的工作。这一过程称为中断。回原来被中止的地方,继续原来的工作。这一过程称为中断。实现中断功能的部件称为中断系统,请示实现中断功能的部件称为中断系统,请示CPUCPU中断的请求源称为中断的请求源称为中断源。中断源。主程序的中断处理主程序的中断处理4.1.2 CPU4.1.2 CPU响应及处理中断机制响应及处理中断机制 一般来说,根据中断源的轻重缓急排序,一般来说,根据中断源的轻重缓急排序,CPUCPU优先处理最优先处理最紧急
3、事件的中断请求源。也就是说,需要对各个中断源设定紧急事件的中断请求源。也就是说,需要对各个中断源设定相应的优先级,相应的优先级,CPUCPU总是最先响应级别最高的中断。中断源可总是最先响应级别最高的中断。中断源可以分为两个中断优先级:高优先级和低优先级。用户可以用以分为两个中断优先级:高优先级和低优先级。用户可以用关中断指令或复位指令来屏蔽所有中断请求,也可以用开中关中断指令或复位指令来屏蔽所有中断请求,也可以用开中断指令使断指令使CPUCPU接收中断申请。接收中断申请。4.1.3 4.1.3 中断源及中断请求标志中断源及中断请求标志 中断系统:由中断标志寄存器、中断源允许寄存器、中断优先中断
4、系统:由中断标志寄存器、中断源允许寄存器、中断优先级寄存器及中断查询电路组成。级寄存器及中断查询电路组成。1.1.中断源中断源 (1 1)外部中断请求)外部中断请求0 0:由:由 (P3.2P3.2管脚)输入,低电平或下管脚)输入,低电平或下降沿触发。降沿触发。(2 2)外部中断请求)外部中断请求1 1:由:由 (P3.3P3.3管脚)输入,低电平或下管脚)输入,低电平或下降沿触发。降沿触发。(3 3)内部定时器)内部定时器/计数器计数器0 0中断请求:由中断请求:由T0T0溢出引起。溢出引起。(4 4)内部定时器)内部定时器/计数器计数器1 1中断请求:由中断请求:由T1T1溢出引起。溢出引
5、起。(5 5)内部中断请求)内部中断请求TI/RITI/RI:串行:串行I/OI/O中断,串行口完成一帧字符发中断,串行口完成一帧字符发送送/接收后引起。接收后引起。0INT1INT2.2.中断请求标志中断请求标志1 1)TCONTCON寄存器中的中断标志寄存器中的中断标志 D7 D6 D5 D4 D3 D2 D1 D0TF1TR1TF0TR0IE1IT1IE0IT0TCONTCON是定时是定时/计数器计数器T0T0、T1T1的控制寄存器,格式如下:的控制寄存器,格式如下:2 2)SCONSCON寄存器中的中断标志寄存器中的中断标志 SCONSCON为串行口控制寄存器:为串行口控制寄存器:SM
6、0SM1SM2RENTB8RB8TIRID7 D6 D5 D4 D3 D2 D1 D04.1.4 4.1.4 中断控制及中断优先级中断控制及中断优先级1.1.中断允许控制寄存器中断允许控制寄存器IEIE(字节地址(字节地址A8HA8H)D7 D6 D5 D4 D3 D2 D1 D0EA-ET2ESET1EX1ET0EX0使用汇编语言程序控制中断请求信号的允许使用汇编语言程序控制中断请求信号的允许 或禁止的程序示例如下:或禁止的程序示例如下:CLR EA ;禁止所有中断请求禁止所有中断请求 SETB EX0 ;允许允许 中断请求,注意此时中断请求,注意此时EA=0,中断还不能被响应,中断还不能被
7、响应 CLR EX1 ;禁止禁止 中断请求中断请求 SETB EA ;允许总中断控制,此时允许总中断控制,此时 中断请求可以被中断请求可以被CPU响应响应 0INT1INT2.2.中断优先控制寄存器中断优先控制寄存器IP IP 二级中断的嵌套过程二级中断的嵌套过程 低级低级中断程序中断程序1高级高级中断程序中断程序2主程序主程序继续执行继续执行主程序主程序返回返回返回返回 为了实现上述功能,为了实现上述功能,MCS-51MCS-51中断系统设置了中断优先级寄存器中断系统设置了中断优先级寄存器IPIP统一管理各个中断源的中断优先级。统一管理各个中断源的中断优先级。如果如果CPUCPU接收到几个相
8、同优先级的中断请求源时,响应哪一个接收到几个相同优先级的中断请求源时,响应哪一个中断申请要取决于一个内部的硬件查询序列,此时应按照下表所中断申请要取决于一个内部的硬件查询序列,此时应按照下表所示的优先权结构先后响应中断请求。示的优先权结构先后响应中断请求。中中 断断 源源中断优先级中断优先级外部中断外部中断0(IE0)最高最高定时器定时器T0中断(中断(TF0)外部中断外部中断1(IE1)定时器定时器T1中断(中断(TF1)串行口中断(串行口中断(RI、TI)最低最低D7 D6 D5 D4 D3 D2 D1 D0-PSPT1PX1PT0PX0其各位格式为:其各位格式为:4.1.5 4.1.5
9、中断响应及中断处理过程中断响应及中断处理过程 1 1中断响应的条件中断响应的条件中断响应中断响应的条件的条件CPU无高级或同级的中断无高级或同级的中断服务。服务。当前指令已执行到最后一个当前指令已执行到最后一个机器周期,以确保当前指令机器周期,以确保当前指令的完整执行。的完整执行。如果正在执行的是如果正在执行的是RETIRETI、IEIE或或IPIP的指令,需要保证执行的指令,需要保证执行完该指令及其后的另一条指完该指令及其后的另一条指令。令。1完成当前指令后立即完成当前指令后立即终止现行程序,置位终止现行程序,置位相应的优先级状态触相应的优先级状态触发器,以阻断同级和发器,以阻断同级和低级中
10、断。低级中断。2将断点地址压入堆栈,将断点地址压入堆栈,同时清除中断请求标志同时清除中断请求标志(TI和和RI除外)。除外)。3把对应的中断源入口把对应的中断源入口地址送入程序计数器地址送入程序计数器PCPC,转至相应的中断,转至相应的中断服务程序。服务程序。2.2.中断响应过程中断响应过程3.3.中断处理和返回中断处理和返回 中断处理即为执行中断服务程序。中断服务程序从中断入口地址中断处理即为执行中断服务程序。中断服务程序从中断入口地址开始,首先要保存有关的寄存器内容,即保护现场;完成中断源请求开始,首先要保存有关的寄存器内容,即保护现场;完成中断源请求的服务后,还要恢复这些寄存器内容(恢复
11、现场),并在中断服务程的服务后,还要恢复这些寄存器内容(恢复现场),并在中断服务程序的末尾,安排一条返回指令,把断点地址送回程序计数器序的末尾,安排一条返回指令,把断点地址送回程序计数器PCPC,使程,使程序返回原断点处,结束中断过程。序返回原断点处,结束中断过程。4.4.中断响应时间中断响应时间 中断响应时间是指从查询中断请求标志位到转至中断服务程序入中断响应时间是指从查询中断请求标志位到转至中断服务程序入口地址所需的时间。口地址所需的时间。1对于定时器的溢出中对于定时器的溢出中断及边沿触发的外部断及边沿触发的外部中断,中断,CPUCPU在响应中在响应中断后即有硬件自动清断后即有硬件自动清除
12、相关的中断请求标除相关的中断请求标志。志。2对于串行口中断,对于串行口中断,CPU在响应中断后,在响应中断后,必须在中断服务程序中必须在中断服务程序中用软件清除中断标志,用软件清除中断标志,硬件没有相关措施。硬件没有相关措施。3对于电平触发的外部对于电平触发的外部中断,仅靠清除中断中断,仅靠清除中断标志是不能彻底撤除标志是不能彻底撤除中断请求的。必须在中断请求的。必须在中断响应后把外部输中断响应后把外部输入端信号从低电平强入端信号从低电平强制为高电平,才能彻制为高电平,才能彻底解决中断请求的撤底解决中断请求的撤除问题。除问题。5.5.中断请求的撤除中断请求的撤除 4.1.6 4.1.6 中断的
13、应用及编程中断的应用及编程 中断初始化程序实际上就是对几个特殊功能寄存器的相关中断初始化程序实际上就是对几个特殊功能寄存器的相关控制位进行赋值,具体步骤如下:控制位进行赋值,具体步骤如下:(1 1)开启相应中断源的中断允许。)开启相应中断源的中断允许。(2 2)设定所有中断源的中断优先级。)设定所有中断源的中断优先级。(3 3)规定外部中断的触发方式(电平触发还是边沿触发)。)规定外部中断的触发方式(电平触发还是边沿触发)。【例【例1 1】假设系统的堆栈为】假设系统的堆栈为61H7FH61H7FH,允许外部,允许外部0 0中断、定时器中断、定时器T0T0中断,并设定中断,并设定 为高优先级,采
14、用边沿触发,其他中断为低优先为高优先级,采用边沿触发,其他中断为低优先级,则在主程序中的中断初始化程序如下:级,则在主程序中的中断初始化程序如下:MOV SP,#60H MOV SP,#60H SETB PX0 SETB PX0 SETB IT0 SETB IT0 SETB ET0 SETB ET0 SETB EX0 SETB EX0 SETB EA SETB EA 【例【例2 2】若要求外部中断引脚】若要求外部中断引脚 采用边沿触发方式,处于高优先采用边沿触发方式,处于高优先级,初始化程序可以采用位操作指令,也可以用字节型指令进行编级,初始化程序可以采用位操作指令,也可以用字节型指令进行编制
15、。制。位操作指令:位操作指令:SETB EASETB EA SETB EX1 SETB EX1 SETB PX1 SETB PX1 SETB IT1 SETB IT1 字节型指令:字节型指令:MOV IE,#84H MOV IE,#84H ORL IP,#04H ORL IP,#04H ORL TCON,#04H ORL TCON,#04H 【例【例3 3】有有5 5个外部中断源个外部中断源EX1EX1、EX2EX2、EX3EX3、EX4EX4和和EX5EX5,如下图所,如下图所示。高电平时表示请求中断,要求执行相应中断服务程序,试编制程示。高电平时表示请求中断,要求执行相应中断服务程序,试编
16、制程序。序。EX2EX2EX3EX3EX4EX4EX5EX5EX1EX11 11 1 INT0 INT0 INT1 INT180C5180C51P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3 ORG 0000H LJMP MAIN ORG 0003H LJMP PINT0 ORG 0013H LJMP PINT1 ORG 0100H MAIN:MOV SP,#60H ORL TCON,#05H SETB PX0 MOV IE,#0FFH ORG 1000H PINT0:PUSH Acc LCALL WORK1 POP Acc RETI ORG 2000H PINT1:CLR
17、EA PUSH Acc PUSH DPH PUSH DPL SETB EA JB P1.0,LWK20 JB P1.1,LWK21 JB P1.2,LWK22 LCALL WORK23 LRET:CLR EA POP DPL POP DPH POP Acc SETB EA RETI LWK20:LCALL WORK20 SJMP LRET LWK21:LCALL WORK21 SJMP LRET LWK22:LCALL WORK22 SJMP LRET【例【例4 4】出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,】出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断(从外中断(P
18、3.2P3.2)引脚输入,行程)引脚输入,行程=轮胎周长轮胎周长运转圈数,设轮胎运转圈数,设轮胎周长为周长为2 m2 m,试实时计算出租车行驶里程(单位:,试实时计算出租车行驶里程(单位:m m),数据存于),数据存于32H32H、31H31H和和30H30H中。中。ORG 0000H LJMP START ORG 0003H LJMP INT0 ORG 0030H START:MOV SP,#60H SETB IT0 MOV IP,#01H MOV IE,#81H MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 LJMP MAIN ORG 0200H INT0:PUSH A
19、cc PUSH PSW MOV A,30H ADD A,#2 MOV 30H,A CLR A ADDC A,31H MOV 31H,A CLR A ADDC A,32H MOV 32H,A PUSH PSW PUSH Acc RETI4.2 MCS-514.2 MCS-51单片机的定时器单片机的定时器/计数器计数器 4.2.1 4.2.1 定时器定时器/计数器的结构及工作原理计数器的结构及工作原理8051单片机定时器单片机定时器/计数器内部逻辑结构计数器内部逻辑结构1 1方式寄存器方式寄存器TMODTMOD控制定时控制定时/计数器计数器T1 D7 D6 D5 D4 D3 D2 D1 D0控制定
20、时控制定时/计数器计数器T0GATEM1M0GATEC/TM1M02 2控制寄存器控制寄存器TCONTCON D7 D6 D5 D4 D3 D2 D1 D0TF1TR1TF0TR0IE1IT1IE0IT04.2.2 4.2.2 定时器定时器/计数器的工作方式计数器的工作方式1 1方式方式0 0 定时器定时器/计数器计数器T0方式方式0的逻辑电路结构的逻辑电路结构2.2.方式方式1 1 与方式与方式0 0的结构与操作差别仅在于计数器的位数,此时由的结构与操作差别仅在于计数器的位数,此时由TH0TH0作为作为高高8 8位,位,TL0TL0作为低作为低8 8位,构成的是一个位,构成的是一个1616位
21、的定时位的定时/计数器。计数器。定时器定时器/计数器计数器T0方式方式1的逻辑电路结构的逻辑电路结构3.3.方式方式2 2 方式方式2 2是自动重装计数初值的是自动重装计数初值的8 8位定时位定时/计数器。计数器。定时器定时器/计数器计数器T0方式方式2的逻辑电路结构的逻辑电路结构4.4.方式方式3 3 注意:当注意:当T0T0工作在方式工作在方式3 3时,时,T1T1仍可以设置为方式仍可以设置为方式0 0、方式、方式1 1和方式和方式2 2,但只能用,但只能用于那些不需要中断控制的场合。一般情况下,如果于那些不需要中断控制的场合。一般情况下,如果T1T1用作串行通信的波特率发用作串行通信的波
22、特率发生器时,生器时,T0T0才工作在方式才工作在方式3 3。定时器定时器/计数器计数器T0方式方式3的逻辑电路结构的逻辑电路结构确定定时确定定时/计数器的工作计数器的工作状态,写入方式控制寄状态,写入方式控制寄存器存器TMOD。设置寄存器设置寄存器TCON的值,的值,令令TR1或或TR0为为1,启动,启动定时定时/计数器开始工作。计数器开始工作。根据实际需要设置定时根据实际需要设置定时器初值或计数器初值,器初值或计数器初值,写入初值寄存器写入初值寄存器TH0、TL0或或TH1、TL1。根据需要设定寄存器根据需要设定寄存器IE,开放定时,开放定时/计数计数器中断。器中断。12344.2.3 4
23、.2.3 定时器定时器/计数器的应用计数器的应用MCS-51MCS-51系列定时系列定时/计数器的初始化编程步骤如下:计数器的初始化编程步骤如下:【例【例5 5】设系统时钟频率为】设系统时钟频率为12 MHz12 MHz,请利用定时,请利用定时/计数器计数器T0T0编程实现编程实现从从P1.0P1.0输出周期为输出周期为20 ms20 ms的方波。的方波。解:从解:从P1.0P1.0输出周期为输出周期为20 ms20 ms的方波,只需的方波,只需P1.0P1.0每隔每隔10 ms10 ms取反一取反一次。当系统时钟频率为次。当系统时钟频率为12 MHz12 MHz,T0T0工作于方式工作于方式
24、1 1时,时,T Tmaxmax=65 536s=65 536s,满足满足10 ms10 ms的定时要求。系统时钟频率为的定时要求。系统时钟频率为12 MHz12 MHz,T T12/12/f fosc=10000osc=10000,初值初值X X=65 536-10 000=D8F0H=65 536-10 000=D8F0H,则,则TH0=D8HTH0=D8H,TL0=F0HTL0=F0H。(1 1)采用中断方式,程序如下:)采用中断方式,程序如下:ORG 0000H ;ORG 0000H ;复位地址复位地址 LJMP MAIN ;LJMP MAIN ;转主程序转主程序 ORG 000BH
25、;ORG 000BH ;中断入口地址中断入口地址 CPL P1.0 ;CPL P1.0 ;输出方波输出方波 MOV TH0,#0D8H ;MOV TH0,#0D8H ;设置初值设置初值 MOV TL0,#0F0H ;MOV TL0,#0F0H ;RETI ;RETI ;中断返回中断返回 ORG 0200H ;ORG 0200H ;MAIN:MOV TMOD,#01H ;T0 MAIN:MOV TMOD,#01H ;T0工作于方式工作于方式1 1 MOV TH0,#0D8H ;MOV TH0,#0D8H ;重新装入计数初值重新装入计数初值 MOV TL0,#0F0H ;MOV TL0,#0F0H
26、 ;SETB EA ;CPU SETB EA ;CPU开中断开中断 SETB ET0 ;SETB ET0 ;允许允许T0T0终端终端 SETB TR0 ;SETB TR0 ;启动启动T0T0 SJMP$;SJMP$;(2)采用查询方式,程序如下:)采用查询方式,程序如下:ORG 0000H AJMP MAIN ORG 0300HMAIN:MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0LOOP:JBC TF0,NEXT ;查询计数溢出查询计数溢出 SJMP LOOPNEXT:CPL P1.0 SJMP LOOP SJMP$【例【例6 6】利用
27、定时】利用定时/计数器计数器T0T0测量某正脉冲信号宽度,脉冲从测量某正脉冲信号宽度,脉冲从P3.2P3.2输入。已知此脉冲宽度小于输入。已知此脉冲宽度小于10 ms10 ms,系统时钟频率为,系统时钟频率为12 12 MHzMHz。要求测量此脉冲宽度,并把结果顺序存放在以片内。要求测量此脉冲宽度,并把结果顺序存放在以片内30H30H单元为首地址的数据存储单元中。单元为首地址的数据存储单元中。参考程序如下:参考程序如下:ORG 0000H AJMP MAIN ORG 0300H MAIN:MOV TMOD,#09H MOV TH0,#00H MOV TL0,#00H LP:JB P3.2,LP
28、 LOOP:JNB P3.2,LOOP SETB TR0 HERE:JB P3.2,HERE CLR TR0 MOV 30H,TL0 MOV 31H,TH0 SJMP$4.3 MCS-514.3 MCS-51单片机的串行口单片机的串行口 4.3.1 4.3.1 串行通信的基础知识串行通信的基础知识 1.1.串行通信的分类串行通信的分类 按照串行数据的同步方式,串行通信可以分为异步通信和同步按照串行数据的同步方式,串行通信可以分为异步通信和同步通信。通信。1 1)异步通信)异步通信 异步串行通信每个数据以相同的帧格式传送,如图所示。每一帧异步串行通信每个数据以相同的帧格式传送,如图所示。每一帧信
29、息由起始位、数据位、奇偶位和停止位组成,从起始位开始到停止信息由起始位、数据位、奇偶位和停止位组成,从起始位开始到停止位结束的全部内容称为位结束的全部内容称为“一帧一帧”,发送一位数据所需的时间称为,发送一位数据所需的时间称为“位位时间时间”。字符帧的异步通信格式字符帧的异步通信格式2 2)同步通信)同步通信 同步通信中,每一数据块开始时发送一个或两个同步字符,以同步通信中,每一数据块开始时发送一个或两个同步字符,以使发送端与接收端双方获得同步。数据块的各个字符间不存在起始使发送端与接收端双方获得同步。数据块的各个字符间不存在起始位和停止位,所以通信速度比异步通信快。同步通信时,如果发送位和停
30、止位,所以通信速度比异步通信快。同步通信时,如果发送的数据块之间有时间间隔,则发送同步字符填充。的数据块之间有时间间隔,则发送同步字符填充。2.2.串行通信的传送方式串行通信的传送方式 串行通信的传送方式可分为单工、半双工和全双工串行通信的传送方式可分为单工、半双工和全双工3 3种:种:3.3.串行通信的数据传输速率串行通信的数据传输速率 波特率是衡量一个通信系统数据传送快慢的常用指标。在串行通信中,波特率是衡量一个通信系统数据传送快慢的常用指标。在串行通信中,波特率指每秒传送二进制的位数,它是每一位的传送时间的倒数,也就是说波特率指每秒传送二进制的位数,它是每一位的传送时间的倒数,也就是说波
31、特率是每秒传送的字符个数和每字符所含二进制位数的乘积。波特率的单波特率是每秒传送的字符个数和每字符所含二进制位数的乘积。波特率的单位是位是“波特波特”(baudbaud)或位)或位/秒(秒(b/sb/s),它既反映了串行通信的速率,也反),它既反映了串行通信的速率,也反映了对传输通道的要求,波特率越高,要求传输通道的频带就越宽。映了对传输通道的要求,波特率越高,要求传输通道的频带就越宽。在异步串行通信中,格式位的发送和接收都必须有时钟信号对传送的数在异步串行通信中,格式位的发送和接收都必须有时钟信号对传送的数据进行定时控制。发送时钟和接收时钟就是用来控制通信设备发送、接收字据进行定时控制。发送
32、时钟和接收时钟就是用来控制通信设备发送、接收字符数据速度的,该时钟信号一般都是由外部时钟电路产生的。符数据速度的,该时钟信号一般都是由外部时钟电路产生的。在发送数据时,发送设备在发送时钟的下降沿将移位寄存器的数据串行在发送数据时,发送设备在发送时钟的下降沿将移位寄存器的数据串行移位输出;接收数据时,接收设备在接收时钟的上升沿对接收数据采样,进移位输出;接收数据时,接收设备在接收时钟的上升沿对接收数据采样,进行数据位检测。时钟频率越高,则波特率越高,通信速度就越快。行数据位检测。时钟频率越高,则波特率越高,通信速度就越快。4.4.串行通信接口电路串行通信接口电路 能够完成异步通信的串行接口硬件电
33、路称为能够完成异步通信的串行接口硬件电路称为UARTUART,即通用异步,即通用异步接收接收/发送器。发送器。本质上,串行接口电路是以并行数据形式与本质上,串行接口电路是以并行数据形式与CPUCPU接口,以串行接口,以串行数据形式与外部逻辑接口。数据形式与外部逻辑接口。MCS-51MCS-51系列单片机串行通信的基本功能系列单片机串行通信的基本功能可以描述为:发送数据时,从可以描述为:发送数据时,从CPUCPU接收并行数据,转换成一定格式接收并行数据,转换成一定格式的串行数据,按规定的波特率逐位输出;接收数据时,将外设送来的串行数据,按规定的波特率逐位输出;接收数据时,将外设送来的一定格式的串
34、行数据转换成并行数据传送给的一定格式的串行数据转换成并行数据传送给CPUCPU。UART发送操作图发送操作图UART接收操作接收操作4.3.2 MCS-514.3.2 MCS-51单片机的串行口结构和控制单片机的串行口结构和控制 MCS-51 MCS-51系列的串行口内部包含发送缓冲器和接收缓冲器,可同系列的串行口内部包含发送缓冲器和接收缓冲器,可同时接收和发送数据。发送缓冲器只能写入不能读出,接收缓冲器则时接收和发送数据。发送缓冲器只能写入不能读出,接收缓冲器则只能读出不能写入。两个缓冲器占用同一个地址(只能读出不能写入。两个缓冲器占用同一个地址(99H99H),并且用),并且用同一个符号同
35、一个符号SBUFSBUF表示。表示。与串行口设置有关的特殊功能寄存器除了定时与串行口设置有关的特殊功能寄存器除了定时/计数器相关设计数器相关设置之外,还包括两个控制寄存器:串口控制寄存器置之外,还包括两个控制寄存器:串口控制寄存器SCONSCON和电源控制和电源控制寄存器寄存器PCONPCON。1.1.串口控制寄存器串口控制寄存器SCON SCON SCONSCON中和串行口有关的位的功能描述如下:中和串行口有关的位的功能描述如下:(1 1)SM0SM0、SM1SM1:串行口工作方式选择位。其定义见下表。:串行口工作方式选择位。其定义见下表。SM0 SM1SM0 SM1工作方式工作方式功能说明
36、功能说明0 00 0方式方式0 08 8位同步移位寄存器,波特率固定(为位同步移位寄存器,波特率固定(为f foscosc/12/12)0 10 1方式方式1 11010位位UARTUART,波特率可变(取决于,波特率可变(取决于T1T1的溢出率)的溢出率)1 01 0方式方式2 21111位位UARTUART,波特率固定(为,波特率固定(为f foscosc/64/64或或f foscosc/32/32)1 11 1方式方式3 31111位位UARTUART,波特率可变(取决于,波特率可变(取决于T1T1的溢出率)的溢出率)(2 2)SM2SM2:多机通信控制位。:多机通信控制位。(3 3)
37、RENREN:接收允许控制位。:接收允许控制位。REN=1REN=1时允许串行口接收;时允许串行口接收;REN=0REN=0时禁止时禁止串行口接收。串行口接收。(4 4)TB8TB8:发送的第:发送的第9 9数据位。在方式数据位。在方式2 2或方式或方式3 3时,其值由用户软件时,其值由用户软件设置。双机通信时,设置。双机通信时,TB8TB8常作为奇偶校验位使用;多机通信时,常作为奇偶校验位使用;多机通信时,TB8TB8常表常表示主机发送的是地址帧还是数据帧。一般约定,示主机发送的是地址帧还是数据帧。一般约定,TB8=0TB8=0为数据帧,为数据帧,TB8=1TB8=1为地址帧。为地址帧。(5
38、 5)RB8RB8:接收的第:接收的第9 9数据位。在方式数据位。在方式2 2或方式或方式3 3时,发送机发送的第时,发送机发送的第9 9位数据位数据TB8TB8被接收机接收后,存放于接收机的被接收机接收后,存放于接收机的SCONSCON寄存器的寄存器的RB8RB8中。中。2.2.电源控制寄存器电源控制寄存器PCON PCON PCONPCON是控制是控制CPUCPU运行功率的寄存器。运行功率的寄存器。D7 D6 D5 D4 D3 D2 D1 D0SMOD-GF1GF0PDIDL (1 1)SMODSMOD:串行口波特率的倍增位。当:串行口波特率的倍增位。当SMOD=1SMOD=1时,串行口波
39、特时,串行口波特率加倍;系统复位时,率加倍;系统复位时,SMOD=0SMOD=0。(2 2)GF1GF1、GF0GF0:通用标志位。这两个位可作为系统:通用标志位。这两个位可作为系统“上电复位上电复位”或或“热复位热复位”的检测标志。的检测标志。(3 3)PDPD:掉电方式位。:掉电方式位。PD=1PD=1时,时,CPUCPU立即进入掉电的省电模式立即进入掉电的省电模式运行。运行。(4 4)IDLIDL:待机方式位。:待机方式位。IDL=1IDL=1时,时,CPUCPU立即进入闲置的省电模立即进入闲置的省电模式运行。式运行。4.3.3 MCS-514.3.3 MCS-51单片机串行口的工作方式
40、单片机串行口的工作方式 1.1.方式方式0 0 1 1)方式)方式0 0发送发送 当用户应用程序向当用户应用程序向SBUFSBUF写入数据时,在同步时钟写入数据时,在同步时钟TXDTXD的控制下,的控制下,串行口将串行口将8 8位数据以位数据以f foscosc/12/12的固定波特率从的固定波特率从RXDRXD引脚输出。引脚输出。8 8位数据位数据发送完成后自动将中断标志发送完成后自动将中断标志TITI置位,呈中断申请状态,再次发送置位,呈中断申请状态,再次发送数据之前,必须用软件将数据之前,必须用软件将TITI清清0 0。方式方式0发送数据时的时序发送数据时的时序2 2)方式)方式0 0接
41、收接收 若满足若满足REN=1REN=1和和RI=0RI=0的条件,则自动触发串行口的同步接收数据的条件,则自动触发串行口的同步接收数据动作。此时串行口开始从动作。此时串行口开始从RXDRXD引脚串行输入数据,波特率为引脚串行输入数据,波特率为f foscosc/12/12。当接收完当接收完8 8位数据后,中断标志位数据后,中断标志RIRI被置位,请求中断。当再次接收时,被置位,请求中断。当再次接收时,必须由软件将必须由软件将RIRI清清0 0。方式方式0接收数据时的时序接收数据时的时序2.2.方式方式1 1 1 1)方式)方式1 1发送发送 当数据写入发送当数据写入发送SBUFSBUF后,硬
42、件自动添加起始位和停止位,与后,硬件自动添加起始位和停止位,与8 8个数据位构成一帧,由个数据位构成一帧,由TXDTXD引脚逐位地按照设定波特率发送出去。引脚逐位地按照设定波特率发送出去。发送完毕,发送中断标志发送完毕,发送中断标志TITI置置1 1。其时序如下图所示。其时序如下图所示。方式方式1发送数据时的时序发送数据时的时序2 2)方式)方式1 1接收接收 要使在方式要使在方式1 1的接收数据有效,必须满足两个条件:的接收数据有效,必须满足两个条件:RI=0RI=0;SM2=0SM2=0或接收到的停止位为或接收到的停止位为1 1,继而将并行数据送入接受,继而将并行数据送入接受SBUFSBU
43、F,再置,再置RI=1RI=1,表示一帧数据接收完毕。发生的时序见下图。,表示一帧数据接收完毕。发生的时序见下图。方式方式1接收数据时的时序接收数据时的时序3 3)波特率计算)波特率计算 方式方式1 1下串行口的波特率是可变的,与作为波特率发生器的定时器下串行口的波特率是可变的,与作为波特率发生器的定时器/计数器计数器T1T1的溢出率有关,其公式为的溢出率有关,其公式为溢出率波特率1322TSMOD其中,其中,SMODSMOD是是PCONPCON寄存器最高位的值。寄存器最高位的值。当定时器当定时器/计数器计数器T1T1工作于方式工作于方式2 2时,假设计数初值为时,假设计数初值为X X,则定时
44、,则定时器器/计数器计数器T1T1的溢出周期为:的溢出周期为:)(溢出周期X-256f12osc溢出率是溢出周期的倒数,则波特率计算公式变为:溢出率是溢出周期的倒数,则波特率计算公式变为:)(波特率XSMOD-25612f322osc 定时器定时器/计数器计数器T1T1选择使用方式选择使用方式2 2作为波特率发生器,主要作为波特率发生器,主要是因为该方式为是因为该方式为8 8位自动加载方式,具有自动重装计数初值的位自动加载方式,具有自动重装计数初值的功能,可以避免程序反复装入初值而引起的定时误差,使波特功能,可以避免程序反复装入初值而引起的定时误差,使波特率较为稳定。实际应用时,通常是通过波特
45、率的值计算得到定率较为稳定。实际应用时,通常是通过波特率的值计算得到定时器时器/计数器计数器T1T1的计数初值,公式为:的计数初值,公式为:波特率3842f-256oscSMODX3.3.方式方式2 2 1 1)方式)方式2 2发送发送 在发送数据前,应首先在寄存器在发送数据前,应首先在寄存器SCONSCON的的TB8TB8位中把位中把D8D8数据位的数据位的内容设置好,可以用内容设置好,可以用“SETB TB8”SETB TB8”置置TB8TB8位为位为1 1,或用,或用“CLR TB8”CLR TB8”置置TB8TB8为为0 0。串行口再发送数据。串行口再发送数据D0D0D7D7写入发送写
46、入发送SBUFSBUF,而,而D8D8位的内容位的内容则由硬件电路从则由硬件电路从TB8TB8中直接送到发送移位寄存器的第中直接送到发送移位寄存器的第9 9位,并以此启位,并以此启动串行发送。串行口按一定波特率发完动串行发送。串行口按一定波特率发完1 1个起始位、个起始位、8 8个数据位,将个数据位,将D8D8和停止位也按次序从和停止位也按次序从RxDRxD引脚发出。发送完毕,发送中断标志引脚发出。发送完毕,发送中断标志TITI置置1 1。方式方式2发送数据时的时序发送数据时的时序2 2)方式)方式2 2接收接收 接收过程与方式接收过程与方式1 1的接收过程基本相同,不同的只是在第的接收过程基
47、本相同,不同的只是在第9 9位数位数据位据位D8D8上。串行口把接收到的前上。串行口把接收到的前8 8位数据送入接收位数据送入接收SBUFSBUF,而由硬件自,而由硬件自动将第动将第9 9位数据传送到接收机的位数据传送到接收机的RB8RB8。方式方式2接收数据时的时序接收数据时的时序3 3)波特率计算)波特率计算 方式方式2 2的波特率是固定的,与寄存器的波特率是固定的,与寄存器PCONPCON的的SMODSMOD位有位有关,其公式为:关,其公式为:波特率波特率=oscSMODf6424.4.方式方式3 3 方式方式3 3下的串行口也是下的串行口也是9 9位异步通信接口,位异步通信接口,111
48、1位数据为一帧,位数据为一帧,通信过程与方式通信过程与方式2 2的完全相同,不同之处在于方式的完全相同,不同之处在于方式2 2的波特率是的波特率是固定的两种,而方式固定的两种,而方式3 3的波特率的设定则与方式的波特率的设定则与方式1 1相同,即由定相同,即由定时时/计数器计数器T1T1的溢出率决定。的溢出率决定。4.3.4 4.3.4 串行口的应用及编程串行口的应用及编程 串行口应用时首先必须进行初始化编程,主要任务包括设置串行口应用时首先必须进行初始化编程,主要任务包括设置串行口的工作方式,设定串行口的工作方式,设定SCONSCON寄存器;设置波特率;选择查询方寄存器;设置波特率;选择查询
49、方式或中断方式。式或中断方式。关于波特率,对于方式关于波特率,对于方式0 0,无需相关设置;对于方式,无需相关设置;对于方式2 2,仅需,仅需对对PCONPCON寄存器中的寄存器中的SMODSMOD位进行编程;对于方式位进行编程;对于方式1 1和方式和方式3 3,不仅要,不仅要对对PCONPCON中的中的SMODSMOD位编程,还要开启定时位编程,还要开启定时/计数器计数器T1T1,对,对T1T1编程。编程。常用的波特率以及与定时常用的波特率以及与定时/计数器计数器T1T1各参数之间的关系:各参数之间的关系:波波 特特 率率(b/s(b/s)f foscosc/MHz/MHzSMODSMOD定
50、时定时/计数器计数器T1T1方方 式式重重 装装 值值方式方式0 0最大最大1 M1 M1212-方式方式2 2最大最大375 k375 k12121 1-方式方式1 1和和3 362.5 k62.5 k12121 10 02 2FFHFFH19.2 k19.2 k11.059211.05921 10 02 2FDHFDH9.6 k9.6 k11.059211.05920 00 02 2FDHFDH4.8 k4.8 k11.059211.05920 00 02 2FAHFAH2.4 k2.4 k11.059211.05920 00 02 2F4HF4H1.2 k1.2 k11.059211.0