单片机定时器计数器_第1页
单片机定时器计数器_第2页
单片机定时器计数器_第3页
单片机定时器计数器_第4页
单片机定时器计数器_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5.1 定时器的结构及工作原理5.2 定时器的TMOD和TCON寄存器5.3 定时器的工作方式 5.3.1 方式0 5.3.2 方式1 5.3.3 方式2 5.3.4 方式35.4 定时器的编程和应用1基本知识基本知识定时器定时器/ /计数器简介计数器简介 1 1计数概念计数概念 同学们选班长时,要投票,然后统计选票,同学们选班长时,要投票,然后统计选票,常用的方法是画常用的方法是画“正正”,每个,每个“正正”号五号五划,代表五票,最后统计划,代表五票,最后统计“正正”号的个数号的个数即可,这就是计数。单片机有两个定时即可,这就是计数。单片机有两个定时/ /计数器计数器T0T0和和T1T1,都

2、可对外部输入脉冲计数。,都可对外部输入脉冲计数。 2 2计数器的容量计数器的容量 我们用一个瓶子盛水,水一滴滴地滴我们用一个瓶子盛水,水一滴滴地滴入瓶中,水滴不断落下,瓶的容量是入瓶中,水滴不断落下,瓶的容量是有限的,过一段时间之后,水就会逐有限的,过一段时间之后,水就会逐渐变满,再滴就会溢出。单片机中的渐变满,再滴就会溢出。单片机中的计数器也一样,计数器也一样,T0T0和和T1T1这两个计数器这两个计数器分别是由两个分别是由两个8 8位的位的RAMRAM单元组成的,单元组成的,即每个计数器都是即每个计数器都是1616位的计数器,最位的计数器,最大的计数量是大的计数量是6553665536。

3、3. 3. 定时定时一个钟表,秒针走一个钟表,秒针走6060次,就是次,就是1 1分钟,分钟,所以时间就转化为秒针走的次数,也就所以时间就转化为秒针走的次数,也就是计数的次数,可见,计数的次数和时是计数的次数,可见,计数的次数和时间有关。只要计数脉冲的间隔相等,则间有关。只要计数脉冲的间隔相等,则计数值就代表了时间,即可实现定时。计数值就代表了时间,即可实现定时。秒针每一次走动的时间是秒针每一次走动的时间是1 1秒,所以秒秒,所以秒针走针走6060次,就是次,就是6060秒,即秒,即1 1分钟。分钟。因此,单片机中的定时器和计数器是一因此,单片机中的定时器和计数器是一个东西,只不过计数器是记录

4、的外界发个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供生的事情,而定时器则是由单片机提供一个非常稳定的计数源。一个非常稳定的计数源。 4. 4. 溢出溢出上面我们举的例子,水滴满瓶子后,上面我们举的例子,水滴满瓶子后,再滴就会溢出,流到桌面上。单片机再滴就会溢出,流到桌面上。单片机计数器溢出后将使得计数器溢出后将使得TF0TF0变为变为“1”1”,一旦一旦TF0TF0由由0 0变成变成1 1,就是产生了变化,就是产生了变化,就会引发事件,就会申请中断。就会引发事件,就会申请中断。 5. 5. 任意定时及计数的方法任意定时及计数的方法计数器的容量是16位,也就是最大的计数值

5、到65536,计数计到65536就会产生溢出。如果计数值要小于65536,怎么办呢?一个空的瓶子,要1万滴水滴进去才会满,我们在开始滴水之前就先放入一些水,就不需要10000滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴满。在单片机中,我们也采用类似的方法,称为“预置数”的方法,我们要计1000,那就先放进64536,再来1000个脉冲,不就到了65536了吗?定时也是如此。 6 6单片机定时器单片机定时器/ /计数器的结构计数器的结构组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。定时器T0和T1各由两个8位

