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

下载本文档

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

文档简介

1、1第6章 AT89S51单片机定时器/计数器主要内容n 定时/计数器的工作原理模式n 定时/计数器的工作方式n 定时/计数器的应用2(1) 定时器/计数器的概念定时器计数器定时/计数器 内部计数器内部计数器外部计数器(2) AT89S51的定时器/计数器简介 2个16位的定时/计数器,有多种工作方式。 定时/计数器工作在定时模式时,计数脉冲信号来自单片机的内部,计数速率是晶振频率的1/12,当计数器启动后,每个机器周期计数器自动加1。 定时/计数器工作在计数模式时,计数器对外部脉冲进行计数,计数器计P3.4(T0脚)P3.5(T1脚)负跳变次数。每产生一次负跳变,计数器自动加1。6.1 概述3

2、 它们最低位的脉冲,将使它们自动加1,带进位 本质上讲是两个16位计数器;每输入一个脉冲增1 两种工作状态 四种工作方式 0 1 2 3 与之有关的 四个管脚 七个SFR T0 T1 TCON TMOD SP IE IP 中断申请6.1 概述TH0TL04 . 3P5 . 3P2 . 3P3 . 3P 4 一T0概述 1.T016位计数器 占两字节 TH0地址8CH TL0地址8AH 复位后(T0)=0000H 计数范围0000H0FFFFH 最大=65536 不能位寻址 不能按字操作 (分别从低8位,高8位送数)2.T0的基本功能 对送入TL0的脉冲,使之增1 外部计数状态对 脚的脉冲计数

3、两个计数源 内部定时对机器周期计数 6.1 概述4 . 3P5 . 3P2 . 3P3 . 3P 16204 . 3TP5T0两种工作状态( ) 位 (TMOD.2) =0 为内部定时 =1 为外部计数T0可读可写 写T0就是对之赋初值 读T0就是检查T0当前的计数结果存 入单片机寄存器中MOV DPTR,#DADA (此一条按字操作)中断功能 T0溢出时 计数结果为0000H 进位丢失(CY短时间还有)置位中断申请标志位TF0 TCON.5 T0的启停可以被脚 ,TR0位 GATE位所控制 T1同T0 6.1 概述 TCTC2 . 3P6GATEM0C/TM1M0GATEC/TM1D0D1D

4、2D3D4D5D6D7T0T15.2 定时器/计数器的工作方式选择及控制(一) 定时/计数器的工作方式寄存器(TMOD, 89H ) 1 M0 工作方式选择位 P133表61 0 0 0 13 0 1 1 16 1 0 2 自8 1 1 3 T0分TH0,TL0计数器 T1 停止计数 7GATEM0C/TM1M0GATEC/TM1D0D1D2D3D4D5D6D7T0T16.2 定时器/计数器的工作方式选择及控制(一) 定时/计数器的工作方式寄存器(TMOD, 89H ) 工作状态选择位 =1 为计数状态 =0 为定时状态 GATE门控位 =1 时允许P3.2 和TR0联合控制T0 =0 时 禁

5、止P3.2控制T0,只由TR0控制TC8TF1TF0IE1TR1IT0IT1IE0TR0用于外中断TCON地址88H可位寻址D0D1D2D3D4D5D6D76.2 定时器/计数器的工作方式选择及控制(二) 定时/计数器控制寄存器(TCON)控制定时/计数器的启停,反映定时/计数器是否计满。 TF0、(TF1)T0、(T1)计数溢出标志位 =1 溢出时,硬件置1,否则清0 =0未溢出 TR0 (TR1)T0(T1)的启/停控制位 软件置1时 启动T0 TR0=1时要判断 GATE位是否允许 P3.2启动 T0 复位时 (TCN)=00H禁止T0、T1计数96.3.1 T0的方式013位定时/计数

