《[工学]单片机第六章》由会员分享,可在线阅读,更多相关《[工学]单片机第六章(52页珍藏版)》请在金锄头文库上搜索。
1、第6章 MCS-51的定时/计数器,任务六 简易交通信号灯 6.1 定时/计数器结构与功能 6.2 定时/计数器相关寄存器 6.3 定时/计数器工作方式 6.4 定时/计数器的编程 6.5 定时/计数器应用,任务六 简易交通信号灯,任务目的 利用单片机的定时器,完成简易交通信号灯的程序设计,学会使用定时器的查询法编程_ 任务描述 用单片机的P0口控制6只LED,模拟东西向,南北向6只交通信号灯,当剩余时间为5S时绿灯闪亮,为3S时黄灯亮、25S时间到交通灯换向 1.电路原理图 学习板电路原理图见图6-1所示。 2.参考程序 FX BIT 00H ORG 0000H LJMP MAIN ORG
2、000BH ; 定时器T0中断入口地址,返回,下一页,任务六 简易交通信号灯,LJMP SFT0 ORG 0030 H MAIN : MOV TMOD , #01H ; 设置定时器为工作方式1 MOV TL0 , #0B0H ; 设定时器初值, 定时时间50ms MOV TH0 , #3CH MOV R6 , #0 ; 赋时序初值 MOV R7 , #10 ; 定时器运行次数, 10次, 定时0.5s SETB TR0 ; 启动定时器 SETB EA ; 开中断 SETB ET0 CLR FX SJMP $ SFT0 : MOV TL0 , #0B0H ; 真正的中断服务程序 .重新设置初值,
3、定时50ms,返回,上一页,下一页,任务六 简易交通信号灯,MOV TH0 , #3CH DJNZ R7 , RETN ; 延时够 0.5s吗? MOV R7 , #10 JB FX , E1 ; 判断通行的方向 MOV DPTR , #TAB ; 南北通行 N1: MOV A , R6 MOVC A , A+DPTR ; 查表, 取南北通行显示代码 MOV P0 , A ; 输出显示代码 INC R6 ; 下一个0.5s输出 CJNE R6 , #50 , RETN ; 25s显示完毕了吗 SETB FX ; 设置东西通行标志位 MOV R6 , #0 ; 赋时序初值,返回,上一页,下一页,
4、任务六 简易交通信号灯,RETI ; 中断返回 TAB:DB 7EH 7EH 7EH 7EH 7EH ; 南北向通行显示代码表 DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH DB 7EH 7EH 7EH 7EH 7EH ; 绿灯闪烁 DB 7EH 7EH 7EH 7EH 7EH
5、,返回,上一页,下一页,任务六 简易交通信号灯,TAB1: DB 0DBH 0DBH 0DBH 0DBH 0DBH ; 东西向通行显示代码表 DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH DB 0DBH 0DBH 0DBH 0DBH 0DBH ; 绿灯闪烁 END ; 汇编程序结束 3.程序仿真及烧录 把这段
6、程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。,返回,上一页,下一页,任务六 简易交通信号灯,把单片机插人实验板插座里,上电运行,观察运行结果。 4.程序分析 简易交通信号灯,也是按照一定的时序点亮、熄灭信号灯,因此也可以看成是一种彩灯控制器,表6-1中列出厂交通信号灯的时序,把它编制成一个表格,按照时序查表,输出,就可以实现交通信号灯的设计。 在测量控制系统中,常常要求有实时时钟来实现定时测控或延时动作,也会要求有计数器实现对外部事件计数,例如测电机转速、频率、脉冲个数等。在单片机应用系
7、统中,实现定时/计数,主要有软件延时和可编程定时/计数器2种方法。表62 (1)软件定时,让机器执行一个程序段,这个程序段本身没有具体的执行日的,通过正确的挑选指令和安排循环次数实现软件延时,由于执行每条指令都需要时间,执行这一段程序所需要的时间就是延时时间,这种软件定时占用CPU的执行时间,降低厂CPU的工作效率。例如前面帝节中多次用到的DELAY子程序,就是一个典型的软件定时的例子。,返回,上一页,下一页,任务六 简易交通信号灯,(2)可编程定时/计数器,它可以通过软件编程来确硬件定时/计数器的功能、运行以及停止,可以用软件确定定时时间,使用灵活方便,功能强大。而且硬件定时/计数器可以单独
8、运行,和CPU并行工作,有利于提高CPU的工作效率,因而得到广泛应用,大多数单片机内部都集成厂可编程硬件定时/计数器。MCS一51单片机内部有两个16位的定时/计数器TO和Tl。,返回,上一页,6.1 定时/计数器结构与功能,8051单片机内部有两个16位定时器/计数器,即定时/计数器T0和定时/计数器T1。它们都具有定时和计数功能,可用于定时或延时控制,对外部事件进行检测、计数等。其内部结构枢图如图6-2所示。 定时/计数器TO由特殊功能寄存器THO , TLO(字节地址分别为8CH和8AH)构成,THO为高8位,TLO为低8位。定时/计数器T1由特殊功能寄存器TH1 , TL1(字节地址分
9、别为8DH和8BH)构成,TH1为高8位,TL1为低8位。其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时器控制寄存器TCONo TMOD主要是用于选定定时/计数器的工作模式与工作方式,TCON主要是用于控制定时/计数器的启动和停止。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。,下一页,返回,6.1 定时/计数器结构与功能,定时/计数器从硬件电路上来说,就是一个16位的加法计数器,按照其计数脉冲的来源不同,分成两种工作模式:定时与计数。 当定时/计数器工作在定时方式时,输人的时钟脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可看作是对单片机机器周期的个数的计数器
10、,当晶体振荡器确定后,机器周期的时间也就确定厂,这样就实现厂定时功能。以12 MHz的晶振为例,一个机器周期就是1 us,这是在此晶振周期下最小的定时时间。,上一页,下一页,返回,6.1 定时/计数器结构与功能,当定时/计数器工作在计数方式时,外部事件是通过引脚TO ( P3.4)和T1(P3.5)输人的,外部脉冲的下降沿触发计数。当第一个机器周期采样到引脚P3.4 ( P3.5)为高电平,下一个机器周期为低电平时,采样到一个下降沿,计数器就加1。所以计数一次至少需要两个机器周期的时间,即外部计数脉冲的最高频率是晶振频率的1/24。例如选用12 MHz的晶振时,外部计数脉冲的最高频率是0.5
11、MHz。对外部信号的占空比无特殊要求,但为厂确保某给定电平在变化前至少被采样一次,则外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。,返回,上一页,6.2 定时/计数器相关寄存器,51系列单片机的定时/计数器是一种可编程部件,在定时/计数器开始工作之前,CPU必须将一些命令(称为控制字)写人该定时/计数器,这个过程称为定时/计数器的初始化。在初始化程序中,要将工作方式控制字写人定时方式寄存器TMOD,工作状态控制字(或相关位)写人控制寄存器TCONo 1.定时方式寄存器TMOD 特殊功能寄存器TMOD为定时/计数器的方式控制寄存器,占用的字节地址为89 H,不可以进行位寻址,如果要
12、定义定时/计数器的工作方式,需要采用字节操作指令赋值。该寄存器中每位的定义如下所示。其中高4位用于定时/计数器T1,低4位用于定时器/计数TO。,下一页,返回,6.2 定时/计数器相关寄存器,下面介绍与定时器/计数TO相关的TMOD的4低位。 (1) GATE门控位。 ( GATE ) = 0时,用软件使运行控制位TRO(定时/计数器控制寄存器TCON.4)置1来启动定时/计数器运行; ( GATE ) =1时,由TRO和外部中断引脚INTO ( P3.2)共同启动定时/计数器运行,只有当二者同时为1时才进行计数操作。 (2) c/T定时、计数模式选择位。 (C/T) =1时,为计数方式;计数
13、器对外部输人引脚TO ( P3.4)的外部脉冲的下降沿计数。 (C/T) =0时,为定时方式。,返回,上一页,下一页,6.2 定时/计数器相关寄存器,(3) M1, MO工作方式选择位,可通过软件设置选择定时/计数器四种工作方式,如表6-3所示。 2.定时器控制寄存器TCON TCON的字节地址为88H,可进行位寻址(位地址为88H一8FH),其具体各位定义如下。 其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下:,上一页,下一页,返回,6.2 定时/计数器相关寄存器,其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下: TFO , TFl分别为定时/计数器TO
14、, Tl的计数溢出标志位。 当计数器计数溢出时,该位置1。编程在使用查询方式时,此位作为状态位供CPU查询,查询后由软件清0;使用中断方式时,此位作为中断请求标志位,中断响应后由硬件自动清O。 TRO , TR1分别为定时器TO , Tl的运行控制位,可由软件置1或清O。 (TRO)或(TR1) =1,启动定时/计数器工作。 (TRO)或(TR1) = 0,停止定时/计数器工作。,返回,上一页,6.3 定时/计数器工作方式,定时/计数器可以通过特殊功能寄存器TMOD中的控制位C/T的设置来选择定时器方式或计数器方式;通过M1 MO两位的设置选择四种工作方式,分别为方式0、方式1、方式2和方式3
15、。 1.工作方式0 当M1 MO为00时,定时/计数器选定为方式0工作。在这种方式下,16位寄存器(由特殊功能寄存器TLO和THO组成)只用厂13位,TLO的高3位未用,由THO的8位和TLO低5位组成一个13位的定时/计数器,其最大的计数次数应为213次。如果单片机采用12 MHz晶振,机器周期为1 us,则该定时器的最大定时时间为23 ,s。方式0并没有充分利用16位计数寄存器的计数范围,这是为厂与MCS-48系列单片机兼容而设计的。工作方式0的逻辑结构图如图6-3所示),下一页,返回,6.3 定时/计数器工作方式,图6-3中,C/T为定时/计数选择位,C/T = 0 , T0 (T1)为
16、定时器,定时信号为振荡周期12分频后的脉冲;C/T=1, TO (T1)为计数器,计数信号来自引脚TO ( T1)的外部信号。 当(GATE) =0时,只要TCON中的启动控制位TRO为1,由TLO和THO组成的13位计数器就开始计数。 当(GATE) = 1时,由TRO ( TR1)与外部引脚INTO (INT1)即P3.2(P3.3)共同控制定时/计数器的工作。此时不仅(TRO) =1,而且还需要INTO(INTl)引脚1才能使计数器工作,即INTO ( INT1)当由0变1时,开始计数,由1变0时,停止计数,这样可以用来测量在INTO (INT1)端的脉冲高电平的宽度。,上一页,下一页,返回,6.3 定时/计数器工作方式,当13位计数器加1到全为1后,再加1就会产生溢出,溢出使TCON的溢出标志位TFO自动置1,向CPU申请中断,同时计数器THO (8位)TLO(低5位)变为全0,如果要循环定时,必须要用软件重新装人初值。 2.工作方式1 当M 1 MO为O1时,定时器选定为方式1工作。在这种工作方式下,由特殊功能寄存器TLO和THO组成一个16位的定时/计数器,其最大的计数次数应为 次。如果单片机采用12 MHz晶振,则该定时器的最大定时时间为 us。工作方式1的逻辑结构图如图6-4所示。除厂计数位数不同外,方式1与方式0的工作过程相同。,