6、特殊功能寄存器TH0、TL0、TH1、TL1构成。工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;单片机复位时,两个寄存器的所有位都被清0。8两个可编程的定时器/计数器T1、T0。每个定时器内部结构实际上就是一个可编程的加法计数器,由编程来设置它工作在定时状态还是计数状态。两种工作模式: (1) 计数器工作模式就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时,计数器(TH0,TL0或TH1,TL1)的值增1。计数的最高频率一般为振荡

7、频率的1/24。Why?(2) 定时器工作模式也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1,每个机器周期=12个振荡周期,因此计数频率为振荡频率的1/12。所以定时时间=计数值机器周期。4种工作方式 (方式0-方式3) 。1C/T=10当控制信号 定时器工作在定时方式;加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器计满溢出; 因为 ,即一个计数脉冲的周期就是一个机器周期;计数器计数的是机器周期脉冲个数。从而实现定时。当控制信号 定时器工作在计数方式;加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1

8、,直到计时器计满溢出;Tx Tx THxTHxTFxTFxTLxTLxTRxTRxINTxINTx定时定时计数计数0f0/12ff 控制信号控制信号K K“1 1”启动,计数器运行;启动,计数器运行;“0 0”停止,计数器停止;停止,计数器停止;定时器定时器/ /计数器原理框图计数器原理框图加加1 1计数器计数器0/12ff0/12ff控制信号K可以控制计数器的“启动”和“停止”,K = TRx(INTx+GATE)11 TCONTCON(88H88H)在每个机器周期的S5P2期间采样检测引脚输入电平。若前一个机器周期采样值为“1”,后一个机器周期采样值为“0”,则计数器加1。新的计数值在检测

9、到输入引脚电平发生“1”到“0”的负跳变(下降沿)后,于下一个机器周期的S3P1期间装入计数器中。由于CPU需要两个机器周期来识别一个“1”到“0”的跳变信号,所以最高的计数频率为振荡周期的1/24。12P P1 1P P2 2S S1 1振荡周期振荡周期状态周期状态周期机器周期机器周期机器周期机器周期指令周期指令周期XTALXTAL2 2(OSC)(OSC)S S2 2S S3 3S S4 4S S5 5S S6 6S S1 1S S2 2S S4 4S S5 5S S3 3S S6 6P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1

10、1P P1 1P P1 1P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 213定时/计数器对输入信号的要求1.外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。2.输入信号的高、低电平至少要分别保持一个机器周期。如图所示,图中Tcy为机器周期。可编程定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1 实现。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定好的工作方式

11、独立工作,不再占用CPU,只有在计数器计满溢出时才向CPU申请中断,占用CPU。由此可见,定时器是单片机中工作效率高且应用灵活的部件。148051单片机定时器主要有几个特殊功能寄存器组成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:设置定时器的工作方式;TCON:控制定时器的启动和停止;TH0和TL0 :存放定时器T0的初值或计数结果; TH0存放高8位,TL0 存放低8位;TH1和TL1 :存放定时器T1的初值或计数结果; TH1存放高8位,TL1 存放低8位;15168位分为两组,高位分为两组,高4位控制位控制T1,低,低4位控制位控制T0。(1) GATE 门控位门控位

12、 0: 以以TRX (X=0,1) 来启动定时器来启动定时器/计数器运行。计数器运行。1: 用外中断引脚用外中断引脚 (INT0*或或INT1*) 上的高电平上的高电平和和TRX来启来启动定时器动定时器/计数器运行。计数器运行。(4)TMOD无位地址,不能位寻址。无位地址,不能位寻址。(5)复位时,复位时,TMOD所有位均为所有位均为“0”。(3) C/T* 计数器模式和定时器模式选择位计数器模式和定时器模式选择位0: 定时器模式。定时器模式。 1: 计数器模式。计数器模式。(2) M1、M0 工作方式选择位工作方式选择位 M1 M0 工工 作作 方方 式式 0 0 方式方式0,13位定时器位