6、器 6.3 定时器/计数器的工作方式及工作原理T0方式0的逻辑结构TMOD0TMOD1TMOD2TMOD3M0M1C/TGATE00振 荡 器 12T0引 脚INTO引 脚1 1&AB TH0(8位 ) TL0(5位 )C/T 1C/T 0控 制KTCON中 断TF0TR0TMOD最大计数范围:0213=8k=8192T0分为低5位和高8位 T0方式0的结构 M1 M0 =0010TCON.4(主控位) 1 启动T0控制逻辑 ( +P3.2)x(TR0)=门控电平= 0 停止 T01.13位;2.内部定时,外部计数;3.中断;4.启/停控制逻 TR0无论在什么情况下,都可软件控制T0启

7、/停GATE=0 条件下,P3.2脚不能控制T0启/停GATE=1 可控制T0的启/停。GATE6.3 定时器/计数器的工作方式及工作原理116.3 定时器/计数器的工作方式及工作原理6.3.2 T0、T1的方式1 设定 M1M0=1 为16位定时计数器 原理同方式 1 最大计数范围 0216=65536=64k126.3 定时器/计数器的工作方式及工作原理6.3.3 方式213 可自动重转初值的8位定时器/计数器 最大计数值 28 只有TL0做计数。TH0中的初始化程序装入TH0初值 每当TL0溢出时,TH0的内容自动装入TL0位,使之可以循环计数。6.3 定时器/计数器的工作方式及工作原理

8、6.3.3 方式2此工作方式可省去用户软件中重装初值的指令的执行时此工作方式可省去用户软件中重装初值的指令的执行时间,简化定时初值的计算方法,可相当精确地确定定时间,简化定时初值的计算方法,可相当精确地确定定时时间。时间。146.3 定时器/计数器的工作方式及工作原理6.3.4 方式3156.3 定时器/计数器的工作方式及工作原理6.3.4 方式316 把T0分为两个8位定时/计数器 P138 图6-10 使单片机具有三个定时/计数器定时器T1没有方式3, 如设为方式3, T1停止计数 TL0可做定时/计数器 占用T0的TCON和TMOD中的控制位和标志位 TH0只能作为定时器使用, 占用T1

9、的资源TR1和TF1此时T1仍可用方式0、1、2, 但不能使用中断方式只有T1用作串行口波特率发生器时,T0才工作在方式3,此时T1多用于方式26.3 定时器/计数器的工作方式及工作原理6.3.4 方式3176.4.1 T/C的计数初值C的计算和装入1、计数初值C的求法计数方式:C=最大计数值计数个数X 0 213=8192 1 216=65536 2、3 28=256定时方式:最大计数值定时时间/机器周期T2、T/C在不同工作方式下的初值装入方式 1)方式0:13位 要装入1F90H初值时1F90H=0001 1111 1001 1100B6.4 定时器/计数器的应用程序设计13TH0TL0

10、18 对T0而言,计数初值的高8位装入TH0,低5位装入TL0的低5位,TL0的高3位无效,可补零。将11111100B=FCH,装入TH0,XXX11100B装入TL0由指令表示为: TH0=0 xFC; TL0=0 x1C; 2)方式1,16位方式 初值低8位装入TL0 高8位装入TH0TH0=0 xFF;TL0 =0 x9C;3)方式2、初值既要装入TH0,也要装入TL0用指令表示为TH0=0 x9C;TL0=0 x9C; 6.4.1 T/C的计数初值C的计算和装入6.4 定时器/计数器的应用程序设计196.4.2 T/C初始化编程 初始化内容包括1)根据定时时间或计数要求,计算初值2)

11、设置工作方式控制字 TMOD3)装初值 THx TLx4)启动T/C(软件或外部信号) TRx 如工作于中断方式,需开EA及ETx,并编写中断服务程序。6.4 定时器/计数器的应用程序设计206.4 定时器定时器/计数器的编程和应用计数器的编程和应用 在在4种工作方式中,方式种工作方式中,方式0与方式与方式1基本相同,只是计数器的基本相同,只是计数器的计数位数不同。方式计数位数不同。方式0为为13位计数器,方式位计数器,方式1为为16位计数器。由位计数器。由于方式于方式0是为兼容是为兼容MCS-48而设,且其计数初值计算复杂,所以而设,且其计数初值计算复杂,所以在实际应用中,一般不用方式在实际

