




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 中断控制、定时/计数器与串行口,4.1 CPU与外设通信方式概述 4.2 增强型MCS-51中断控制系统 4.3 增强型MCS-51定时/计数器 4.4 串行通信系统 4.5 增强型MCS-51芯片识别和仿真,4.1 CPU与外设通信方式概述,4.1.1 查询方式 查询方式包括查询输出方式和查询输入方式。所谓查询输入方式,是指CPU读外设数据前,先查询外设是否处于准备就绪状态(即外设是否已将数据输出到CPU的数据总线上);查询输出方式是指CPU向外设输出数据前,先查询外设是否处于空闲状态(即外设是否可以接收CPU输出的数据)。,4.1.2 中断通信方式 采用中断传输方式即可克服查询传输
2、方式存在的缺陷:当CPU需要向外设输出数据时,将启动命令写入外设控制口后,就继续执行随后的指令,而不是被动等待;当外设处于空闲状态,可以接收数据时,由外设向CPU发出允许数据传送的请求信号即中断请求信号,如果满足中断响应条件,CPU将暂停执行随后的程序,转去执行预先安排好的数据传送子程序也称为中断服务程序,CPU响应外设中断请求信号的过程简称为中断响应;在完成了数据传送后,再返回断点处继续执行被中断的程序。可见,在这种方式中,CPU发出控制命令后,依然执行启动命令后的指令序列,而不是通过检测外设的状态来确定外设是否处于空闲状态,不仅CPU利用率高,而且能同时与多个外设进行数据交换只要适当安排多
3、个中断优先级以及同优先级中断的查询顺序即可。因此,中断传输方式是CPU与外设之间最常见的一种数据传输方式。,1.中断源 在计算机控制系统中,把引起中断的事件称为中断源。在单片机控制系统中,常见的中断源有: 外部中断,如CPU某些特定引脚电平变化引起的中断。 各类定时/计数器溢出中断(即定时时间到或计数器满请求中断)。 串行发送结束请求中断。 串行接收有效请求中断。 电源掉电中断。,2. 中断优先级 既然中断是计算机系统中CPU与外设进行数据交换的主要方式,那么多个外设以中断方式与CPU进行数据交换时,可能遇到两个或两个以上外设中断请求同时有效的情形。在这种情况下,CPU先响应哪一外设的中断请求
4、?这就涉及到中断优先级问题。一般说来,为了能够处理多个中断请求,中断控制系统均提供中断优先级控制。有了中断优先级控制后,就可以解决多个中断请求同时有效时先响应哪一中断问题。,3. 中断开关 有时为避免某一处理过程被中断,中断控制器给每一个中断源都设置了一个中断请求屏蔽位,用于禁止或允许相应中断源的中断请求传送到CPU,相当于中断源的中断开关。此外,还设一个总的中断请求屏蔽位,当该位处于禁止状态时,所有中断源的中断请求均不能传送到CPU,相当于中断总开关。,4. 中断处理过程,4.2 增强型MCS-51中断控制系统,图4-1 增强型MCS-51中断系统结构,4.2.1 中断源及标志,图4-2 与
5、中断功能有关的TCON寄存器位,4.2.2 中断控制 1. 中断允许控制寄存器IE,图4-3 中断控制寄存器IE各位含义,由于IE寄存器具有按位寻址功能,因此可通过位操作指令,允许或禁止其中的任一中断,如:,SETB EA; 开中断 SETB EX0 ; 允许 中断 CLR ES ; 禁止串行口中断 例如当TCON的IT0位为0时,只要在S5P2相采样到P3.2引脚为低电平,则 中断请求标志IE0就为1。但当EX0或EA之一为0时,CPU将不检查IE0的中断请求标志(即该中断请求被CPU忽略)。,2. 中断优先级控制寄存器IP 标准MCS-51内核CPU只有两个中断优先级,各中断源优先级由IP
6、寄存器控制(0为低优先级;1为高优先级),中断优先级控制寄存器IP各位含义如图4-4(a)所示。 增强型MCS-51内核CPU具有四个中断优先级,除了标准MCS-51 CPU的中断优先级控制寄存器IP外,还增加了一个中断优先级控制寄存器IPH(字节地址为0B7H,但IPH没有位地址功能),IPH寄存器各位含义如图4-4(b)所示,于是中断源的中断优先级由IPH、IP对应位编码决定,具体情况如下:,IPH.X位 IP.X位优先级 00 0级(优先级最低) 01 1级 10 2级 11 3级(优先级最高),图4-4 中断优先级控制 (a) 中断优先级控制寄存器IP各位含义 (b) 中断优先级控制高
7、位寄存器IPH各位含义,图4-4 中断优先级控制 (a) 中断优先级控制寄存器IP各位含义 (b) 中断优先级控制高位寄存器IPH各位含义,PX0H、PX0外中断 优先级高、低位。 PX1H、PX1外中断 优先级高、低位。 PT0H、PT0定时/计数器T0优先级高、低位。 PT1H、PT1定时/计数器T1优先级高、低位。 PSH、PS串行口中断优先级高、低位。 PT2H、PT2定时/计数器T2优先级高、低位。 可见,当IPH为XX000000B时,中断优先级仅由IP寄存器决定,即与标准MCS-51内核CPU中断优先级兼容。,3. 硬件查询顺序 改变IPH、IP寄存器的值,即可使相应中断源优先权
8、升高或降低。但增强型MCS-51具有6个中断源,而只有四个中断优先级,这就必然存在两个或两个以上中断源优先级相同。例如当IPH为00010001B,而IP为00001001B时,外中断优先级为3(最高),串行口中断优先级为2,定时/计数器T1中断优先级为1,而其他3个中断源优先级均为0(最低)。复位后,IPH、IP初值为00000000,即所有中断优先级均为0。,为此,MCS-51约定当同一优先级中断请求有效时,CPU响应顺序为: 外中断 定时/计数器T0溢出中断 外中断 定时/计数器T1溢出中断 串行口中断 定时/计数器T2溢出中断,4.2.3 中断响应过程及中断服务程序入口地址,图4-5
9、中断响应时序,1. 中断响应条件 MCS-51中断响应条件为: (1) 当前不处于同级或更高级中断响应中。这是为了防止同级或低级中断请求中断同级或更高级中断。 (2) 当前机器周期必须是当前指令的最后一个机器周期,否则等待。执行某些指令需要两个或两个以上机器周期,如果当前机器周期不是指令的最后一个机器周期,则不响应中断请求,即不允许中断一条指令的执行过程,这是为了保证指令执行过程的完整性。,(3) 如果当前指令是中断返回指令RETI,或读写中断控制寄存器IE、优先级寄存器IP或IPH,则必须再执行一条指令后才能响应中断请求。 如果不满足以上条件,将忽略该机器周期对中断标志的查询结果,下一机器周
10、期继续查询,因此可能存在这样一种情况:某一中断发生了,不满足响应条件,CPU不响应,又出了新的中断请求,则尚未响应的中断请求将被忽略,因为每一中断源只有一个中断标志位,而CPU总是在每个机器周期的S5P2相检测中断源,设置中断标志。,例如低电平触发的外中断INT0低电平维持时间为1个机器周期,假设在M1机器周期有效,则M1机器周期的S5P2状态后,标志位IE0为1;尽管在M2机器周期的S6状态,CPU查询到IE0有效,但不满足中断响应条件,即M3机器周期不响应INT0的中断请求,继续执行随后指令系列,然而在M2机器周期S5P2相前INT0引脚已恢复高电平,在S5P2相后IE0复位,在M3机器周
11、期S6状态查询发现IE0为0,无效,结果是本次INT0中断请求将被忽略。 另外,在中断响应过程中,如果在M4周期的S6状态查询到优先级更高的中断标志为1(即在M2M3机器周期内优先级更高的中断请求出现),在M5、M6机器周期将响应高优先级中断,而不执行低优先级中断服务程序。,2. 中断响应过程及中断服务程序入口地址 如果满足中断响应条件,将进入中断响应过程: (1) CPU先将对应中断的优先级触发器置1(每一中断源对应一个中断优先级触发器,不过图4-1没画出该触发器),阻止CPU再响应同级或更低级中断请求。 (2) 将程序计数器PC当前值压入堆栈,以保证执行完中断服务程序后正确返回;并将相应中
12、断源入口地址装入PC,以便执行中断服务程序。这一过程由硬件完成,相当于执行了一条长调用指令“LCALL XXXX”,中断服务程序入口地址如下:,中断源 入口地址(即LCALL指令 的XXXX地址) 外中断 0003H 定时/计数器T0溢出中断 000BH 外中断 0013H 定时/计数器T1溢出中断 001BH 串行口中断 0023H 定时/计数器T2溢出中断 002BH,由于各中断服务程序入口地址仅相隔8个字节,难以容纳中断服务程序,为此可在入口处放置一条长跳转指令,而实际的中断服务程序放在存储器区内的任意位置(一般放在主程序后),如下所示: ORG 0003H LJMP INT0; 在外中
13、断入口处放一条长跳转指令 ORG 0100H MAIN:; 主程序 INT0:; 外中断的中断服务程序,(3) 清除中断请求标志。进入中断服务程序后,CPU能自动清除下列中断请求标志位: 定时器T0中断请求标志TF0; 定时器T1中断请求标志TF1; 边沿触发方式下外中断的中断请求标志IE0; 边沿触发方式下外中断的中断请求标志IE1。 但不自动清除串行发送结束中断标志TI、串行接收有效中断标志RI、定时/计数器T2溢出中断标志TF2、定时/计数器T2外触发标志EXF2以及电平触发方式下的外中断标志IE0和IE1。对于不能自动清除的中断请求标志,需要在中断服务程序中,用“CLR 位地址”指令清
14、除。,(4) 返回。中断服务程序最后一条指令是中断返回指令“RETI”,执行了中断返回指令RETI后,先将对应中断的优先级触发器清零(以便返回后CPU能够响应同级或更低级的中断请求),并将堆栈内的两个字节弹到程序计数器PC,以便从断点处继续执行被中断程序的后续指令。,4.2.4 中断初始化及中断服务程序结构,中断初始化是指通过设置TCON、IE及IP、IPH寄存器内容,确定外中断触发方式(低电平触发还是下降沿触发)、开中断、设置中断优先级等,例如可通过如下指令将定义为下降沿触发,优先级为3(最高),并允许中断:,SETB IT0;外中断采用下降沿触发 MOV A, IPH ORL A, #01
15、H MOV IPH,A;由于IPH寄存器没有位寻址功能,只能通过或 指令将IPH的PX0H ;位置1 SETB EA ;开中断,SETB PX0;IP寄存器具有位寻址功能,可通过SETB指令将指 定位置1 SETB EX0;允许中断,中断服务程序结构与子程序类似,大致包含以下几部分: ; 必要时保护现场 PUSH PSW PUSH Acc SETB RS0; 切换工作寄存器区,根据需要可使用03区中的任一区 CLR RS1; 由于中断出现的不确定性,因此只要中断服务程序中使用 ; 了寄存器组R0R7,就需要切换工作区 ; 中断服务程序体(略),CLR 中断请求标志; 对于不能自动清除中断请求标
16、志的中 断响应过程,需要通过“CLR中断 ; 请求标志位”指令清除中断请求标志, 防止同一请求被多次响应POP Acc POP PSW; 恢复现场 RETI; 中断返回指令,(1) 中断出现是随机的,可能出现,也可能不出现,更不知道什么会时候出现,即被中断程序的断点无法预测。而子程序的执行由调用指令LCALL或ACALL实现,只要满足特定条件,就一定会发生,断点由程序员控制。因此只要中断服务程序中出现写寄存器组R0R7之一,就需要切换工作寄存器区:由于同级中断不能嵌套,因此同一优先级中断服务程序可以使用同一工作寄存器区;高优先级中断服务程序和低优先级中断服务程序一般不能使用同一工作寄存器区,除
17、非两者不可能同时出现。 (2) 中断服务程序入口地址(也称为中断向量)由硬件决定,与CPU类型有关,不能更改。而子程序入口地址由用户安排。,(3) 子程序中可以任意调用另一子程序,但中断过程有优先级,同级或低级中断不能打断正在执行的同级或更高优先级中断服务程序。 (4) 尽管子程序返回指令RET和中断返回指令RETI均会将栈顶两个字节信息装入PC,恢复断点,但RETI还清除相应中断优先级触发器,因此中断返回指令不可用子程序返回指令RET代替。,对于采用电平触发方式的外中断 和 来说,如果低电平有效信号不自动消失,或低电平维持时间大于外中断服务程序的执行时间时,即使在退出中断服务程序前,通过“C
18、LR IE0”或“CLR IE1”指令清除了中断标志IE0或IE1,但P3.2或P3.3引脚依然保持低电平,下一机器周期中断标志又再次被置位,返回后中断标志有效,如果满足响应条件,将造成“同一请求,多次响应”的现象。为此,尽量避免采用电平触发方式,非要用电平触发方式(如干扰大,不宜采用边沿触发)时,可通过以下措施克服:, 增加单稳态电路,把电平触发改为脉冲触发。 如果低电平信号能自动消失,但保持时间可能大于中断服务程序的执行时间时,在系统反映速度许可情况下,为了降低成本,可在外中断服务程序中加入引脚电平状态检测指令,确保P3.2(对 来说)或P3.3(对 来说)引脚变低电平后,再清除中断请求标
19、志并返回。,4.3 增强型MCS-51定时/计数器,在单片机应用系统中,常需要对外部脉冲进行计数或每隔特定时间执行某一操作,因此定时/计数器是单片机控制系统重要的外设部件之一,几乎所有单片机控制系统均有一个到数个定时/计数器。增强型MCS-51系列单片机内置了三个16位的定时/计数器,分别称为T0、T1和T2。,4.3.1 定时/计数功能概述,定时/计数器的核心部件是一个加法(或减法)计数器,可工作在定时方式或计数方式,因此称为定时/计数器。不过这两种工作方式没有本质的区别,只是计数脉冲来源不同而已:如果计数脉冲是频率相对稳定的系统时钟信号(一般是系统时钟的分频信号)时,则称为定时方式;反之,
20、当计数脉冲取自CPU I/O引脚的外部信号时,称为计数方式。 单片机内定时/计数器属于可编程部件,除了加法计数器(部分单片机芯片采用减法计数器)外,尚有工作方式控制寄存器,一般具有如下特点:,(1) 工作方式寄存器。定时/计数器有多种定时或计数方式,使用前必须初始化工作方式寄存器,设置定时/计数器的工作方式(定时还是计数;硬件启动还是软件启动;计数长度即作为16位计数器使用还是8位计数器使用等)。 (2) 可以从0开始计数,也可以从特定值开始计数,因此定时/计数器是一个可读写的寄存器,使用前一般需要设置定时/计数器的初值。 (3) 对于每来一个脉冲加1的定时/计数器,当计数器溢出时,可向CPU
21、发出中断请求(定时时间到),以便CPU处理。,4.3.2 定时/计数器T0、T1结构及控制,1. 定时/计数器的控制 在MCS-51中,与定时/计数器T0、T1工作方式有关的寄存器为TMOD和TCON。其中TMOD控制定时/计数器T0、T1的工作方式,而TCON控制定时/计数器的启动方式和禁止/允许定时中断。 1) 工作方式寄存器TMOD,图4-6 TMOD寄存器各位含义,表4-1 定时/计数器工作方式, 定时/计数方式选择。当 位为0时,计数脉冲来自CPU内部分频器,计数脉冲频率是时钟信号的12分频(对于“6时钟/机器周期”芯片来说,计数脉冲是系统时钟信号的6分频),即处于定时方式;当 位为
22、1时,计数脉冲来自P3.4引脚,即处于计数方式。 GATE定时/计数器启动方式控制位。,2) 控制字寄存器TCON,图4-7 TCON寄存器中与定时/计数器控制有关的位,2. 工作方式 定时/计数器T0有四种工作方式(即方式0、方式1、方式2和方式3),主要用于定时和计数;定时/计数器T1有三种工作方式(即方式0、方式1和方式2),除了用作定时、计数外,T1还作为串行异步通信口的波特率发生器。值得注意的是,初始化时如果错将定时/计数器T1置为方式3,T1将停止工作。,1) 方式1(16位定时/计数器),图4-8 定时/计数器T0(T1)方式1结构,当 位为0时,定时/计数器T0处于定时状态,计
23、数脉冲是系统时钟信号的n分频器,即每隔n/fOSC秒,TL0加1,当TL0溢出(如果TL0当前值为FFH,则再来一个脉冲,TL0将溢出,变为00)时,TH0自动加1;当TH0也溢出时,定时器T0中断标志TF0位置位1。如果定时器T0溢出中断开关ET0为1(即允许T0中断),将向CPU发出定时器溢出中断请求(CPU能否响应,取决于中断响应条件)。,如果定时器初值为M,则方式1的定时时间t为: (“12时钟/机器周期”模式) (“6时钟/机器周期”模式),【例4.1】 假设晶振频率为12 MHz,定时器初值为9800(即2648H),计算“12时钟/机器周期”模式下的定时时间t。,t= 55 73
24、6 s=55.736 ms,显然,当晶振频率为12 MHz,定时器初值为0时,方式1定时时间最长为:,tmax= =65 536 s,在定时时间T确定情况下,定时器初值M可表示为:,(“12时钟/机器周期”模式),(“6时钟/机器周期”模式),在上式中,如果 fOSC单位取MHz,则定时时间T的单位是s。,【例4.2】 假设晶振频率为12 MHz,所需定时时间为10 ms,计算“12时钟/机器周期”模式下定时器初值M。 将定时时间10 ms(即10 000 s)、晶振频率12 MHz代入(4-3)式,可得初值:,即定时器初值TH0为0D8H,TL0为0F0H。,当 位为1时,定时/计数器T0处
25、于计数状态,计数脉冲来自CPU的P3.4引脚。每来一个脉冲TL0加1。当TL0溢出时,TH0自动加1;当TH0也溢出时,计数器T0中断标志TF0位置1(即有效)。,2) 方式2,图4-9 定时/计数器T0(T1)方式2结构,由于方式2的计数长度为8位,因此定时时间T与初值M之间关系为:,(“12时钟/机器周期”模式),(“6时钟/机器周期”模式),显然,当晶振频率 fOSC 为12 MHz时,“12时钟/机器周期”模式下方式2的最长定时时间为:,3) 方式3,图4-10 定时/计数器T0方式3结构,图4-11 T0工作在方式3下T1的结构 (a) T1方式1;(b) T1方式2,4.3.3 定
26、时/计数器T2结构及控制,1. 定时/计数器T2的控制,图4-12 T2CON寄存器各位含义,图4-13 T2MOD寄存器各位含义,表4-2 定时/计数器T2工作方式,2. T2的工作方式 1) 下降沿触发自动重装初值16位定时或计数器,图4-14 下降沿触发自动重装初值16位定时/计数器T2结构,2) 外部电平控制重装方式,图4-15 外电平控制重装方式下的T2结构,3) 捕捉方式,图4-16 定时/计数器T2的捕捉方式,4) 可编程时钟输出方式,图4-17 时钟输出方式下的定时器T2结构,可见利用T2的时钟输出功能,在P1.0引脚获得方波信号精度高于软件定时方式获得的方波信号。,显然T2溢
27、出时间为 因此从P1.0引脚输出时钟信号频率为,【例4.3】 假设晶振频率为12 MHz,计算“12时钟/机器周期”模式下从P1.0引脚输出的方波信号频率范围。 方波信号频率与T2比较/捕捉寄存器RCAP2H、RCAP2L初值有关,当RCAP2H、RCAP2L初值为0FFFFH时,方波信号频率最大(3 MHz);当RCAP2H、RCAP2L初值为0000H时,方波信号频率最小(45.8 Hz)。 从图4-17可以看出:在时钟输出方式下,T2溢出时不置位TF2标志,但当外触发控制EXEN2位为1时,T2EX(P1.1)引脚由1变0(即P1.1的下降沿)EXF2标志置1,因此定时器T2工作于时钟输
28、出方式时,可把P1.1引脚作为下降沿触发的外中断(EXEN2作中断允许控制位;EXF2作中断有效标志)。 .,5) 串行口波特率发生器,图4-18 T2作为串行口波特率发生器的结构,在增强型MCS-51芯片中,当定时器T2控制器寄存器T2CON的TCLK位为1时,将改用定时器T2溢出信号的16分频作为串行口方式1和方式3的发送波特率(如果RCLK为0,则方式1、方式3的接收波特率还是由定时器T1产生);而当定时器T2控制器寄存器T2CON的RCLK位为1时,也改用定时器T2溢出信号的16分频作为串行口方式1和方式3的接收波特率。但值得注意的是,在“12时钟/机器周期”模式下把T2溢出率作为串行
29、口方式1、方式3的波特率发生器时,T2的计数脉冲是时钟信号的2分频,而不是12分频。因此,使用定时T2作为串行口方式1和方式3的波特率时,波特率与定时器T2初值C之间关系如下:,表4-3 定时器T2波特率与初值C之间关系,4.3.4 定时/计数器应用,【例4.4】 假设晶振频率为12 MHz,试利用定时/计数器T0的方式2,在P1.7引脚输出周期为200 s的方波。 分析:定时器工作方式2的最长定时时间为256 s,而方波周期为200 s,即方波高、低电平时间只有200 s/2,即100 s,可令T0工作于方式2,定时时间设为100 s,定时时间到对P1.7引脚锁存器取反,即获得周期为200
30、s的方波。,定时器T0初值M为:,参考程序如下: ORG 0000H LJMP MAIN; 跳到主程序入口 ORG 000BH LJMP CTC0; 定时器T0中断入口地址 ORG 100H MAIN: MOV SP, #4FH; 初始化堆栈指针SP MOV A, TMOD; 为了不影响定时/计数器T1的工作状态, 先读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零 ORL A, #0000 0010B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为10,即方式2,MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL
31、0, #9CH; 送初值 MOV TH0, #9CH; 送重装初值 SETB ET0; 允许定时器T0中断 SETB EA; 开中断 SETB TR0; 启动定时器T0 HERE:SJMP HERE; 循环等待,相当于虚拟主程序 ; 定时器T0的中断服务程序 CTC0: CPL P1.7 RETI,【例4.5】 假设晶振频率为12 MHz,试编写一程序,在P1.7引脚输出周期为2 s的方波。 分析:本例表面上与上例区别不大,只是方波周期长了,但我们知道当系统晶振频率为12 MHz时,即使定时/计数器工作在方式1,最长定时时间也不过65.536 ms,而目前需要在P1.7引脚上输出周期为2s(高
32、低电平时间为1s)的方波,属于超长定时问题,除了使用定时器功能外,还要使用软件计数方法。 要获得1s(即1000 ms)的定时时间,可使用定时器T0方式1,定时时间可设为50 ms,软件计数器初值为20。定时器T0溢出时,软件计数器减1,当软件计数器减到0时,就获得了1 s的时间。具体程序如下:,参考程序如下:,TIMECON DATA 28H; 把28H单元作为软件计数器 ORG 0000H LJMP MAIN; 跳到主程序入口 ORG 000BH LJMP CTC0; 定时器T0中断入口地址 ORG 100H MAIN: MOV SP, #4FH; 初始化堆栈指针SP MOV A, TMO
33、D; 为了不影响定时/计数器T1的工作状态, 先读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零 ORL A, #00000001B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为01,即方式1,MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL0, #0B0H; 送初值 MOV TH0, #3CH; 定时时间为50 ms(即50000 s), 初值为3CB0H SETB ET0; 允许定时器T0中断 SETB EA; 开中断 SETB TR0; 启动定时器T0 MOV TIMECON, #14H; 软件计数器初值
34、为14H(即20) HERE:SJMP HERE; 循环等待,相当于虚拟主程序 ; 定时器T0的中断服务程序,CTC0: MOV TL0, #0B0H; 重装定时器初值 MOV TH0, #3CH; 为了减少定时误差,进入中断服务后, 先重装定时器初值 DJNZ TIMECON, NEXT ; 软件计数器减1,不等于0,就返回 MOV TIMECON, #14H; 重装软件计数器初值 CPL P1.7; 对P1.7取反 NEXT: RETI,【例4.6】 系统晶振频率为12 MHz,试利用定时器T0在P1.6引脚上输出频率为1400 Hz的方波(持续时间为60 ms),然后不断检测P1.7引脚
35、状态,当P1.7引脚上存在负脉冲时,在负脉冲过后立即在P1.6引脚输出频率为2300 Hz的方波(持续时间也是60 ms),否则3 s后在P1.6引脚上输出频率为1400 Hz的方波(持续时间为60 ms)。 分析:本例涉及定时器重复使用问题,有一定的代表性。在单片机应用系统中往往需要多段长短不一的定时时间,而CPU内定时/计数器的个数有限,如MCS-51系列只有2个定时器。如果两个或两个以上的定时时间没有重叠,原则上就可以利用同一定时器现实(重新设置工作方式和定时器初值)。,方波频率为1400 Hz,则方波周期为1/1400 Hz,即714.28 s,高低电平时间为357.14 s。当T0工
36、作于方式2(自动重装初值的8位定时/计数器)时,最长定时时间为256 s,小于1400 Hz方波要求的定时时间,必须使用软件计数器。因此,可将定时时间设为119 s,软件计数器初值设为3,于是可获得3119(即357 s)的延迟时间,即方波周期为714 s,频率为1400.56 Hz,与实际值非常接近。 对于频率为2300 Hz的方波来说,周期为1/2300 Hz,即434.782 s,高低电平时间为217.391 s,小于方式2的最长定时时间256 s。因此,将定时时间设为217 s时,即可获得周期为434 s的方波(频率为1/434 s,即2304.147 Hz),误差也不大。,至于持续时
37、间,可用软件延迟方式获得。 在检测P1.7引脚状态期间,不能用软件延迟方式,需要重新初始化定时/计数器T0的工作方式,作为16位定时器使用。 参考程序如下:,X_TIME DATA 2AH ; 延迟时间参数X Y_TIME DATA 2BH ; 延迟时间参数Y;这两个单元确定的延迟时间为t TIME DATA 2CH ; 延迟时间计数器,总的延迟时间为Timet SINCON DATA 2DH ; 送1400 Hz时的计数器 SIN1400 BIT 00H ; 位地址00H作为1400 Hz方波标志,当sin1400为1时, 发1400 Hz ; 反之,发2300 Hz,ORG 0000H L
38、JMP MAIN; 跳到主程序入口 ORG 000BH LJMP CTC0; 定时器T0中断入口地址 ORG 100H MAIN: MOV SP, #4FH; 初始化堆栈指针SP ; 初始化定时器T0(工作在方式2) MOV A, TMOD; 为了不影响定时/计数器T1的工作状态, 先读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零 ORL A, #00000010B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为10,即方式2 MOV TMOD,A; 将工作方式控制字写入TMOD,; 发送1400Hz方波时定时器T0的初始化命令
39、 MOV TL0, #89H ; 送初值 MOV TH0, #89H ; 送重装初值,定时时间为119 s,初值为 89H,计数器初值为3 MOV SINCON, #03H ; 用SINCON单元存放计数初值(119*3=357 s),实际频率 ; 为1400.56 Hz SETB SIN1400 SETB ET0 ; 允许定时器T0中断 SETB EA ; 开中断 SETB TR0 ; 启动T0 ; 延迟60 ms MOV TIME, #06H,LOOP1: MOV X_TIME, #109 MOV Y_TIME, #45 LCALL DELAY ; 延迟10 ms DJNZ TIME, L
40、OOP1 CLR TR0 ; 延迟60 ms后停止 CLR P1.6; 将P1.6引脚置低电平 ; 重新初始化定时/计数器T0 MOV A, TMOD; 为了不影响定时/计数器T1的工作状态, 先读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零,ORL A, #00000001B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为01,即方式1 MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL0, #3CH; 送初值低8位 MOV TH0, #0B0H; 送初值高位,定时器初值为3CB0,即定时 时间为50 ms C
41、LR ET0 ; 将用查询方式 CLR TF0; 清除定时器T0的中断标志 SETB TR0 ; 启动T0 MOV TIME, #3CH; 软件计数器初值为3C,即60,LOOP2: JNB P1.7, MPLUS JNB TF0, LOOP2 MOV TL0, #3CH; 重装初值低8位 MOV TH0, #0B0H; 重装初值高位 CLR TF0 DJNZ TIME,LOOP2; 软件计数器减1 SJMP OUT1400,MPLUS: JB P1.7, OUT2300 JNB TF0, MPLUS MOV TL0, #3CH; 重装初值低8位 MOV TH0, #0B0H; 重装初值高位
42、CLR TF0 DJNZ TIME,MPLUS; 软件计数器减 SJMP OUT1400,OUT1400: MOV A, TMOD; 为了不影响定时/计数器T1的工作状态,先 读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零 ORL A, #00000010B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为10,即方式2 MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL0, #89H; 送初值 MOV TH0, #89H; 送重装初值 MOV SINCON, #03H SETB SIN1400 SETB ET0
43、; 允许定时器T0中断 SETB TR0 ; 启动T0 SJMP STOP,OUT2300: ; 发送2300 Hz方波时定时器T0的初始化命令 MOV A, TMOD; 为了不影响定时/计数器T1的工作状态,先读出TMOD ANL A, #0F0H; 与F0H相与,使高4位不变,低4位清零 ORL A, #00000010B; 由TR0控制计数器开和关,GATE位为0 ; 定时状态,即位为0,M1M0为10,即方式2 MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL0, #27H; 送初值 MOV TH0, #27H; 送重装初值,定时时间为217 s,初值为27H,实际频
44、率 ; 为2304 Hz CLR SIN1400 SETB TR0 STOP: ; 延迟60 ms MOV TIME, #06H,LOOP3: MOV X_TIME, #109 MOV Y_TIME, #45 LCALL DELAY ; 延迟10 ms DJNZ TIME, LOOP3 CLR TR0 ; 延迟60 ms后停止 CLR ET0 CLR EA END,; 定时器T0中断服务程序(产生1400/2300 Hz正弦波) CTC0: JNB SIN1400, SIN2300 ; 如果特征位为0,说明要发2300 Hz DJNZ SINCON, CTCEND MOV SINCON, #0
45、3H CPL P1.6 SJMP CTCEND SIN2300: CPL P1.6 CTCEND: RETI,; *通用延迟子程序* ; 延迟时间参数在2AH(Y)、2BH(x)单元中,总的延迟时间t ; t=(4y+2xy+10)T,其中T是机器周期。当晶振频率为12 MHz时,T=1 s ; 典型参数I:x=198,y=250时,延迟时间t=100 010 s,即近似100 ms ; 典型参数II:x=109,y=45时,延迟时间t=10 ms ; 子程序名称:Delay Delay: PUSH PSW CLR RS0 SETB RS1 ; 使用2区 MOV R7,Y_TIME ; 取延迟
46、时间参数Y DLOOP1: MOV R6,X_TIME ; 取延迟时间参数x DLOOP2: DJNZ R6,DLOOP2 DJNZ R7,DLOOP1 POP PSW RET,【例4.7】 利用定时/计数器T1门控信号GATE功能,测量引脚上正脉冲信号的宽度(单位为机器周期)。 从定时/计数器T1结构可以看出:当GATE位为1时,计数脉冲开关状态由TR1和 (即P3.3)引脚控制。因此,可令定时/计数器T1工作在方式1,并处于定时状态(即用频率稳定的时钟信号度量 引脚上正脉冲宽度),参考程序如下:,ORG 0000H LJMP MAIN; 跳到主程序入口 ORG 100H MAIN: MOV
47、 SP, #4FH; 初始化堆栈指针SP ; 初始化定时器T1(工作在方式1) MOV A, TMOD; 为了不影响定时/计数器T0的工作状态, 先读出TMOD,ANL A, #0FH; 与0FH相与,使高4位清零,低4位保持不变 ORL A, #10010000B; 由和TR1共同控制计数器开和关,GATE位为1 ; 定时状态,即位为0,M1M0为01,即方式1 MOV TMOD,A; 将工作方式控制字写入TMOD MOV TL1, #00H; 计数器初值为0 MOV TH1, #00H WAITL: JB P3.3, WAITL; 等P3.3引脚为低电平 SETB TR1; 当P3.3引脚
48、为低电平,即可启动计数器 WAITH: JNB P3.3, WAITH; 等待P3.3引脚变高电平 WAITHL: JB P3.3, WAITHL; 等待P3.3引脚正脉冲的下降沿 CLR TR1; 关闭计数器T1,【例4.8】 利用软件定时方式测量P3.3引脚脉冲信号的频率。 当被测脉冲信号频率较高(如数十kHz)时,不能通过测量信号周期方式求出信号频率(如例4.7所示),否则误差将很大。为此,可令定时器处于计数状态,结合软件定时方式,在指定时间内对外脉冲计数(被测脉冲信号从P3.3引脚输入)。 参考程序如下:,X_TIME DATA 2AH ; 延迟时间参数X Y_TIME DATA 2B
49、H ; 延迟时间参数Y;这两个单元确定的延迟时间为t TIME DATA 2CH ; 延迟时间计数器,总的延迟时间为Timet ORG 0000H LJMP MAIN ; 跳到主程序入口 ORG 100H,MAIN: MOV SP, #4FH; 初始化堆栈指针SP ; 初始化定时器T1(工作在方式1) MOV A, TMOD; 为了不影响定时/计数器T0的工作状态,先 读出TMOD ANL A, #0FH; 与0FH相与,使高4位清零,低4位保持不变 ORL A, #01010000B; 由TR1控制计数器开和关,GATE位为0 ; 计数状态,即位为1,M1M0为01,即方式1 MOV TMO
50、D,A; 将工作方式控制字写入TMOD MOV TL1, #00H; 计数器初值为0 MOV TH1, #00H CLR ET1; 用软件查询 MOV TIME, #5; 每10 ms计数一次,共进行5次,LOOP1: MOV X_TIME, #109; 初始化软件延迟时间参数 MOV Y_TIME, #45 SETB TR1; 启动计数器T1 LCALL DELAY ; 延迟10 ms CLR TR1; 停止计数 DJNZ TIME, LOOP1,至此,T1中的计数值就是50 ms内的脉冲个数。,4.4 串行通信系统,4.4.1 串行通信概念,图4-19 基本通信方式 (a) 并行通信;(b
51、) 串行通信,1. 串行通信的种类 同步通信是一种数据连续传输的串行通信方式。通信时,发送方把需要发送的多个字节数据和校验信息连接起来,组成数据块。发送时,发送方只需在数据块前插入12个特殊的同步字符,然后按特定速率逐位输出(发送)数据块内的各位数据。接收方在接收到特定的同步字符后,也按相同速率接收数据块内的各位数据。显然,在这种通信方式中,数据块内各字节数据之间没有间隔,传输效率高,但发送、接收双方必须保持同步(使用同一时钟信号),且数据块长度越大,对同步要求就越高。因此,同步通信设备复杂(发送方能自动插入同步字符,接收方能自动检测出同步字符,且发送、接收时钟相同,即除了数据线、地址线外,还
52、需要时钟信号线),成本高,一般只用在高速数字通信系统中。,典型的同步通信数据格式如下:,异步通信的特点是每次只传送一个字,每个字由起始位(规定为0电平)、数据位、奇偶校验位、停止位(规定为1电平)组成,典型的异步通信数据帧格式如下所示:,2. 波特率 在串行通信系统中常用波特率衡量通信的快慢,含义是每秒中传送的二进制数码的位数,单位是位/秒(b/s或Kb/s),简称“波特”。例如,两个异步串行通信设备之间每秒钟传送的信息量是240字节,如果一帧数据包含10位(1个起始位、8个数据位和1个停止位),则发送、接收波特率为: 240 b/s10位=2400 b/s=2400波特 一般异步通信波特率为
53、1109600,而同步通信波特率在56 Kb以上。在选择通信波特率时,不要盲目追高,以满足数据传输要求为原则,因为波特率越高,对发送、接收时钟信号频率的一致性要求就越高。,3. 串行通信数据传输方向,图4-20 数据传输方式 (a) 单工;(b) 半双工;(c) 全双工,4. 串行通信接口种类 根据串行通讯格式及约定(如同步方式、通讯速率、数据块格式等)不同,形成了许多串行通讯接口标准,如常见UART(串行异步通讯接口)、USB(通用串行总线接口)、I2C总线、SPI总线、485总线、CAN总线接口等。下面结合增强型MCS-51介绍UART接口及使用规则。,4.4.2 增强型MCS-51串行通
54、信口控制及初始化,图4-21 MCS-51串行口结构,1.串行口控制寄存器SCON,图4-22 SCON各位含义,表4-4 串行口工作方式,2. 波特率倍增选择 在MCS-51子系列中,串行口波特率与工作方式有关,对于方式0来说,串行输出/输入移位脉冲为时钟信号频率的12分频;在方式1、3中,波特率由T1溢出率和电源控制寄存器PCON的SMOD位决定;而在方式2中,波特率与时钟信号频率fOSC和电源控制寄存器PCON的SMOD位有关。即在方式1、2、3中,当SMOD位为1时,波特率是SMOD为0时的两倍(正因如此,PCON寄存器中的SMOD位被称为波特率倍增位)。 而在增强型MCS-51中,除
55、了可以使用T1溢出率的16或32分频作为串行口发送、接收波特率外,还可以使用定时器T2溢出率的16或32分频作为串行口发送或接收波特率。,3. 波特率选择 方式1、方式3波特率与定时器T1溢出率、SMOD1位关系如下:,当把定时器T1溢出率作为波特率发生器(即16分频器)的输入信号时,为了避免重装初值造成的定时误差,定时器T1最好工作在可自动重装初值的方式2,并禁止定时器T1中断。,而T1溢出率倒数就等于定时时间t,因此定时T1重装初值C与波特率之间关系为:,(T1计数器工作在12分频状态),(T1计数器工作在6分频状态),表4-5 常用波特率、晶振频率以及定时器T1重装初值C之间关系,不难看
56、出:如果选定的波特率对应的初值C不是整数,则实际波特率与标准值就存在偏差,例如当晶振频率为12 MHz,则标准波特率9600对应的初值C为252.745(SMOD1为0时的计算值),由于初值C只能取最接近计算值的整数,因此C取253(FDH)。而当C=253时,实际波特率为10417,与理论值相对误差为 , 约5.7%。 实践表明:当两个串行通信设备之间的波特率误差超过2.5%时,串行通信将无法进行,且通信速率越高,发送、接收波特率的允许误差范围就越小。因此,当单片机控制系统需要与PC机通信时,单片机控制系统的晶振频率fOSC往往不是整数(如6 MHz、12 MHz),而是某一特定值,如表中的
57、11.0592 MHz就是常用的一种晶振频率之一。,4.4.3 串行口工作方式及应用 1. 方式0 当串行口工作于方式0时,串行口本身相当于“并入串出”(发送状态)或“串入并出”(接收状态)的移位寄存器。8位串行数据b0b7依次从RDX (P3.0)引脚输出或输入,移位脉冲信号来自TXD (P3.1)引脚,输出/输入移位脉冲频率固定为系统时钟频率fOSC的12 分频(对于8XC5XX2芯片来说,在“6时钟/机器周期”模式下,移位脉冲频率是时钟频率fOSC的6分频),不可改变。,图4-23 利用串行口方式0扩展输出口,串行数据输出过程概括如下: 在发送中断标志TI为0(即无效)情况下,执行写串行
58、数据输出缓冲器SBUF指令(如MOV SBUF, A)即可将SBUF寄存器中内容由低位到高位依次输出到RDX引脚,同时TXD引脚输出移位脉冲,使外接的串行输入并行输出芯片逐一接收来自RDX引脚上的串行数据。当8位数据发送结束后,发送中断标志TI自动置1,输出数据(即SBUF寄存器内容)也就出现在74LS164芯片的并行输出端。这样在执行写SBUF寄存器操作后,可通过查询TI标志来确定发送过程是否完成。当然,在中断处于开放状态下(串行中断允许ES为1,中断允许EA为1),当TI有效时,将产生串行中断请求。不过值得注意是CPU响应串行中断后,不会自动清除TI,需要用“CLR TI”指令清除TI,以便输出新的串行数据。,参考程序如下:,MOV SCON, #00000000B; 定义串行工作方式 CLR TI; 清除发送中断标志 MOV SUBF, A; 输出串行数据 LOOP: JNB TI, LOOP; 等待一帧数据发送结束,当串行口工作于方式0时,在“并行输入串行输出”芯片,如74LS165配合下,即可通过串行口扩展MCS-51的输入口,其中MCS-51的RDX引脚接74LS165芯片的串行数据输出端,TXD引脚接74LS165芯片的移位脉冲CLK,如图4-24所示。,图4-24 利用串行口方式0扩展输入口,串行数据输入过程如下: 在接收中断标志RI为0(即无效,表明串行数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务平台运营培训合作协议
- 2025年综合类-儿科相关专业知识-儿科急救历年真题摘选带答案(5卷单选题100题)
- 2025年综合类-保险公估人考试-保险公估人的监管历年真题摘选带答案(5卷单选题100题)
- 2025年综合类-临床医学检验技术(士)-荧光免疫技术历年真题摘选带答案(5卷单选题100题)
- 2025年企业员工健康教育年度工作计划
- 高校结对帮扶计划细则
- 2025年旅游管理攻读博士学位期间拟开展的研究计划
- 输电线路监理质量通病防治措施
- 房地产造价咨询部门基本工作流程
- 交换环上素子模的深度剖析与理论拓展
- 会诊制度培训课件
- 广东省安全生产管理台账表格与说明
- 中建企业建筑工程项目管理目标责任书(范本)
- 【公开课】植物体的结构层次2024-2025学年人教版生物七年级上册
- 重症医学质量控制中心督查评价标准及评分细则
- 2024年广东省英语小升初模拟试卷与参考答案
- 心血管内科基础知识:综合试题及答案
- 复方口服避孕药临床应用中国专家共识
- 代收工程款授权委托书
- 国家开放大学专科《办公室管理》期末纸质考试第五大题案例分析总题库2025版
- 云南省昆明市官渡区2023-2024学年五年级下学期期末考试数学试题
评论
0/150
提交评论