13、定时器/计数器。计数器。 0 1方式方式1,16位定时器位定时器/计数器。计数器。 1 0 方式方式2,8位常数自动重新装载位常数自动重新装载 1 1 方式方式3,仅适用于,仅适用于T0,低4位与外部中断有关,后面介绍。高4位的功能如下: (1) TF1、TF0 计数溢出标志位 定时器T0或T1计数溢出时,由硬件自动将此位置“1”;TFx可以由程序查询,也是定时中断的请求源;(2) TR1、TR0 计数运行控制位 TRx=1: 启动定时器/计数器工作 TRx=0: 停止定时器/计数器工作 18MCS-51单片机的定时器/计数器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:

14、(1)对TMOD赋值,以确定定时器的工作模式;(2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;(3)根据需要,对IE置初值,开放定时器中断;(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。19初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0: M为213,模式1: M为216,模式2和3: M为28)20例如:机器周期为例如:机器周期为1s 1s 时,时, 若

15、工作在模式若工作在模式0 0,则最大定时值为,则最大定时值为:2:213131s =8.192ms1s =8.192ms 若工作在模式若工作在模式1,1,则最大定时值为则最大定时值为: : 2 216161s =65.536ms1s =65.536msMCS-51的定时器T0有4种工作方式:即:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作方式:即:方式0,方式1,方式2。215.2.1 方式0 M1、M0设置为00 ,为13位计数器,以T1为例,其框图如下:22计数脉冲输入加1计数器TH1 D12 D11 D10 D9 D8 D7 D6 D5TL1 D4 D3 D2 D1

16、 D023n在这种方式下,在这种方式下,16位寄存器位寄存器TH1和和TL1只用只用13位,位,由由TH1的的8位和位和TL1的低的低5位组成。位组成。TL1的高的高3位不定。位不定。n当当TL1的低的低5位计数溢出时,向位计数溢出时,向TH1进位。而进位。而TH1计计数溢出时,则向中断标志位数溢出时,则向中断标志位TF1进位(即硬件将进位(即硬件将TF1置置1),并请求中断。),并请求中断。n可通过查询可通过查询TF1是否置是否置“1”或考察中断是否发生来或考察中断是否发生来判定定时器判定定时器T1的操作完成与否。的操作完成与否。当C/T=0时,为定时工作模式,开关接到振荡器的12分频器输出

17、上,计数器对机器周期脉冲计数。其定时时间为:(213-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时时间为(213-0)(1/12)12us=8.191ms当C/T=1时,为计数工作模式,开关与外部引脚T1(P3.5)接通,计数器对来自外部引脚的输入脉冲计数。当外部信号发生负跳变时计数器加1。24GATE控制定时器Tx(T1或T0)的条件:(1) 当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。TRx=1;计数启动;TRx=0;计数停止;(2) 当GATE=1时, “

18、与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRxINTx),当且仅当TRx=1且INTx=1(高电平)时,计数启动;否则,计数停止。255.3.2 方式1 M1、M0=01,为16位的计数器,除位数外,其他与方式0相同。其定时时间为:(216-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时时间为(216-0)(1/12)12us=65.536ms265.3.3 方式2 M1、M0=10 ,为自动恢复初值的8位计数器,等效框图如下: TLx作为8位计数器,THx作为重置初值的缓冲器。 27THx作为常数缓冲器作为常数缓冲器,当,当TLx计数溢出时,在置

19、计数溢出时,在置“1”溢出标志溢出标志TFx的同时,还的同时,还自动的将自动的将THx中的初值送至中的初值送至TLx,使,使TLx从初值开从初值开始重新计数。定时器始重新计数。定时器/计数器的方式计数器的方式2工作过程如图工作过程如图 (x=0, 1) 。优点:方式0和方式1用于循环重复定时或计数时,在每次计数器挤满溢出后,计数器复0。若要进行新一轮的计数,就得重新装入计数初值。这样一来不仅造成编程麻烦,而且影响定时精度。而方式2具有初值自动装入的功能,避免了这个缺点,可实现精确的定时。缺点:只有8位计数器,定时时间短、计数范围小。其定时时间为: (28-初值)振荡周期12若晶振频率为12MH

20、z,则最长的定时时间为(28-0)(1/12)12us=0.256ms28方式方式2 2工作过程图工作过程图 (x=0, 1) (x=0, 1) 。5.3.4 方式3 只适用于定时器/计数器T0。T1不能工作在方式3。如果将T1置为方式3,则相当于TR1=0,停止计数 (此时T1可用来作串行口波特率产生器) 。1. 工作方式3下的T0 T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。8位计数器TL0使用T0的状态控制位C/T*、GATE、TR0、INT0,它既可以工作在定时方式,也可以工作在计数方式。8位定时器TH0被固定为一个8位定时器(不能作外部计数模式) ,并使用定时器T1的状

21、态控制位TR1,同时占用定时器T1的中断请求源TF1。此时,定时器TH0的启动或停止只受TR1控制。TR1=1时,启动TH0的计数; TR1=0时,停止TH0的计数2930各引脚与各引脚与T0T0的逻辑关系如图所示的逻辑关系如图所示: : 2. T0工作在方式3下T1的各种工作方式 注意:当T0处于方式3时, T1仍可设置为方式0、方式1和方式2。当时由于TR1、TF1和T1的中断源都已被定时器T0(中的TH0)占用,所以定时器T1 仅有控制位C/T来决定其工作在定时方式或计数方式。当计数器计满溢出时,不能置位“TF1”,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或

22、不需要中断的场合。(1) T1工作在方式031编程说明MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)确定工作方式字:对TMOD寄存器正确赋值;(2)确定定时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0 M为213,模式1 M为216,模式2和3 M为28)(3)根据需要,对IE置初值,开放定时器中断;(4)启动定时/计数器,对TCON寄存器