12、应用中,一般不用方式0,而采用方式,而采用方式1。6.4.3 P1口外接的口外接的8只只LED每每0.5s闪亮一次。闪亮一次。 【例【例6-1】在在AT89S51单片机的单片机的P1口上接有口上接有8只只LED(电路见(电路见图图4-7)。下面采用定时器)。下面采用定时器T0的方式的方式1的定时中断方式,使的定时中断方式,使P1口口外接的外接的8只只LED每每0.5s闪亮一次。闪亮一次。 21(1)设置)设置TMOD寄存器寄存器 定时器定时器T0工作在方式工作在方式1,应使,应使TMOD寄存器的寄存器的M1、M0=01;应设置应设置C/=0,为定时器工作模式;对,为定时器工作模式;对T0的运行

13、控制仅由的运行控制仅由TR0来来控制,应使控制,应使GATE0=0。定时器。定时器T1不使用,各相关位均设为不使用,各相关位均设为0。所以,所以,TMOD寄存器应初始化为寄存器应初始化为0 x01。(2)计算)计算T0计数初值计数初值 设定时时间设定时时间5ms(即(即5000s),设定时器),设定时器T0的计数初值为的计数初值为X,假设晶振的频率为假设晶振的频率为11.0592MHz,则定时时间为:定时时间,则定时时间为:定时时间=(216X) 12/晶振频率晶振频率22则则5000=(216 X) 12/11.0592得:得:X = 60928,转换成,转换成16进制后为:进制后为:0 x

14、ee00,其中,其中0 xee装入装入TH0,0 x00装入装入TL0。(3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T0中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、ET0位置位置1。(4)启动和停止定时器)启动和停止定时器T0 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR0=1,则启动定时器,则启动定时器T0;TR0=0,则停止定时器,则停止定时器T0定时。定时。 参考程序如下:参考程序如下:23#includeChar i=100;/*给变量给变量i赋初值赋初值*/void main( )TMOD=0 x01;/*设置定时器设置定时器T0为

15、方为方式式1*/TH0=0 xee;/*向向TH0写入初值的高写入初值的高8位位*/TL0=0 x00;/*向向TL0写入初值的低写入初值的低8位位*/P1=0 x00; /*P1口口8只只LED点亮点亮*/EA=1; /*总中断允许总中断允许*/ET0=1; /*定时器定时器T0中断允许中断允许*/ TR0=1; /*启动定时器启动定时器T0*/while(1) ; /*无穷循环,等待定时中断无穷循环,等待定时中断*/24/*以下为定时器以下为定时器T0的中断服务程序的中断服务程序*/void T0_int(void) interrupt 1 TH0=0 xee;/*给给T0装入装入16位初

16、值,计位初值,计4608个数后,个数后,T0溢出溢出*/TL0=0 x00; i-; /*循环次数减循环次数减1*/if(i=0)P1=P1; /*P1口按位取反口按位取反*/i=100;/*重新设置循环次数重新设置循环次数*/256.4.4 计数器的应用计数器的应用 【例【例6-2】 采用定时器采用定时器T1的方式的方式1的中断计数方式,如的中断计数方式,如图图6-13所示,计数输入引脚所示,计数输入引脚T1(P3.5)上外接开关)上外接开关K1,作为计数,作为计数信号输入。按信号输入。按4次次K1后,后,P1口的口的8只只LED闪烁不停。闪烁不停。(1)设置)设置TMOD寄存器寄存器 T1

