版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章MCS-51的定时/计数器任务六
简易交通信号灯6.1
定时/计数器结构与功能6.2
定时/计数器相关寄存器6.3
定时/计数器工作方式6.4
定时/计数器的编程6.5
定时/计数器应用第6章MCS-51的定时/计数器任务六简易交通信号灯1任务六简易交通信号灯任务目的利用单片机的定时器,完成简易交通信号灯的程序设计,学会使用定时器的查询法编程_任务描述用单片机的P0口控制6只LED,模拟东西向,南北向6只交通信号灯,当剩余时间为5S时绿灯闪亮,为3S时黄灯亮、25S时间到交通灯换向1.电路原理图学习板电路原理图见图6-1所示。2.参考程序FXBIT00HORG0000HLJMPMAINORG000BH;定时器T0中断入口地址返回下一页任务六简易交通信号灯任务目的返回下一页2任务六简易交通信号灯LJMPSFT0ORG0030HMAIN:MOVTMOD,#01H;设置定时器为工作方式1MOVTL0,#0B0H;设定时器初值,定时时间50msMOVTH0,#3CHMOVR6,#0;赋时序初值MOVR7,#10;定时器运行次数,10次,定时0.5sSETBTR0;启动定时器SETBEA;开中断SETBET0CLRFXSJMP$SFT0:MOVTL0,#0B0H;真正的中断服务程序.重新设置初值,定时50ms返回上一页下一页任务六简易交通信号灯LJMPSFT0返回上一页下3任务六简易交通信号灯MOVTH0,#3CHDJNZR7,RETN;延时够0.5s吗?MOVR7,#10JBFX,E1;判断通行的方向MOVDPTR,#TAB;南北通行N1:MOVA,R6MOVCA,@A+DPTR;查表,取南北通行显示代码MOVP0,A;输出显示代码INCR6;下一个0.5s输出CJNER6,#50,RETN;25s显示完毕了吗SETBFX;设置东西通行标志位MOVR6,#0;赋时序初值返回上一页下一页任务六简易交通信号灯MOVTH0,#3CH返回上4任务六简易交通信号灯RETI;中断返回TAB:DB7EH7EH7EH7EH7EH;南北向通行显示代码表DB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EH;绿灯闪烁DB7EH7EH7EH7EH7EH返回上一页下一页任务六简易交通信号灯RETI;中断返回返回上一页下5任务六简易交通信号灯TAB1:DB0DBH0DBH0DBH0DBH0DBH;东西向通行显示代码表DB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBH;绿灯闪烁END;汇编程序结束3.程序仿真及烧录把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。返回上一页下一页任务六简易交通信号灯TAB1:DB0DBH0DBH6任务六简易交通信号灯把单片机插人实验板插座里,上电运行,观察运行结果。4.程序分析简易交通信号灯,也是按照一定的时序点亮、熄灭信号灯,因此也可以看成是一种彩灯控制器,表6-1中列出厂交通信号灯的时序,把它编制成一个表格,按照时序查表,输出,就可以实现交通信号灯的设计。在测量控制系统中,常常要求有实时时钟来实现定时测控或延时动作,也会要求有计数器实现对外部事件计数,例如测电机转速、频率、脉冲个数等。在单片机应用系统中,实现定时/计数,主要有软件延时和可编程定时/计数器2种方法。表6-2(1)软件定时,让机器执行一个程序段,这个程序段本身没有具体的执行日的,通过正确的挑选指令和安排循环次数实现软件延时,由于执行每条指令都需要时间,执行这一段程序所需要的时间就是延时时间,这种软件定时占用CPU的执行时间,降低厂CPU的工作效率。例如前面帝节中多次用到的DELAY子程序,就是一个典型的软件定时的例子。返回上一页下一页任务六简易交通信号灯把单片机插人实验板插座里,上电运行,7任务六简易交通信号灯(2)可编程定时/计数器,它可以通过软件编程来确硬件定时/计数器的功能、运行以及停止,可以用软件确定定时时间,使用灵活方便,功能强大。而且硬件定时/计数器可以单独运行,和CPU并行工作,有利于提高CPU的工作效率,因而得到广泛应用,大多数单片机内部都集成厂可编程硬件定时/计数器。MCS一51单片机内部有两个16位的定时/计数器TO和Tl。返回上一页任务六简易交通信号灯(2)可编程定时/计数器,它可以通过86.1定时/计数器结构与功能8051单片机内部有两个16位定时器/计数器,即定时/计数器T'0和定时/计数器T1。它们都具有定时和计数功能,可用于定时或延时控制,对外部事件进行检测、计数等。其内部结构枢图如图6-2所示。定时/计数器TO由特殊功能寄存器THO,TLO(字节地址分别为8CH和8AH)构成,THO为高8位,TLO为低8位。定时/计数器T1由特殊功能寄存器TH1,TL1(字节地址分别为8DH和8BH)构成,TH1为高8位,TL1为低8位。其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时器控制寄存器TCONoTMOD主要是用于选定定时/计数器的工作模式与工作方式,TCON主要是用于控制定时/计数器的启动和停止。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。下一页返回6.1定时/计数器结构与功能8051单片机内部有两个1696.1定时/计数器结构与功能定时/计数器从硬件电路上来说,就是一个16位的加法计数器,按照其计数脉冲的来源不同,分成两种工作模式:定时与计数。当定时/计数器工作在定时方式时,输人的时钟脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可看作是对单片机机器周期的个数的计数器,当晶体振荡器确定后,机器周期的时间也就确定厂,这样就实现厂定时功能。以12MHz的晶振为例,一个机器周期就是1us,这是在此晶振周期下最小的定时时间。上一页下一页返回6.1定时/计数器结构与功能定时/计数器从硬件电路上来说106.1定时/计数器结构与功能当定时/计数器工作在计数方式时,外部事件是通过引脚TO(P3.4)和T1(P3.5)输人的,外部脉冲的下降沿触发计数。当第一个机器周期采样到引脚P3.4(P3.5)为高电平,下一个机器周期为低电平时,采样到一个下降沿,计数器就加1。所以计数一次至少需要两个机器周期的时间,即外部计数脉冲的最高频率是晶振频率的1/24。例如选用12MHz的晶振时,外部计数脉冲的最高频率是0.5MHz。对外部信号的占空比无特殊要求,但为厂确保某给定电平在变化前至少被采样一次,则外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。返回上一页6.1定时/计数器结构与功能当定时/计数器工作在计数方式116.2定时/计数器相关寄存器51系列单片机的定时/计数器是一种可编程部件,在定时/计数器开始工作之前,CPU必须将一些命令(称为控制字)写人该定时/计数器,这个过程称为定时/计数器的初始化。在初始化程序中,要将工作方式控制字写人定时方式寄存器TMOD,工作状态控制字(或相关位)写人控制寄存器TCONo1.定时方式寄存器TMOD特殊功能寄存器TMOD为定时/计数器的方式控制寄存器,占用的字节地址为89H,不可以进行位寻址,如果要定义定时/计数器的工作方式,需要采用字节操作指令赋值。该寄存器中每位的定义如下所示。其中高4位用于定时/计数器T1,低4位用于定时器/计数TO。下一页返回6.2定时/计数器相关寄存器51系列单片机的定时/计数器126.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时,为计数方式;计数器对外部输人引脚TO(P3.4)的外部脉冲的下降沿计数。(C/T)=0时,为定时方式。返回上一页下一页6.2定时/计数器相关寄存器返回上一页下一页136.2定时/计数器相关寄存器(3)M1,MO—工作方式选择位,可通过软件设置选择定时/计数器四种工作方式,如表6-3所示。2.定时器控制寄存器TCONTCON的字节地址为88H,可进行位寻址(位地址为88H一8FH),其具体各位定义如下。其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下:上一页下一页返回6.2定时/计数器相关寄存器(3)M1,MO—工作方146.2定时/计数器相关寄存器其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下:TFO,TFl—分别为定时/计数器TO,Tl的计数溢出标志位。当计数器计数溢出时,该位置1。编程在使用查询方式时,此位作为状态位供CPU查询,查询后由软件清0;使用中断方式时,此位作为中断请求标志位,中断响应后由硬件自动清O。TRO,TR1—分别为定时器TO,Tl的运行控制位,可由软件置1或清O。(TRO)或(TR1)=1,启动定时/计数器工作。(TRO)或(TR1)=0,停止定时/计数器工作。返回上一页6.2定时/计数器相关寄存器其中低4位与外部中断有关,在156.3定时/计数器工作方式定时/计数器可以通过特殊功能寄存器TMOD中的控制位C/T的设置来选择定时器方式或计数器方式;通过M1MO两位的设置选择四种工作方式,分别为方式0、方式1、方式2和方式3。1.工作方式0当M1MO为00时,定时/计数器选定为方式0工作。在这种方式下,16位寄存器(由特殊功能寄存器TLO和THO组成)只用厂13位,TLO的高3位未用,由THO的8位和TLO低5位组成一个13位的定时/计数器,其最大的计数次数应为213次。如果单片机采用12MHz晶振,机器周期为1us,则该定时器的最大定时时间为2}3},s。方式0并没有充分利用16位计数寄存器的计数范围,这是为厂与MCS-48系列单片机兼容而设计的。工作方式0的逻辑结构图如图6-3所示)下一页返回6.3定时/计数器工作方式定时/计数器可以通过特殊功能寄166.3定时/计数器工作方式图6-3中,C/T为定时/计数选择位,C/T=0,T0
(T1)为定时器,定时信号为振荡周期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定时/计数器工作方式图6-3中,C/T为定时/计数176.3定时/计数器工作方式当13位计数器加1到全为1后,再加1就会产生溢出,溢出使TCON的溢出标志位TFO自动置1,向CPU申请中断,同时计数器THO(8位)TLO(低5位)变为全0,如果要循环定时,必须要用软件重新装人初值。2.工作方式1当M1MO为O1时,定时器选定为方式1工作。在这种工作方式下,由特殊功能寄存器TLO和THO组成一个16位的定时/计数器,其最大的计数次数应为次。如果单片机采用12MHz晶振,则该定时器的最大定时时间为us。工作方式1的逻辑结构图如图6-4所示。除厂计数位数不同外,方式1与方式0的工作过程相同。下一页返回上一页6.3定时/计数器工作方式当13位计数器加1到全为1后,186.3定时/计数器工作方式3.工作方式2当M1MO为10时,定时器选定为方式2工作,方式2是能自动重置初值的8位定时/计数器。方式0、方式I若用于循环重复定时计数时(如产生连续脉冲信号),每次计数已满溢出时0,寄存器全部为0,第二次计数还得重新装人计数初值。这样不仅在编程时麻烦,而且影响定时时间精度。而方式2有自动恢复初值(初值自动再装人)功能,避免厂上述缺陷,适合用作较精确的定时脉冲信号发生器。在这种方式下,8位寄存器TLO作为计数器,TLO和THO装人相同的初值,当计数溢出时,在置1溢出中断标志位TFO的同时,THO返回下一页上一页6.3定时/计数器工作方式3.工作方式2返回下一页上一页196.3定时/计数器工作方式的初值自动重新装人TLOo在这种工作方式下其最大的计数次数应为
次。如果单片机采用12MHz晶振,则该定时器的最大定时时间为us。工作方式2的逻辑结构图如图6-5所示。4.工作方式3当M1MO为11时,定时器选定为方式3工作。方式3只适用于定时/计数器TO,定时/计数器T1如果设定工作方式3,那么T1是停止工作的。定时/计数器TO分为两个独立的8位计数器:TLO和THO,其逻辑结构如图6-6所示,TLO使用TO的状态控制位C/T,GATE,TRO,TO引脚和INTO引脚,除厂仅用8位寄存器TLO外,其功能和操作与方式0、方式1完全相同,可定时亦可计数。返回上一页下一页6.3定时/计数器工作方式的初值自动重新装人TLOo在这206.3定时/计数器工作方式而THO被固定为一个8位定时器(不能作外部计数方式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断源。方式3为定时/计数器TO增加了一个8位定时器。一般情况下,当定时器T1用作串行口的波特率发生器时,定时/计数器TO才工作在方式3。当定时器TO处于工作方式3时,定时/计数器T1可定为方式0、方式1和方式2,作为串行口的波特率发生器或不需要中断的场合。如果定时/计数器TO处于工作方式3,定时器T1工作在方式2,我们看到51单片机有厂3个定时器。返回上一页6.3定时/计数器工作方式而THO被固定为一个8位定时器216.4定时/计数器的编程1.初值的计算MCS-51的定时/计数器是加法计数器,也就是说,当运行于定时器方式时,每隔一个机器周期定时器自动加1,当运行于计数器方式时,每当引脚出现下降沿,计数器自动加1。无论是作定时用还是计数用,当TO或T1加满溢出后,定时器回零,标志位自动置to显然当计数的初值是0的时候,计数次数最大,定时时间也最长。随着初值的增大,计数次数逐渐减少。要想确定计数次数和定时时间,必须要确定初值。那么,怎样确定定时或计数初值(又称为时间常数),以便达到要求的定时时间或计数值呢?下面作简要介绍。设TO(或T1)运行于计数器方式,其加满溢出的值就是计数器的模,显然返回下一页6.4定时/计数器的编程1.初值的计算返回下一页226.4定时/计数器的编程计数初值+计数次数=模计数次数=模一计数初值
(6-1)TO(或T1)运行于定时器方式,其实质就是对机器周期计数,故定时时间=(模一计数初值)x机器周期(6-2)定时/计数器的4种工作方式的模是不相同的,应用时需要具体计算。(1)工作方式O。由于工作方式。是13位定时器,其模为213-8192计数计算公式:计数次数=8192一计数初值定时计算公式:定时时间=〔8192一计数初值)x机器周期返回上一页下一页6.4定时/计数器的编程计数初值+计数次数=模返回上一页236.4定时/计数器的编程(2)工作方式1。由于工作方式。是16位定时器,其模为2}6-65536计数计算公式:计数次数=65536-计数初值定时计算公式:定时时间=(65536-计数初值)x机器周期(3)工作方式2和工作方式3。由于工作方式2和工作方式3是8位定时器,其模为2}=256计数计算公式:计数次数=256-计数初值定时计算公式:定时时间=(256-计数初值)x机器周期2.查询方式编程定时/计数器在查询方式下的编程步骤如下:(1)关中断;(EA,ETO或ET1清0)。(2)设置工作方式和工作模式(TMOD初始化)。返回上一页下一页6.4定时/计数器的编程(2)工作方式1。返回上一页下一246.4定时/计数器的编程(3)设置定时/计数初值;(THO,TLo或TH1,TL1赋初值)。(4)启动定时/计数;(TR0或者TR1置1)。(5)查询TF0或TF1及相关处理。3.中断方式编程定时/计数器在中断方式下的编程步骤如下:(1)设置中断优先级(设置PTO或PTl)。(2)设置工作方式和工作模式(TMOD初始化)。(3)设置定时/计数初值;(TH0,TL0或TH1,TL1赋初值)。(4)启动定时/计数;(TRO或者TR1置1)。(5)开中断;(EA,ETO或ET1置1)。(6)编写定时/计数中断处理程序。返回上一页6.4定时/计数器的编程(3)设置定时/计数初值;(TH256.5定时/计数器应用定时/计数器是单片机应用系统中的重要部件,其工作方式的灵活应用对提高编程技巧、减轻CPU负担和简化外围电路有很大益处。本节将通过应用实例,说明定时/计数器的使用方法。使用定时/计数器时必须计算初值,前面已经介绍厂定时/计数器通过软件对TMOD的M1M0位赋值可以有四种工作方式,其中方式3应用比较少,现在以方式0、方式1和方式2为例,介绍MCS-51单片机定时/计数器的应用。[例6-1]假设系统时钟频率采用12MHz,定时/计数器TO工作在方式。,实现由P1.0引脚输出100Hz的方波。分析:返回下一页6.5定时/计数器应用定时/计数器是单片机应用系统中的重266.5定时/计数器应用(1)首先计算定时时间。100Hz方波周期为10ms,高低电平各5ms。因此定时器每定时5ms,将Pl.0取反一次,即可以得到频率是100Hz的方波信号。(2)计算计数初值。由于工作方式0是13位定时器,其模为213-8192定时时间=(8192一计数初值)X机器周期计数初值=8192一定时时间Xfosc/12=8192一5000X12/12=0C78H=1100011110008由于工作方式0是13位定时器,而且是使用的THO的全部8位和TLO的低5位。因此并不能把OC78H直接赋值给THO和TLO,应当做如下处理:返回上一页下一页6.5定时/计数器应用(1)首先计算定时时间。100H276.5定时/计数器应用把计算出来的计数初值换算成二进制数,取低5位,在其高位扩展3个0,补足8位;把整个二进制数在高位补0,补足16位,于是把OC78H处理得到:01100011,00011000B,高8位赋给THO,低8位赋给TLO。最后装人的初值为:
(THO)=63H,(TLO)=18H。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位定时器模式,C/T=0;工作方式0,M1M0的组合为00,与外部脉冲无关,GATE为。。(4)编写程序如下(查询方式):返回上一页下一页6.5定时/计数器应用把计算出来的计数初值换算成二进制数286.5定时/计数器应用ORG0000HLJMPMAINMAIN:CLREA;关中断MOVTM0D,#00H;设置T0的工作模式与工作方式MOVTH0,#63H;装计数初值MOVTL0,#18HSETBTR0;启动定时器WAIT:JNBTF0,WAIT;查询T0溢出中断标志位MOVTL0,#63HCLRTF0;清零标志位,为下次定时做准备CPLP1.0;输出方波SJMPWAITEND返回上一页下一页6.5定时/计数器应用ORG0000H返回上一页下296.5定时/计数器应用由于工作方式0是为厂兼容MCS-48单片机而设的,且其计算初值复杂,所以在实际应用中,一般不用方式0,而采用方式1。[例6-2]假设系统时钟频率采用6MHz,定时/计数器T1工作在方式1,实现由P1.0引脚输出100Hz的方波。分析:(1)首先计算定时时间。100Hz方波周期为10ms,高低电平各5ms。因此定时器每定时5ms,将P1.0取反一次,即可以得到频率是100Hz的方波信号。(2)计算计数初值。由于工作方式1是16位定时器,其模为216=65536定时时间=(65536-计数初值)x机器周期返回上一页下一页6.5定时/计数器应用由于工作方式0是为厂兼容MCS-4306.5定时/计数器应用计数初值=65536-定时时间xfosc/12=65536-5000x6/12
=0F63CH可知装人的初值为:(TH11=0F6H,(TLl)=3CH(3)设置TMOD。由于是对T1的工作方式进行选择,故此需要设置高4位。定时器模式,C/T=0;工作方式1,M1M0的组合为O1,与外部脉冲无关,GATE为O。(4)编写程序如下(中断方式):ORGOOOOHLJMPMAIN
ORG001BH;T1中断人口地址LJMPSFT1ORG0030H返回上一页下一页6.5定时/计数器应用计数初值=316.5定时/计数器应用MAIN:MOVTMOD,#10H;设置T1的工作模式与工作方式MOVTH1,#0F6H;装计数初值MOVTL1,#3CHSETBEA;开中断SETBET1SETBTR1;启动定时器WAIT:SJMJPWAIT;等待定时时间到ORG0100HSFT1:MOVTL1,#0F6H;时间到,进入中断服务程序,重装初值MOVTH1,#3CHCPLP1.0;输出方波RETI;中断返回END返回上一页下一页6.5定时/计数器应用MAIN:MOVTMOD,326.5定时/计数器应用[例6-3]假设系统时钟频率采用6MHz,定时/计数器TO工作在方式1,实现连接在P0.0引脚的LED以亮0.5s,灭0.5s的速度闪烁。分析:(1)首先计算定时时间。定时器每定时0.5s,将P0.0取反一次,即可以使LED以亮0.5s,灭0.5s的速度闪烁。(2)计算计数初值。由于工作方式1是16位定时器,其模为216=65536
定时时间=(65536-计数初值)x机器周期计数初值=65536-定时时间xfosc/12=65536-500000x6/12=65536-250000<0返回上一页下一页6.5定时/计数器应用[例6-3]假设系统时钟频率采用6336.5定时/计数器应用需要的计数初值小于0,说明最大定时时间比需要的定时时间还要小,只能采用多次定时的方法实现要求。可以一次定时100ms,5次就实现定时0.5s的要求。于是:计数初值=65536-定时时间xfosc/12=65536-100000x6/12=15536=3CBOH可知装人的初值为:(THO)
=3CH,(TLO)=0BOH。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位。定时器模式,C/T=0;工作方式1,M1M0的组合为O1,与外部脉冲无关,GATE为0。(4)编写程序如下(中断方式):返回上一页下一页6.5定时/计数器应用需要的计数初值小于0,说明最大定时346.5定时/计数器应用ORG0000HLJMPMAINORG000BH;T0中断入口地址LJMPSFT0ORG0030HMAIN:MOVTMOD,#01H;设置T0的工作模式与工作方式MOVTH0,#3CH;装计数初值MOVTL0,#0B0HMOVR7,#5;设置定时次数SETBEA;开中断SETBTR0;启动定时器WAIT:SJMPWAIT;等待定时时间到返回上一页下一页6.5定时/计数器应用ORG0000H返回上一页下一356.5定时/计数器应用ORG0100HSFT0:MOVTL0,#0F6H;时间到,进入中断服务程序,重装初值MOVTH0,#3CHDJNZR7,RETN;定时次数够5次吗?MOVR7,#5;够5次,重新设置定时次数CPLP1.0;输出方波RETN:RETI;中断返回END【例6-4J假设系统时钟频率为12MHz,试编程测试INTO引脚出现的高电平的赛度.将测得佰的高字节存R7.低字节R6。返回上一页下一页6.5定时/计数器应用ORG0100H返回上一页下366.5定时/计数器应用分析:门控位(ATE为1时,允许外部输人电平控制启动定时器。利用这个特性可以测量外部输人脉冲的宽度。由于外部脉冲出现在INTO引脚,所以使用定时器TO。工作于定时器模式,C/T=0;为了能测量尽量宽的脉冲,所以定时器TO应工作在方式1,M1M0的组合为01。计数初值为0。编写程序如下:(查询方式)ORGOOOOHLJMPMAINORG0030HMAIN:CLREA;关中断MOVTM0D,#09H;设置T0的工作模式与工作方式MOVTH0,#0JBP3.2,$;等P3.2变低返回上一页下一页6.5定时/计数器应用分析:门控位(ATE为1时,允许外376.5定时/计数器应用SETBTR0;启动定时器JNBP3.2,$;等P3.2高电平到来,以启动计数JBP3.2,$;定时计数CLRTR0;停止定时计数MOVR6,TL0;将脉冲宽度存入R7,R6中MOVR7,TH0;SJMP$END这种方案被测脉冲的宽度最大为65535个机器周期。由于靠软件启动和停止计数,有一定的测量误差。其可能的最大误差与相关指令的执行时间有关。[例6-5]编写计数一个出现在TO(P3.4)引脚的脉冲信号个数的程序,计数2000个脉冲以后在P1.0输出低电平。分析:(1)需要使用计数工作模式,对出现在TO(P3.4)引脚的信号计数2000个脉冲。返回上一页下一页6.5定时/计数器应用SETBTR0;启动定时386.5定时/计数器应用(2)计算计数初值。由于工作方式1是16位计数器,其模为216=65536计数次数=模一计数初值计数初值=65536-计数次数=65536-2000
=63536=OF830H可知装人的初值为:(THO)=0F8H,(TL0)=30H。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位。计数器模式,C/T=1;工作方式1,M1M0的组合为O1;与外部脉冲无关,GATE为O。返回上一页下一页6.5定时/计数器应用(2)计算计数初值。返回上一页下一396.5定时/计数器应用ORG0000HLJMPMAINORG0030HMAIN:CLREA;关中断MOVTM0D,#05H;设置T0的工作模式与工作方式MOVTH0,#0F8H;装计数初值MOVTL0,#30HSETBTROWAIT:JNBTF0,WAIT;查询T0溢出中断标志位CLRTF0;清零标志位,为下次定时做准备CLRP1.0;P1.0输出低电平SJMP$;程序结束,原地等待END返回上一页下一页6.5定时/计数器应用ORG0000H返回上一页下一406.5定时/计数器应用[例6-6]假设系统时钟频率采用6MHz,定时/计数器TO工作在方式2,实现连接在P1.0引脚上输出周期为200us的方波。分析:(1)首先计算定时时间。周期为200us的方波,高低电平各100us。因此定时器每定时100us,将P1.0取反一次,即可以得到周期是200us的方波信号。(2)计算计数初值。由于工作方式2是8位定时器,其模为28=256定时时间=(65536-计数初值)x机器周期计数初值=65536-定时时间xfosc/12=256-100x6/12
=0CEH返回上一页下一页6.5定时/计数器应用[例6-6]假设系统时钟频率采用6416.5定时/计数器应用由于工作方式2是自动重装的定时器,所以THO和TLO要装人相同的初值。装人的初值为:(TH1)=0CEH,(TLl)-30CEH。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位。定时器模式,C/T=0;工作方式1,M1MO的组合为10,与外部脉冲无关,GATE为O。(4)编写程序如下(中断方式):ORG0000HLJMP00BH;T1中断入口地址LJMPSFT1ORG0030H MAIN:MOVTMOD,#02H;设置T1的工作模式与工作方式返回上一页下一页6.5定时/计数器应用由于工作方式2是自动重装的定时器,426.5定时/计数器应用MOVTH1,#0CEH;装计数初值MOVTL1,#0CEHSETBEA;开中断SETBET0SETBTR0;启动定时器WAIT:SJMPWAIT;等待定时时间到SFT1:CPLP1.0;输出方波RETI;中断返回END由于工作方式2是自动重装的定时器,所以在中断服务程序中THO和TLO不需要重新装入。返回上一页6.5定时/计数器应用MOVTH1,#0CEH;43图6-1学习板电路原理图返回图6-1学习板电路原理图返回44图6-2定时/计数器结构框图返回图6-2定时/计数器结构框图返回45图6-3定时/计数器方式0(13位计数器)逻辑结构框图返回图6-3定时/计数器方式0(13位计数器)逻辑结构框46图6-4定时/计数器方式1(16位计数器)逻辑结构框图返回图6-4定时/计数器方式1(16位计数器)逻辑结构框图返47图6-5定时/计数器方式2(8位计数器)逻辑结构框图返回图6-5定时/计数器方式2(8位计数器)逻辑结构框图返48图6-6定时/计数器方式3逻辑结构框图返回图6-6定时/计数器方式3逻辑结构框图返回49表6-1东西停止、南北诵行的显示代码返回表6-1东西停止、南北诵行的显示代码返回50表6-2南北停止、东西诵行的显示代码返回表6-2南北停止、东西诵行的显示代码返回51表6-3工作方式洗择返回表6-3工作方式洗择返回52第6章MCS-51的定时/计数器任务六
简易交通信号灯6.1
定时/计数器结构与功能6.2
定时/计数器相关寄存器6.3
定时/计数器工作方式6.4
定时/计数器的编程6.5
定时/计数器应用第6章MCS-51的定时/计数器任务六简易交通信号灯53任务六简易交通信号灯任务目的利用单片机的定时器,完成简易交通信号灯的程序设计,学会使用定时器的查询法编程_任务描述用单片机的P0口控制6只LED,模拟东西向,南北向6只交通信号灯,当剩余时间为5S时绿灯闪亮,为3S时黄灯亮、25S时间到交通灯换向1.电路原理图学习板电路原理图见图6-1所示。2.参考程序FXBIT00HORG0000HLJMPMAINORG000BH;定时器T0中断入口地址返回下一页任务六简易交通信号灯任务目的返回下一页54任务六简易交通信号灯LJMPSFT0ORG0030HMAIN:MOVTMOD,#01H;设置定时器为工作方式1MOVTL0,#0B0H;设定时器初值,定时时间50msMOVTH0,#3CHMOVR6,#0;赋时序初值MOVR7,#10;定时器运行次数,10次,定时0.5sSETBTR0;启动定时器SETBEA;开中断SETBET0CLRFXSJMP$SFT0:MOVTL0,#0B0H;真正的中断服务程序.重新设置初值,定时50ms返回上一页下一页任务六简易交通信号灯LJMPSFT0返回上一页下55任务六简易交通信号灯MOVTH0,#3CHDJNZR7,RETN;延时够0.5s吗?MOVR7,#10JBFX,E1;判断通行的方向MOVDPTR,#TAB;南北通行N1:MOVA,R6MOVCA,@A+DPTR;查表,取南北通行显示代码MOVP0,A;输出显示代码INCR6;下一个0.5s输出CJNER6,#50,RETN;25s显示完毕了吗SETBFX;设置东西通行标志位MOVR6,#0;赋时序初值返回上一页下一页任务六简易交通信号灯MOVTH0,#3CH返回上56任务六简易交通信号灯RETI;中断返回TAB:DB7EH7EH7EH7EH7EH;南北向通行显示代码表DB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EHDB7EH7EH7EH7EH7EH;绿灯闪烁DB7EH7EH7EH7EH7EH返回上一页下一页任务六简易交通信号灯RETI;中断返回返回上一页下57任务六简易交通信号灯TAB1:DB0DBH0DBH0DBH0DBH0DBH;东西向通行显示代码表DB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBHDB0DBH0DBH0DBH0DBH0DBH;绿灯闪烁END;汇编程序结束3.程序仿真及烧录把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。返回上一页下一页任务六简易交通信号灯TAB1:DB0DBH0DBH58任务六简易交通信号灯把单片机插人实验板插座里,上电运行,观察运行结果。4.程序分析简易交通信号灯,也是按照一定的时序点亮、熄灭信号灯,因此也可以看成是一种彩灯控制器,表6-1中列出厂交通信号灯的时序,把它编制成一个表格,按照时序查表,输出,就可以实现交通信号灯的设计。在测量控制系统中,常常要求有实时时钟来实现定时测控或延时动作,也会要求有计数器实现对外部事件计数,例如测电机转速、频率、脉冲个数等。在单片机应用系统中,实现定时/计数,主要有软件延时和可编程定时/计数器2种方法。表6-2(1)软件定时,让机器执行一个程序段,这个程序段本身没有具体的执行日的,通过正确的挑选指令和安排循环次数实现软件延时,由于执行每条指令都需要时间,执行这一段程序所需要的时间就是延时时间,这种软件定时占用CPU的执行时间,降低厂CPU的工作效率。例如前面帝节中多次用到的DELAY子程序,就是一个典型的软件定时的例子。返回上一页下一页任务六简易交通信号灯把单片机插人实验板插座里,上电运行,59任务六简易交通信号灯(2)可编程定时/计数器,它可以通过软件编程来确硬件定时/计数器的功能、运行以及停止,可以用软件确定定时时间,使用灵活方便,功能强大。而且硬件定时/计数器可以单独运行,和CPU并行工作,有利于提高CPU的工作效率,因而得到广泛应用,大多数单片机内部都集成厂可编程硬件定时/计数器。MCS一51单片机内部有两个16位的定时/计数器TO和Tl。返回上一页任务六简易交通信号灯(2)可编程定时/计数器,它可以通过606.1定时/计数器结构与功能8051单片机内部有两个16位定时器/计数器,即定时/计数器T'0和定时/计数器T1。它们都具有定时和计数功能,可用于定时或延时控制,对外部事件进行检测、计数等。其内部结构枢图如图6-2所示。定时/计数器TO由特殊功能寄存器THO,TLO(字节地址分别为8CH和8AH)构成,THO为高8位,TLO为低8位。定时/计数器T1由特殊功能寄存器TH1,TL1(字节地址分别为8DH和8BH)构成,TH1为高8位,TL1为低8位。其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时器控制寄存器TCONoTMOD主要是用于选定定时/计数器的工作模式与工作方式,TCON主要是用于控制定时/计数器的启动和停止。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。下一页返回6.1定时/计数器结构与功能8051单片机内部有两个16616.1定时/计数器结构与功能定时/计数器从硬件电路上来说,就是一个16位的加法计数器,按照其计数脉冲的来源不同,分成两种工作模式:定时与计数。当定时/计数器工作在定时方式时,输人的时钟脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可看作是对单片机机器周期的个数的计数器,当晶体振荡器确定后,机器周期的时间也就确定厂,这样就实现厂定时功能。以12MHz的晶振为例,一个机器周期就是1us,这是在此晶振周期下最小的定时时间。上一页下一页返回6.1定时/计数器结构与功能定时/计数器从硬件电路上来说626.1定时/计数器结构与功能当定时/计数器工作在计数方式时,外部事件是通过引脚TO(P3.4)和T1(P3.5)输人的,外部脉冲的下降沿触发计数。当第一个机器周期采样到引脚P3.4(P3.5)为高电平,下一个机器周期为低电平时,采样到一个下降沿,计数器就加1。所以计数一次至少需要两个机器周期的时间,即外部计数脉冲的最高频率是晶振频率的1/24。例如选用12MHz的晶振时,外部计数脉冲的最高频率是0.5MHz。对外部信号的占空比无特殊要求,但为厂确保某给定电平在变化前至少被采样一次,则外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。返回上一页6.1定时/计数器结构与功能当定时/计数器工作在计数方式636.2定时/计数器相关寄存器51系列单片机的定时/计数器是一种可编程部件,在定时/计数器开始工作之前,CPU必须将一些命令(称为控制字)写人该定时/计数器,这个过程称为定时/计数器的初始化。在初始化程序中,要将工作方式控制字写人定时方式寄存器TMOD,工作状态控制字(或相关位)写人控制寄存器TCONo1.定时方式寄存器TMOD特殊功能寄存器TMOD为定时/计数器的方式控制寄存器,占用的字节地址为89H,不可以进行位寻址,如果要定义定时/计数器的工作方式,需要采用字节操作指令赋值。该寄存器中每位的定义如下所示。其中高4位用于定时/计数器T1,低4位用于定时器/计数TO。下一页返回6.2定时/计数器相关寄存器51系列单片机的定时/计数器646.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时,为计数方式;计数器对外部输人引脚TO(P3.4)的外部脉冲的下降沿计数。(C/T)=0时,为定时方式。返回上一页下一页6.2定时/计数器相关寄存器返回上一页下一页656.2定时/计数器相关寄存器(3)M1,MO—工作方式选择位,可通过软件设置选择定时/计数器四种工作方式,如表6-3所示。2.定时器控制寄存器TCONTCON的字节地址为88H,可进行位寻址(位地址为88H一8FH),其具体各位定义如下。其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下:上一页下一页返回6.2定时/计数器相关寄存器(3)M1,MO—工作方666.2定时/计数器相关寄存器其中低4位与外部中断有关,在5.2节已详细介绍,高4位的功能如下:TFO,TFl—分别为定时/计数器TO,Tl的计数溢出标志位。当计数器计数溢出时,该位置1。编程在使用查询方式时,此位作为状态位供CPU查询,查询后由软件清0;使用中断方式时,此位作为中断请求标志位,中断响应后由硬件自动清O。TRO,TR1—分别为定时器TO,Tl的运行控制位,可由软件置1或清O。(TRO)或(TR1)=1,启动定时/计数器工作。(TRO)或(TR1)=0,停止定时/计数器工作。返回上一页6.2定时/计数器相关寄存器其中低4位与外部中断有关,在676.3定时/计数器工作方式定时/计数器可以通过特殊功能寄存器TMOD中的控制位C/T的设置来选择定时器方式或计数器方式;通过M1MO两位的设置选择四种工作方式,分别为方式0、方式1、方式2和方式3。1.工作方式0当M1MO为00时,定时/计数器选定为方式0工作。在这种方式下,16位寄存器(由特殊功能寄存器TLO和THO组成)只用厂13位,TLO的高3位未用,由THO的8位和TLO低5位组成一个13位的定时/计数器,其最大的计数次数应为213次。如果单片机采用12MHz晶振,机器周期为1us,则该定时器的最大定时时间为2}3},s。方式0并没有充分利用16位计数寄存器的计数范围,这是为厂与MCS-48系列单片机兼容而设计的。工作方式0的逻辑结构图如图6-3所示)下一页返回6.3定时/计数器工作方式定时/计数器可以通过特殊功能寄686.3定时/计数器工作方式图6-3中,C/T为定时/计数选择位,C/T=0,T0
(T1)为定时器,定时信号为振荡周期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定时/计数器工作方式图6-3中,C/T为定时/计数696.3定时/计数器工作方式当13位计数器加1到全为1后,再加1就会产生溢出,溢出使TCON的溢出标志位TFO自动置1,向CPU申请中断,同时计数器THO(8位)TLO(低5位)变为全0,如果要循环定时,必须要用软件重新装人初值。2.工作方式1当M1MO为O1时,定时器选定为方式1工作。在这种工作方式下,由特殊功能寄存器TLO和THO组成一个16位的定时/计数器,其最大的计数次数应为次。如果单片机采用12MHz晶振,则该定时器的最大定时时间为us。工作方式1的逻辑结构图如图6-4所示。除厂计数位数不同外,方式1与方式0的工作过程相同。下一页返回上一页6.3定时/计数器工作方式当13位计数器加1到全为1后,706.3定时/计数器工作方式3.工作方式2当M1MO为10时,定时器选定为方式2工作,方式2是能自动重置初值的8位定时/计数器。方式0、方式I若用于循环重复定时计数时(如产生连续脉冲信号),每次计数已满溢出时0,寄存器全部为0,第二次计数还得重新装人计数初值。这样不仅在编程时麻烦,而且影响定时时间精度。而方式2有自动恢复初值(初值自动再装人)功能,避免厂上述缺陷,适合用作较精确的定时脉冲信号发生器。在这种方式下,8位寄存器TLO作为计数器,TLO和THO装人相同的初值,当计数溢出时,在置1溢出中断标志位TFO的同时,THO返回下一页上一页6.3定时/计数器工作方式3.工作方式2返回下一页上一页716.3定时/计数器工作方式的初值自动重新装人TLOo在这种工作方式下其最大的计数次数应为
次。如果单片机采用12MHz晶振,则该定时器的最大定时时间为us。工作方式2的逻辑结构图如图6-5所示。4.工作方式3当M1MO为11时,定时器选定为方式3工作。方式3只适用于定时/计数器TO,定时/计数器T1如果设定工作方式3,那么T1是停止工作的。定时/计数器TO分为两个独立的8位计数器:TLO和THO,其逻辑结构如图6-6所示,TLO使用TO的状态控制位C/T,GATE,TRO,TO引脚和INTO引脚,除厂仅用8位寄存器TLO外,其功能和操作与方式0、方式1完全相同,可定时亦可计数。返回上一页下一页6.3定时/计数器工作方式的初值自动重新装人TLOo在这726.3定时/计数器工作方式而THO被固定为一个8位定时器(不能作外部计数方式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断源。方式3为定时/计数器TO增加了一个8位定时器。一般情况下,当定时器T1用作串行口的波特率发生器时,定时/计数器TO才工作在方式3。当定时器TO处于工作方式3时,定时/计数器T1可定为方式0、方式1和方式2,作为串行口的波特率发生器或不需要中断的场合。如果定时/计数器TO处于工作方式3,定时器T1工作在方式2,我们看到51单片机有厂3个定时器。返回上一页6.3定时/计数器工作方式而THO被固定为一个8位定时器736.4定时/计数器的编程1.初值的计算MCS-51的定时/计数器是加法计数器,也就是说,当运行于定时器方式时,每隔一个机器周期定时器自动加1,当运行于计数器方式时,每当引脚出现下降沿,计数器自动加1。无论是作定时用还是计数用,当TO或T1加满溢出后,定时器回零,标志位自动置to显然当计数的初值是0的时候,计数次数最大,定时时间也最长。随着初值的增大,计数次数逐渐减少。要想确定计数次数和定时时间,必须要确定初值。那么,怎样确定定时或计数初值(又称为时间常数),以便达到要求的定时时间或计数值呢?下面作简要介绍。设TO(或T1)运行于计数器方式,其加满溢出的值就是计数器的模,显然返回下一页6.4定时/计数器的编程1.初值的计算返回下一页746.4定时/计数器的编程计数初值+计数次数=模计数次数=模一计数初值
(6-1)TO(或T1)运行于定时器方式,其实质就是对机器周期计数,故定时时间=(模一计数初值)x机器周期(6-2)定时/计数器的4种工作方式的模是不相同的,应用时需要具体计算。(1)工作方式O。由于工作方式。是13位定时器,其模为213-8192计数计算公式:计数次数=8192一计数初值定时计算公式:定时时间=〔8192一计数初值)x机器周期返回上一页下一页6.4定时/计数器的编程计数初值+计数次数=模返回上一页756.4定时/计数器的编程(2)工作方式1。由于工作方式。是16位定时器,其模为2}6-65536计数计算公式:计数次数=65536-计数初值定时计算公式:定时时间=(65536-计数初值)x机器周期(3)工作方式2和工作方式3。由于工作方式2和工作方式3是8位定时器,其模为2}=256计数计算公式:计数次数=256-计数初值定时计算公式:定时时间=(256-计数初值)x机器周期2.查询方式编程定时/计数器在查询方式下的编程步骤如下:(1)关中断;(EA,ETO或ET1清0)。(2)设置工作方式和工作模式(TMOD初始化)。返回上一页下一页6.4定时/计数器的编程(2)工作方式1。返回上一页下一766.4定时/计数器的编程(3)设置定时/计数初值;(THO,TLo或TH1,TL1赋初值)。(4)启动定时/计数;(TR0或者TR1置1)。(5)查询TF0或TF1及相关处理。3.中断方式编程定时/计数器在中断方式下的编程步骤如下:(1)设置中断优先级(设置PTO或PTl)。(2)设置工作方式和工作模式(TMOD初始化)。(3)设置定时/计数初值;(TH0,TL0或TH1,TL1赋初值)。(4)启动定时/计数;(TRO或者TR1置1)。(5)开中断;(EA,ETO或ET1置1)。(6)编写定时/计数中断处理程序。返回上一页6.4定时/计数器的编程(3)设置定时/计数初值;(TH776.5定时/计数器应用定时/计数器是单片机应用系统中的重要部件,其工作方式的灵活应用对提高编程技巧、减轻CPU负担和简化外围电路有很大益处。本节将通过应用实例,说明定时/计数器的使用方法。使用定时/计数器时必须计算初值,前面已经介绍厂定时/计数器通过软件对TMOD的M1M0位赋值可以有四种工作方式,其中方式3应用比较少,现在以方式0、方式1和方式2为例,介绍MCS-51单片机定时/计数器的应用。[例6-1]假设系统时钟频率采用12MHz,定时/计数器TO工作在方式。,实现由P1.0引脚输出100Hz的方波。分析:返回下一页6.5定时/计数器应用定时/计数器是单片机应用系统中的重786.5定时/计数器应用(1)首先计算定时时间。100Hz方波周期为10ms,高低电平各5ms。因此定时器每定时5ms,将Pl.0取反一次,即可以得到频率是100Hz的方波信号。(2)计算计数初值。由于工作方式0是13位定时器,其模为213-8192定时时间=(8192一计数初值)X机器周期计数初值=8192一定时时间Xfosc/12=8192一5000X12/12=0C78H=1100011110008由于工作方式0是13位定时器,而且是使用的THO的全部8位和TLO的低5位。因此并不能把OC78H直接赋值给THO和TLO,应当做如下处理:返回上一页下一页6.5定时/计数器应用(1)首先计算定时时间。100H796.5定时/计数器应用把计算出来的计数初值换算成二进制数,取低5位,在其高位扩展3个0,补足8位;把整个二进制数在高位补0,补足16位,于是把OC78H处理得到:01100011,00011000B,高8位赋给THO,低8位赋给TLO。最后装人的初值为:
(THO)=63H,(TLO)=18H。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位定时器模式,C/T=0;工作方式0,M1M0的组合为00,与外部脉冲无关,GATE为。。(4)编写程序如下(查询方式):返回上一页下一页6.5定时/计数器应用把计算出来的计数初值换算成二进制数806.5定时/计数器应用ORG0000HLJMPMAINMAIN:CLREA;关中断MOVTM0D,#00H;设置T0的工作模式与工作方式MOVTH0,#63H;装计数初值MOVTL0,#18HSETBTR0;启动定时器WAIT:JNBTF0,WAIT;查询T0溢出中断标志位MOVTL0,#63HCLRTF0;清零标志位,为下次定时做准备CPLP1.0;输出方波SJMPWAITEND返回上一页下一页6.5定时/计数器应用ORG0000H返回上一页下816.5定时/计数器应用由于工作方式0是为厂兼容MCS-48单片机而设的,且其计算初值复杂,所以在实际应用中,一般不用方式0,而采用方式1。[例6-2]假设系统时钟频率采用6MHz,定时/计数器T1工作在方式1,实现由P1.0引脚输出100Hz的方波。分析:(1)首先计算定时时间。100Hz方波周期为10ms,高低电平各5ms。因此定时器每定时5ms,将P1.0取反一次,即可以得到频率是100Hz的方波信号。(2)计算计数初值。由于工作方式1是16位定时器,其模为216=65536定时时间=(65536-计数初值)x机器周期返回上一页下一页6.5定时/计数器应用由于工作方式0是为厂兼容MCS-4826.5定时/计数器应用计数初值=65536-定时时间xfosc/12=65536-5000x6/12
=0F63CH可知装人的初值为:(TH11=0F6H,(TLl)=3CH(3)设置TMOD。由于是对T1的工作方式进行选择,故此需要设置高4位。定时器模式,C/T=0;工作方式1,M1M0的组合为O1,与外部脉冲无关,GATE为O。(4)编写程序如下(中断方式):ORGOOOOHLJMPMAIN
ORG001BH;T1中断人口地址LJMPSFT1ORG0030H返回上一页下一页6.5定时/计数器应用计数初值=836.5定时/计数器应用MAIN:MOVTMOD,#10H;设置T1的工作模式与工作方式MOVTH1,#0F6H;装计数初值MOVTL1,#3CHSETBEA;开中断SETBET1SETBTR1;启动定时器WAIT:SJMJPWAIT;等待定时时间到ORG0100HSFT1:MOVTL1,#0F6H;时间到,进入中断服务程序,重装初值MOVTH1,#3CHCPLP1.0;输出方波RETI;中断返回END返回上一页下一页6.5定时/计数器应用MAIN:MOVTMOD,846.5定时/计数器应用[例6-3]假设系统时钟频率采用6MHz,定时/计数器TO工作在方式1,实现连接在P0.0引脚的LED以亮0.5s,灭0.5s的速度闪烁。分析:(1)首先计算定时时间。定时器每定时0.5s,将P0.0取反一次,即可以使LED以亮0.5s,灭0.5s的速度闪烁。(2)计算计数初值。由于工作方式1是16位定时器,其模为216=65536
定时时间=(65536-计数初值)x机器周期计数初值=65536-定时时间xfosc/12=65536-500000x6/12=65536-250000<0返回上一页下一页6.5定时/计数器应用[例6-3]假设系统时钟频率采用6856.5定时/计数器应用需要的计数初值小于0,说明最大定时时间比需要的定时时间还要小,只能采用多次定时的方法实现要求。可以一次定时100ms,5次就实现定时0.5s的要求。于是:计数初值=65536-定时时间xfosc/12=65536-100000x6/12=15536=3CBOH可知装人的初值为:(THO)
=3CH,(TLO)=0BOH。(3)设置TMOD。由于是对TO的工作方式进行选择,故此需要设置低4位。定时器模式,C/T=0;工作方式1,M1M0的组合为O1,与外部脉冲无关,GATE为0。(4)编写程序如下(中断方式):返回上一页下一页6.5定时/计数器应用需要的计数初值小于0,说明最大定时866.5定时/计数器应用ORG0000HLJMPMAINORG000BH;T0中断入口地址LJMPSFT0ORG0030HMAIN:MOVTMOD,#01H;设置T0的工作模式与工作方式MOVTH0,#3CH;装计数初值MOVTL0,#0B0HMOVR7,#5;设置定时次数SETBEA;开中断SETBTR0;启动定时器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年重庆市泸州市单招职业适应性考试模拟测试卷附答案解析
- 2023年驻马店幼儿师范高等专科学校单招职业适应性考试题库附答案解析
- 2025年常州信息职业技术学院单招职业倾向性测试题库附答案解析
- 2024年西安科技大学高新学院单招职业倾向性考试模拟测试卷附答案解析
- 2023年重庆交通职业学院单招职业倾向性测试题库附答案解析
- 2024年鹤壁汽车工程职业学院单招职业技能考试模拟测试卷附答案解析
- 2025年湖南科技职业学院单招职业倾向性测试模拟测试卷附答案解析
- 2023年浙江越秀外国语学院单招职业倾向性考试题库附答案解析
- 2025年宁夏工业职业学院单招职业技能测试题库附答案解析
- 2025年湖南省永州市单招职业适应性考试模拟测试卷附答案解析
- 2025年秋人教版(2024)初中美术七年级上册期末知识点复习卷及答案
- 2025年高校行政面试题及答案
- 调车服务合同范本
- 2026年计算机四级(Linux工程师实务)考试题及答案
- 雨课堂学堂在线学堂云《English for Presentations at International Medical Conferences》单元测试考核答案
- 形势与政策(吉林大学)智慧树知到答案2024年吉林大学
- FreeCAD从入门到综合实战
- 药房药品安全管理月检查表
- 下潘格庄金矿开发前景分析校正版
- 运输合同普通版
- 某燃气热电有限公司设备招标文件
评论
0/150
提交评论