23、中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。3233例5-1 要在P1.0上输出一个周期为2ms的方波,假设系统振荡频率采用12MHz。 利用T0方式0产生1ms的定时方波的周期用T0来确定,让T0每隔1ms计数溢出1次,即TF0=1;查询到TF0=1 则CPU对P1.0取反。即要使即要使P1.0P1.0每隔每隔1ms1ms取反取反一次。一次。34第一步: 确定工作方式字 方式0 (13位)最长可定时 8.192ms; 方式1 (16位)最长可定时 65.536ms; 方式2 (8位)最长可定时 256s。T0为方式0, M1M0=00 定时工作状态,

24、C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H35第二步: 计算1ms定时的初值X 设初值为X,则有: (213-X) 1210-6 1/12=110-3可求得:X=8192-1000=7192X化为16进制,即X=1C18H=1,1100,000 1,1000B。所以,T0的初值为: TH0=E0H TL0=18HTH0 1 1 1 0 0 0 0 0TL0 1 1 0 0 0第三步: 程序设计 采用查询TF0的状态来控制P1.0的输出,同时要重新装入初值。36 参考程序: ORG 0100HMAIN: MOV TMOD, #00H;设置T0为方式0MO

25、VTL0,#18H;送计数初值 MOVTH0,#0E0H;送计数初值SETB TR0 ;启动T0LOOP: JBC TF0,NEXT ;查询定时时间到,转NEXT,同时清TF0SJMPLOOP;重复循环NEXT: MOV TL0, #18H ;T0重置初值 MOV TH0, #0E0H ;T0重置初值 CPL P1.0 ;P1.0的状态取反SJMPLOOP;重复循环END37例5-2 将例5-1中的输出方波周期改为1秒。 分析: 周期为1s的方波要求500ms的定时。 (1) T0工作方式的确定因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出: 方式0 (13位)最长可定时