17、工作在方式工作在方式1,应使,应使TMOD的的M1、M0=01;设置计数器;设置计数器工作模式工作模式C/T*=1;对;对T0的运行控制仅由的运行控制仅由TR0来控制,应使来控制,应使GATE0=0。定时器。定时器T0不使用,各相关位均设为不使用,各相关位均设为0。所以,。所以,TMOD寄存器应初始化为寄存器应初始化为0 x50。26图图6-13 由外部计数输入信号控制由外部计数输入信号控制LED的闪烁的闪烁27(2)计算)计算T1计数初值计数初值 由于每按由于每按4次次K1,计数一次,因此计数器的初值为,计数一次,因此计数器的初值为65536-4=65532,将其转换成,将其转换成16进制后

18、为:进制后为:0 xfffc,因此,因此,TH0=0 xff,TL0=0 xfc。(3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T1中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、ET1位置位置1。(4)启动和停止定时器)启动和停止定时器T1 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR1=1,则启动定时器,则启动定时器T1计数;计数;TR1=0,则停止定时器,则停止定时器T1计数。计数。 参考程序如下:参考程序如下:28#include void Delay(unsigned int i)/* 定义延时函数定义延时函数Delay( ),i是形式参

19、数,不是形式参数,不能赋初值能赋初值*/unsigned int j;for(;i0;i-) /* 变量变量i由实际参数传入一个值,因此由实际参数传入一个值,因此i不能赋初值不能赋初值*/for(j=0;j125;j+);/*空函数空函数*/void main( )/*主函数主函数*/TMOD=0 x50;/*设置定时器设置定时器T1为方式为方式1计数计数*/TH0=0 xff;/*向向TH0写入初值的高写入初值的高8位位*/29TL0=0 xfc;/*向向TL0写入初值低写入初值低8位位*/EA=1; /*总中断允许总中断允许*/ET1=1; /*T1中断允许中断允许*/ TR1=1; /*

20、启动启动T1*/while(1) ; /*无穷循环,等待定时中断无穷循环,等待定时中断*/*以下为定时器以下为定时器T1的中断服务程序的中断服务程序*/void T1_int(void) interrupt 3 for(;) /*无限循环无限循环*/P1=0 xff;/*8位位LED全灭全灭*/Delay(500) ;/*延时延时500ms*/P1=0;/*8位位LED全亮全亮*/Delay(500); /*延时延时500ms */306.4.5 扩展一个外部中断源扩展一个外部中断源 方式方式2可自动重新装载初值。此方式可省去用户程序中重新装初值的指令。可自动重新装载初值。此方式可省去用户程序

21、中重新装初值的指令。 当某个定时器当某个定时器/计数器不使用时,可为计数器不使用时,可为AT89S51扩展一个负跳沿触发的外扩展一个负跳沿触发的外部中断源。部中断源。 基本思想是把定时器溢出中断做成外部中断,然后把计数输入信号接到基本思想是把定时器溢出中断做成外部中断,然后把计数输入信号接到定时器的相应引脚上定时器的相应引脚上T0脚(或脚(或T1脚),并把定时器被设置为方式脚),并把定时器被设置为方式2(自动(自动装入常数方式)计数工作模式,计数器装入常数方式)计数工作模式,计数器TH0、TL0初值均为初值均为0FFH,并允许,并允许T0中断,总中断开放。当检测到中断,总中断开放。当检测到T0

22、脚(或脚(或T1脚)引脚电平发生负跳变时,脚)引脚电平发生负跳变时,计数器计数器TF0(或或TF1)溢出,这时将产生一个中断请求。溢出,这时将产生一个中断请求。 31 【例【例6-3】扩展一个负跳沿触发的外部中断源,把定时器扩展一个负跳沿触发的外部中断源,把定时器T0计数输入引脚计数输入引脚作为外部中断请求信号的输入端。作为外部中断请求信号的输入端。#includevoid main( ) TMOD=0 x06;/*设置定时器T0为方式2计数*/TH0=0 xff;/*给T0装入初值*/TL0=0 xff; /*给T0装入初值*/ET0=1; /*允许T0中断*/EA=1; /*总中断开*/T