26、8.192ms; 方式1 (16位)最长可定时 65.536ms; 方式2 (8位)最长可定时 256s。 所以采用定时器定时加软件计数的方法来实现延长定时。选方式1,定时50ms,软件计数10次。50ms 10=500ms。 所以,TMOD=01H38以上各方式以上各方式都不满足要求都不满足要求 (2) 计算计数初值因为: (216-X)1210-6 1/12=5010-3所以: X=15536=3CB0H因此: TH0=3CH,TL0=B0H (3) 10次计数的实现设计一个软件计数器,初始值设为10。每隔50ms定时时间到,产生溢出标志TF0,程序查询到TF0=1,则软件计数器减1。这样

27、减到0时就获得了500ms的定时。39(4) 程序设计(参考程序) MAIN: MOV TMOD,#01H ;设T0工作在方式1MOV TL0,#0B0H ;给T0设初值MOV TH0,#3CHMOVR7,#10;软件计数器初值SETB TR0 ;启动T0LOOP:JBCTF0, NEXT;查询定时时间到,转NEXT,同时清TF0SJMP LOOP NEXT: DJNZ R7,EXIT;R7不等于0,则不对P1.0取反CPLP1.0MOVR7,#10;重置软件计数器初值EXIT:MOV TL0,#0B0H ;T0中断子程序,重装初值MOV TH0,#3CH SJMPLOOPEND 40以上的定

28、时程序中,程序都要重置计时器初值,这样从定时器溢出发出溢出标志,到重装完定时器初值,在开始计数,之间总会有一段时间间隔,使定时时间增加了若干微秒,造成定时不够精确。为了减小这种定时误差,单片机中设置了工作方式2(自动重装初值),则可避免上述因素,省去程序中重装初值的指令,实现精确定时。但是工作方式2的缺点是只有8位计数器,定时时间受到很大限制。41例5-3 利用T0方式2产生250us的定时,在P1.0引脚上输出周期为500us的方波(要求精确定时)。(设系统振荡为12MHz)(1) 工作方式选择实现精确定时,采用方式2。对于12MHz晶振,方式2的最大计数时间为28=256us, 所以可实现

29、250us的精确定时。故,设置TMOD=02H。(2) 计算初值设初值为X: 则 (28-X) 1210-61/12=25010-6 X=28-250=6=06H(3) 程序设计采用查询TF0的状态来控制P1.0的输出。42(4) 参考程序MAIN: MOVTMOD, #02H ;置T0方式2MOVTH0,#06H ;送计数初值MOVTL0,#06HSETB TR0 ;启动T0LOOP: JBC TF0,NEXT ;查询定时时间到,转NEXT,同时清TF0SJMP LOOPNEXT:CPLP1.0;输出取反SJMP LOOP;重复循环END43GATE门可使定时器Tx(T0或T1)的启动计数受

30、INTx*的控制,可测量引脚INTx*(P3.2或P3.3) 上正脉冲的宽度(机器周期数) 。以T1为例:44当当GATE=1GATE=1时,时,K=TRxINTxK=TRxINTxK K例5-4 利用T1门控位GATE测试INT1*(P3.3)引脚上出现的正脉冲的宽度。分析:根据设计要求,将T1设定为定时工作模式、方式1、GATE=1;当TR1=1时,一旦INT1*(P3.3)引脚上出现高电平就开始计数,直到出现低电平为止。然后读取TH1、TL1中的计数值,分别送到寄存器A和B中。由于T1工作在定时方式,计数器计数的是机器周期的脉冲数;将脉冲数转化成时间,就可得到正脉冲的宽度。45ORG 0

31、100HMAIN: MOV TMOD, #90H ;T1为方式1定时控制字MOV TL1, #00H;计数器初值为0MOV TH1, #00HLOOP: JB P3.3, LOOP;等待INT1*低SETB TR1;如INT1*为低,启动T1LOOP1: JNB P3.3, LOOP1;等待INT1*升高,开始计数LOOP2: JB P3.3, LOOP2 ;等待INT1*降低,停止计数CLR TR1;停止T1计数MOV A, TL1;T1计数值的低8位送AMOV B, TH1;T1计数值的高8位送B由于定时器最长为16位计数器,因此被测脉冲高电平的宽度不能超过65536个机器周期。46参考程