23、F0=0;/*T0中断溢出标志位清0*/TR0=1/*接通T0 计数* /while (1) /*无限循环等待* /32/*以下为定时器T0的中断服务程序*/void T0_int(void) interrupt 1 using 0 /*外中断处理部分*/ 说明:本例所述的使用定时器扩展的外中断源只能是负跳沿说明:本例所述的使用定时器扩展的外中断源只能是负跳沿触发。此外,只有当定时器触发。此外,只有当定时器T0(或(或T1)不用的话,才可使用)不用的话,才可使用本方法来扩充外部中断源,此时定时器本方法来扩充外部中断源,此时定时器T0本身的功能将不能再本身的功能将不能再使用,除非使用软件来对它进

24、行复用控制。使用,除非使用软件来对它进行复用控制。6.4.6 P1.0上产生周期为上产生周期为2ms的方波的方波 【例【例6-4】系统时钟为系统时钟为12MHz,编程实现从,编程实现从P1.0引脚上输出引脚上输出一个周期为一个周期为2ms的方波,如的方波,如图图6-14所示所示33图图6-14 定时器控制定时器控制P1.0输出一个周期为输出一个周期为2ms的方波的方波34 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为2ms的方波,定时器应的方波,定时器应产生产生1ms的周期性的定时,定时对的周期性的定时,定时对P1.0求反。选择定时器求反。选择定时器T0,方式方式1定时,采用中

25、断方式,定时,采用中断方式,GATE不起作用。不起作用。 计算计算T0的初值计算:的初值计算: 设设T0的初值为的初值为X,则,则(216 X) 1 106 = 1 103= 65536X =1000 则初值为:则初值为:655361000=64536,因此因此 TH0=(65536 1000) /256 ,TL0=(65536 1000) %256。 参考程序如下:参考程序如下:35#includesbit P1_0=P10;void main(void)TMOD=0 x01;/*设置定时器设置定时器T0为方式为方式2计数计数*/P1_0=0;TH0=(65536 1000) /256;/*

26、给给T0装入初值装入初值*/TL0=(65536 1000) %256; /*给给T0装入初值装入初值*/ET0=1; /* 允许允许T0中断中断 */EA=1; /* 总中断开总中断开 */TR0=1/* 接通接通T0 计数计数 * /do while (1); /* 无限循环等待无限循环等待 * /void T0_int(void) interrupt 1 using 1P1_0=! P1_0;TH0=(65536 1000) /256;TL0=(65536 1000) %256;366.4.7 P1.1上产生周期为上产生周期为1s的方波的方波 【例【例6-5】假设系统时钟为假设系统时钟为

27、12MHz,编程实现从,编程实现从P1.1引脚引脚上上输出一个周期为输出一个周期为1s的方波。的方波。 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为1s的方波,定时器应产的方波,定时器应产生生500ms的周期性定时,定时到则对的周期性定时,定时到则对P1.0求反。由于定时时求反。由于定时时间较长,用定时器不能直接实现,直接定时时间最长的就是间较长,用定时器不能直接实现,直接定时时间最长的就是方式方式1,仅为,仅为65ms(系统时钟系统时钟12MHz)多一点。多一点。 实现实现:T0定为定为10ms定时,每定时,每10ms对对P1.0求反一次,求反一次,P1.0输输出的脉冲加到定

28、时器出的脉冲加到定时器T1的计数输入脚的计数输入脚P3.5(T1脚),作为计脚),作为计数输入,定时数输入,定时500ms需计数需计数50次。次。T1设为方式设为方式2计数,初值计数,初值X为:为:28X=50,则,则X=206,37 所以所以TH1= TL1=206。T0设为方式设为方式1定时,则控制字为定时,则控制字为61H。定时器。定时器T0和和T1均采用中断方式工作。均采用中断方式工作。 参考程序如下:参考程序如下:#includesbit P1_0=P10;sbit P1_1=P11;void main(void)TMOD=0 x61;/*设置定时器设置定时器T0为方式为方式1定时,

29、定时,T1为方式为方式2计数计数*/P1_0=0;TH0=(65536 10000) /256;/*给给T0装初值装初值*/TL0=(65536 10000) %256; TH1=206;/*给给T1装初值装初值*/TL1=206;38EA=1; /* 总中断开总中断开 */ET0=1; /* 允许允许T0中断中断 */ET1=1; /* 允许允许T1中断中断 */TR0=1;TR1=1;while (1);void T0_int(void) interrupt 1 TH0=(65536 1000) /256;TL0=(65536 1000) %256;P1_0=! P1_0;void T1_

30、int(void) interrupt 3 P1_1=! P1_1; ;/* P1.1脚产生脚产生1s的方波的方波*/ 。396.4.8 T1控制发出控制发出1KHz的音频信号的音频信号【例【例6-6】 利用定时器利用定时器T1的中断来控制蜂鸣器发出的中断来控制蜂鸣器发出1KHz的音频的音频信号,电路图见信号,电路图见图图6-15。假设系统时钟为假设系统时钟为11.0592MHz,则每个脉冲的周期为,则每个脉冲的周期为12/11.0592=1.085s。1KHz的音频信号周期为的音频信号周期为1ms,因此要,因此要计数的脉冲数为计数的脉冲数为1000/1.085=921次。所以次。所以T1的初

31、值:的初值:TH1=(65536 921) /256;TL1=(65536 921) %256 参考程序如下:参考程序如下:40图6-15 控制蜂鸣器发出1KHz的音频信号41 #includesbit P1_0=P10;sbit sound=P17;void main(void)EA=1; /* 总中断开 */ET1=1; /* 允许T0中断 */TMOD=0 x10;/*设置定时器T1为方式1定时*/P1_0=0;TH1=(65536 921) /256;/*给T1装初值*/TL1=(65536 921) %256; TR1=1;while (1);42void T1_int(void)

32、interrupt 3 using0 sound =sound;TH1=(65536 921) /256;TL1=(65536 921) %256;436.4.9 测量脉冲宽度(门控位测量脉冲宽度(门控位GATEx的应用)的应用) 下面以定时器下面以定时器T1为例,介绍门控制位为例,介绍门控制位GATE的具体应用,的具体应用,即测量即测量INT0*(或(或INT1* )引脚上正脉冲的宽度。)引脚上正脉冲的宽度。 【例【例6-7】 门控位门控位GATE1可使可使T1的启动计数受的控制,当的启动计数受的控制,当GATE1=1,TR1=1时,只有引脚时,只有引脚INT1*输入高电平时,输入高电平时,

33、T1才才被允许计数。利用被允许计数。利用GATE1的这一功能,可测量引脚的这一功能,可测量引脚INT1*(P3.3)上正脉冲的宽度(机器周期数),利用门控制位)上正脉冲的宽度(机器周期数),利用门控制位GATE1,测量引脚,测量引脚INT1*上正脉冲的宽度。方法如上正脉冲的宽度。方法如图图6-16所所示。示。44图6-16 利用GATE位测量正脉冲的宽度 45参考程序如下:#includesbit P3_3=P33;/* 位变量定义位变量定义*/unsigned count_high; /* 定义计数变量,用来读取定义计数变量,用来读取TH0*/unsigned count_low;/* 定义