32、序参考程序: :例5-5 当T0(P3.4) 引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统振荡为6MHz) 两个计数器同时使用47(1) 工作方式选择lT0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4) 发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0引脚上已接收了负跳变信号。lT1定义为方式2定时。在T0引脚产生一次负跳变后,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。lTMOD=0010,0101=25H(2)

33、计算T1初值设T1的初值为X: 则 (28-X) 210-6=510-4 X=28-250=6=06H48MAIN: MOV TMOD, #25H ;初始化,T1为方式2定时,T0为方 式1计数MOV TL0, #0FFH ;T0置初值 MOV TH0, #0FFHSETB TR0 ;启动T0MOV TL1, #06H ;T1置初值MOV TH1, #06HLOOP0:JBCTF0,NEXT0;查询T0有无负跳变,有则转到NEXT0SJMP LOOP0NETX0:CPLP1.0;P1.0取反SETB TR1;启动T1LOOP1:JBCTF1,NEXT1 ;查询T1定时时间到否,到则转到NEXT

34、1SJMP LOOP1NEXT1:CPLP1.0;P1.0取反SJMP LOOP1END49(3) (3) 程序设计程序设计T0 方式3时,TL0和TH0被分成两个独立的8位定时器/计数器。其中, TL0: 8位定时器/计数器; TH0: 8位定时器。当T1作串行口波特率发生器时,T0才设置为方式3。50以上例题均采用查询的方法,这种方法很简单,但是在定时器整个计数的过程中,CPU要不断地查询溢出标志TFx的状态,很难执行其他操作,占用了CPU的工作时间,使得CPU的工作效率不高。若采用中断的方式来实现,可大大提高CPU的工作效率。515-52例5-6 如图所示:P1中接有八个发光二极管,编程

35、使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。5-53分析 : 利用T1完成100ms的定时,当P1口线输出1时,发光二极管亮,每隔100ms,1左移一次。采用方式1定时,先计算计数初值: 6MHz晶体,机器周期 MC=2s 计数值: 100ms/2s =50000=C350H定时器初值:(C350H)补 =10000H-C350H=3CB0HM0M1GATEM0M1GATEC/ TC/ TT1 方式1 :TMOD=10H5-54 ORG 00HMOV TMOD,#10H ;T1工作于定时方式1MOV A,#01H ;置初值,第一个LED亮NEXT:MOV P1,A MOV TH1,

36、#3CH MOV TL1,#0B0H ; 定时100ms SETB TR1 AGAI: JBC TF1,SHI ; 100ms到转SHI,并清TF1SJMP AGAISHI: RL A SJMP NEXT 查询方式5-55 ORG 0030H ;主程序MAIN:MOV A,#01H MOV P1,A ;置初值,第一个LED亮 MOV TMOD,#10H ;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H ;定时100ms SETB EA ;中断总允许 SETB TR1 ;启动T1工作 SETB ET1 ;允许T1中断WAIT:SJMP WAIT ;等待中断 ORG 0

37、000H AJMP MAIN ;单片机复位后从0000H开始执行 ORG 001BH ;T1中断入口 AJMP TIME1 ;转到T1 中断服务程序5-56TIME1:RL A ;左移一位 MOV P1,A ;下一个发光二极管亮 MOV TH1,#3CH MOV TL1,#0B0H ;重装计数值 RETI ;中断返回以上程序执行结果,八个LED一直循环轮流点亮。5-57例5-7 在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮一秒灭一秒,周而复始,设fosc=6MHZ。89C51P1.7+5VLEDP1.0T11s分析:16位定时最大 65536*2us=131.072ms,显然不能满足要求,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论