34、计数变量,用来读取定义计数变量,用来读取TL0*/void read_ count( ) ; /* 读计数器函数读计数器函数*/void main( )TMOD=0 x90;/*设置定时器设置定时器T1为方式为方式1定时定时*/TH1=0;/*向定时器向定时器T1写入计数初值写入计数初值*/TL1=0;TR1=1;while(P3_3=1); /* 等待变低等待变低*/46TR1=1;/* 如果为低,启动如果为低,启动T1(未真正开始计数未真正开始计数)*/while(P3_3=0); /* 等待变高,变高后等待变高,变高后T1真正开始计数真正开始计数*/while(P3_3=1); /* 等

35、待变低,变低后等待变低,变低后T1停止计数停止计数*/TR1=0;read_ count( ) /* 读计数寄存器内容的函数读计数寄存器内容的函数*/void read_ count( ) /* 读取计数寄存器的内容读取计数寄存器的内容*/docount_high=TH1;/* 读高字节读高字节*/count_low =TL1;/* 读低字节读低字节*/* 可将两字节的机器周期数进行显示处理可将两字节的机器周期数进行显示处理*/while(count_high!= TH1);47 执行以上程序,使引脚上出现的正脉冲宽度以机器周期数执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式读入到的

36、形式读入到count_high 和和count_low两个单元中,如果编写两个单元中,如果编写了显示程序,可将其显示在显示器上。了显示程序,可将其显示在显示器上。6.4.10 实时时钟的设计实时时钟的设计 本节介绍如何使用定时器本节介绍如何使用定时器/计数器来实现实时时钟。实时时计数器来实现实时时钟。实时时钟就是以秒、分、时为单位计时。钟就是以秒、分、时为单位计时。1计时的实现计时的实现 时钟最小计时单位是秒,如何获得时钟最小计时单位是秒,如何获得1s定时?可将定时器定时?可将定时器T0的定时时间定为的定时时间定为50ms,采用中断方式进行溢出次数的累计,采用中断方式进行溢出次数的累计,计满计

37、满20次,则秒计数变量次,则秒计数变量s加加1;若秒计满;若秒计满60,则分计数变量,则分计数变量m加加1,同时将秒计数变量,同时将秒计数变量s清清0;若分钟计满;若分钟计满60,则小时计数,则小时计数48变量变量h h加加1 1;若小时计数变量满;若小时计数变量满2424,则将小时计数变量清,则将小时计数变量清0 0。2 2程序设计程序设计 先将定时器以及各计数变量,然后调用时间显示的子程序。先将定时器以及各计数变量,然后调用时间显示的子程序。计时功能由定时器计时功能由定时器T0T0的中断服务子程序来实现。的中断服务子程序来实现。 参考程序如下:参考程序如下:#include#include

38、unsigned char int_timeunsigned char int_time;/ /* *定义中断次数计数变量定义中断次数计数变量* */ /unsigned char secondunsigned char second;/ /* *秒计数变量秒计数变量* */ /unsigned char minuteunsigned char minute;/ /* *分钟计数变量分钟计数变量* */ /unsigned char hourunsigned char hour;/ /* *小时计数变量小时计数变量* */ /void delay(voidvoid delay(void ) )

39、 ;/ /* *延时函数延时函数* */ /unsigned char junsigned char j;for(jfor(j=0;j200;j+);=0;j200;j+); ; 49void main(voidvoid main(void) ) TMOD=0 x01TMOD=0 x01;/ /* *设置定时器设置定时器T0T0为方式为方式1 1定时定时* */ /EA=1EA=1; / /* * 总中断开总中断开 * */ /ET0=1ET0=1; / /* * 允许允许T0T0中断中断 * */ /TH0=(65536TH0=(65536 46483)/25646483)/256;/ /*

40、 *给给T0T0装初值装初值* */ /TL0=(65536TL0=(65536 46483)%25646483)%256;TR0=1;TR0=1;int_timeint_time=0=0;/ /* *中断次数、秒、分、时单元清中断次数、秒、分、时单元清0 0* */ /second=0second=0;minute=0minute=0;hour=0hour=0;while (1);while (1); DisplaySecond(secondDisplaySecond(second););/ /* *显示秒的子程序,此处没有编写显示秒的子程序,此处没有编写* */ /delay( );delay( );/ /* *显示延时显示延时

温馨提示

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

评论

0/150

提交评论