单片机(c语言版)定时器计数器_第1页
单片机(c语言版)定时器计数器_第2页
单片机(c语言版)定时器计数器_第3页
单片机(c语言版)定时器计数器_第4页
单片机(c语言版)定时器计数器_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 AT89S51单片机的单片机的 定时器定时器/计数器计数器 1 内容概要:内容概要:介绍介绍AT89S51单片机片内定时器单片机片内定时器/计数器的结计数器的结 构与功能,两种工作模式和构与功能,两种工作模式和4种工作方式,以及与其相种工作方式,以及与其相 关的两个特殊功能寄存器关的两个特殊功能寄存器TMOD和和TCON各位的定义及各位的定义及 其编程,最后介绍定时器其编程,最后介绍定时器/计数器的计数器的C51编程及应用实例编程及应用实例 。 6.1 定时器定时器/计数器的结构计数器的结构 定时定时/计数器的实质是加计数器的实质是加1计数器(计数器(16位位),由),由高高8位位

2、THX (X=0或或1)和)和低低8位位TLX两个寄存器组成。两个寄存器组成。TMOD是定时是定时/计计 数器的工作方式寄存器,确定工作方式和功能;数器的工作方式寄存器,确定工作方式和功能;TCON是控是控 制寄存器,控制制寄存器,控制T0、T1的启动和停止及设置溢出标志的启动和停止及设置溢出标志。 外部脉冲 3 图图6-1 AT89S51单片机的定时器单片机的定时器/计数器结构框图计数器结构框图 6.1.1 工作方式控制寄存器工作方式控制寄存器TMOD pAT89S51定时器工作方式寄存器定时器工作方式寄存器TMOD用于选择工作模式和用于选择工作模式和 工作方式,字节地址为工作方式,字节地址

3、为89H,不能位寻址。,不能位寻址。 p8位分为两组,高位分为两组,高4位控制位控制T1,低,低4位控制位控制T0。 (1)GATE门控位门控位 GATE=0时,仅由运行控制位时,仅由运行控制位TRx (x = 0,1)来控制定时器运行来控制定时器运行 GATE=1时,用外中断引脚时,用外中断引脚INT0*(或(或INT1* )上的电平与运行)上的电平与运行 控制位控制位TRx共同控制定时器运行。共同控制定时器运行。 4 图图6-2 寄存器寄存器TMOD格式格式 (2)M1、M0工作方式选择位工作方式选择位 pM1、M0的的4种编码,对应于种编码,对应于4种工作方式种工作方式的选择。的选择。

4、(3)C/T* 计数器模式和定时器模式选择位计数器模式和定时器模式选择位 nC/T*=0,为定时器工作模式,对单片机的晶体振荡器,为定时器工作模式,对单片机的晶体振荡器12分分 频后的脉冲进行计数。频后的脉冲进行计数。 nC/T*=1,为计数器工作模式,计数器对外部输入引脚,为计数器工作模式,计数器对外部输入引脚T0( P3.4)或)或T1(P3.5)的外部脉冲(负跳变)计数。)的外部脉冲(负跳变)计数。 5 6.1.2 定时器定时器/计数器控制寄存器计数器控制寄存器TCON pTCON字节地址为字节地址为88H,可位寻址,位地址为,可位寻址,位地址为88H8FH。 (1)TF1、TF0计数溢

5、出标志位。计数溢出标志位。 当当计数器计数溢出时,该位置计数器计数溢出时,该位置“1”。使用查询方式时,应注意。使用查询方式时,应注意 查询有效后,使用软件及时将该位清查询有效后,使用软件及时将该位清“0”。使用中断方式时,。使用中断方式时, 中断请求标志位在进入中断服务程序后由硬件自动清中断请求标志位在进入中断服务程序后由硬件自动清“0”。 (2)TR1、TR0计数运行控制位。计数运行控制位。 TR1位(或位(或TR0位)位)=1,启动定时器工作。,启动定时器工作。 TR1位(或位(或TR0位)位)=0,停止定时器工作。,停止定时器工作。 该位可由软件置该位可由软件置“1”或清或清“0”。

6、6图图6-3 TCON格式格式 6.2 6.2 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式 6.2.1 6.2.1 方式方式0 0M1M0=00 方式方式0 0为为1313位计数位计数,由,由TL0TL0的低的低5 5位(高位(高3 3位未用)和位未用)和TH0TH0的的8 8位位 组成。组成。TL0TL0的低的低5 5位溢出时向位溢出时向TH0TH0进位,进位,TH0TH0溢出时,置位溢出时,置位TCONTCON 中的中的TF0TF0标志,向标志,向CPUCPU发出中断请求。发出中断请求。 7 图6-4 定时器/计数器方式0逻辑结构框图 pC/TC/T* *位决定定时器位决

7、定定时器/ /计数器的两种工作模式计数器的两种工作模式 (1)C/T*=0,T1(或(或T0)为定时器工作模式,把时钟振荡)为定时器工作模式,把时钟振荡 器器12分频后的脉冲作为计数信号。分频后的脉冲作为计数信号。 (2)C/T*=1,T1(或(或T0)为计数器工作模式,计数脉冲为)为计数器工作模式,计数脉冲为 P3.4(或(或P3.5)引脚上的外部输入脉冲,当引脚上发生负跳变)引脚上的外部输入脉冲,当引脚上发生负跳变 时,计数器加时,计数器加1。 9 pGATE位决定定时器的运行控制取决于位决定定时器的运行控制取决于TRx一个条件,还是一个条件,还是 取决于取决于TRx和和INTX*(x=0

8、,1)引脚状态这两个条件引脚状态这两个条件。 (1)GATE=0时,仅由时,仅由TR0控制与门的开启。与门输出控制与门的开启。与门输出1时时 ,控制开关接通,计数开始;,控制开关接通,计数开始; (2)GATE=1时,由外中断引脚信号控制或门的输出,此时,由外中断引脚信号控制或门的输出,此 时控制时控制与门的开启由外中断引脚信号和与门的开启由外中断引脚信号和TR0共同控制共同控制。 当当TR0=1时,外中断引脚信号引脚的时,外中断引脚信号引脚的高电平启动计数高电平启动计数,外中,外中 断引脚信号引脚的断引脚信号引脚的低电平停止计数低电平停止计数。这种方式常用来测量外。这种方式常用来测量外 中断

9、引脚上正脉冲的宽度。中断引脚上正脉冲的宽度。 l定时器模式时定时器模式时有有:Nt/Tcy l计数初值计算的公式为:计数初值计算的公式为: 13 X=2 -N 6.2.2 方式方式1M1M0=01 方式方式1的计数位数是的计数位数是16位,由位,由TLX作为低作为低8位、位、THX 作为高作为高8位,组成了位,组成了16位加位加1计数器计数器 。 16 X=2 -N计数个数与计数初值的关系为:计数个数与计数初值的关系为: 8 X=2 -N 6.2.3 方式方式2M1M0=10 方式方式2为自动重装初值的为自动重装初值的8位计数方式。位计数方式。 工作方式2特别适合于用作较精确的脉冲信号发生器。

10、 计数个数与计数初值的关系为计数个数与计数初值的关系为: 工作过程 pT0分成两个分成两个8位定时位定时/计数器计数器TL0和和TH0 ; TL0:既可计数也可定时,是一个既可计数也可定时,是一个8位定时位定时/计数器。占用了计数器。占用了T0 所有控制位:所有控制位: C/T,TR0,GATE,TF0和和INT0、T0引脚;引脚; TH0:只能作为定时器,因为只能作为定时器,因为T0已被已被TL0占用,占用, TH0用用 T1的的 控制位:控制位:TR1、TF1; 6.2.4 6.2.4 方式方式3M1M0=113M1M0=11 13 pT0T0在方式在方式3 3时时T1T1的工作模式的工作

11、模式 T1T1只能工作在只能工作在0 0、1 1、2 2方式,作为串行口的方式,作为串行口的波特率发生器波特率发生器使使 用。因为用。因为T1T1的运行控制位的运行控制位TR1TR1及计数溢出标志位及计数溢出标志位TF1TF1已被定时已被定时 / /计数器计数器T0T0借用。借用。 当作为波特率发生器使用时,只需要设置好工作方式,便可当作为波特率发生器使用时,只需要设置好工作方式,便可 自动运行。如要停止工作,只需送入一个把自动运行。如要停止工作,只需送入一个把T1T1设置为方式设置为方式3 3 的方式控制字。因为定时的方式控制字。因为定时/ /计数器计数器T1T1不能在方式不能在方式3 3下

12、工作,下工作, 因为因为T1处于方式处于方式3时相当于时相当于TR1 = 0,停止计数,停止计数。 14 6.3 对外部输入的计数信号的要求对外部输入的计数信号的要求 当定时器当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入计数器工作在计数器模式时,计数脉冲来自外部输入 引脚引脚T0或或T1。当输入信号产生由。当输入信号产生由1至至0的跳变(即负跳变)时,的跳变(即负跳变)时, 计数器值增计数器值增1。 由于确认一次负跳变花由于确认一次负跳变花2个机器周期,即个机器周期,即24个振荡周期,因此个振荡周期,因此 外部输入的计数脉冲的最高频率为系统振荡器频率的外部输入的计数脉冲的最高频率为

13、系统振荡器频率的1/24。 图图6-12 对外部计数输入信号的要求对外部计数输入信号的要求 例如,选用例如,选用6MHz频率的晶体,频率的晶体, 允许输入的脉冲频率最高为允许输入的脉冲频率最高为 250kHz。如果选用。如果选用12MHz频频 率的晶体,则可输入最高频率率的晶体,则可输入最高频率 为为500kHz的外部脉冲。的外部脉冲。 15 6.3 对外部输入的计数信号的要求对外部输入的计数信号的要求 p当定时器当定时器/计数器工作在计数器模式时,计数脉冲来自外部输计数器工作在计数器模式时,计数脉冲来自外部输 入引脚入引脚T0或或T1。当输入信号产生由。当输入信号产生由1至至0的跳变(即负跳

14、变的跳变(即负跳变 )时,计数器值增)时,计数器值增1。 p由于确认一次负跳变花由于确认一次负跳变花2个机器周期,即个机器周期,即24个振荡周期,因个振荡周期,因 此此外部输入计数脉冲的最高频率为系统振荡器频率的外部输入计数脉冲的最高频率为系统振荡器频率的1/24。 图图6-12 对外部计数输入信号的要求对外部计数输入信号的要求 p例如,选用例如,选用6MHz6MHz频率频率的晶体,的晶体, 允许输入的脉冲频率最高为允许输入的脉冲频率最高为 250kHz250kHz。如果选用。如果选用12MHz12MHz频率频率 的晶体,则可输入最高频率为的晶体,则可输入最高频率为 500kHz500kHz的

15、外部脉冲。的外部脉冲。 p时间常数的计算 u时间常数:定时器/计数器T0或T1的初始计数值, 在T0或T1被启动后,每个机器周期使计数器中的计 数值加1,计数器产生溢出后。 u定时时间:计数器溢出时间,时间常数越大,定时 时间就越短;时间常数越小,定时时间就越长。时 钟的频率越高,定时时间越短;时钟的频率越低, 定时时间越长。 设系统时钟的频率为设系统时钟的频率为foscfosc,计数器的初始值为,计数器的初始值为N N,定,定 时器工作于方式时器工作于方式1 1,则定时时间:,则定时时间: T=T=(2 216 16-N -N)12/fosc (1)12/fosc (1) 如果定时器工作于方

16、式如果定时器工作于方式2 2或方式或方式3 3,定时时间为:,定时时间为: T=T=(2 28 8-N-N)12/fosc (2)12/fosc (2) 当初始值当初始值N=0N=0时,如果时,如果fosc=12MHZfosc=12MHZ,最大定时时间为:,最大定时时间为: 方式方式1 1为:为: Tmax=2Tmax=216 16 12/fosc=65536us=65.536ms12/fosc=65536us=65.536ms 方式方式2 2、方式、方式3 3为:为:Tmax=2Tmax=28 812/fosc=256us12/fosc=256us 根据定时时间根据定时时间T T,及公式,及

17、公式(1)(1)、(2)(2)分别可以求出初值分别可以求出初值N N为:为: 方式方式1 1: N=2N=216 16-T -Tfosc/12 fosc/12 (3 3) 方式方式2 2、方式、方式3 3 :N=2N=28 8-T-Tfosc/12 fosc/12 (4 4) 如果如果fosc=12MHZ,fosc=12MHZ,以上公式可简化为以上公式可简化为 方式方式1 1: N=2N=216 16-T -T 方式方式2 2、方式、方式3 3 :N=2N=28 8-T-T 例如:系统的时钟频率是例如:系统的时钟频率是12MHz12MHz,在方式,在方式1 1下,如果希望定下,如果希望定 时器

18、时器/ /计数器计数器T0T0的定时时间的定时时间T T为为10ms10ms,则初值,则初值N =2N =216 16-T=65536- -T=65536- 10000=5553610000=55536 如何将如何将5553655536给两个给两个8 8位寄存器位寄存器TH0TH0、TL0TL0赋值呢?可将十进制数赋值呢?可将十进制数 5553655536转换成四位十六进制数,将高转换成四位十六进制数,将高2 2位送位送TH0TH0,低,低2 2位送位送TL0TL0。 更简单的方法是:对于更简单的方法是:对于1616位计数器来讲,位计数器来讲,2 216 16等效为 等效为0 0,对,对 于于

19、8 8位计数器,位计数器,2 28 8等效为等效为0 0,这样公式(,这样公式(3 3)、()、(4 4) 可简化为可简化为 N=-TN=-T,直接用下面两条语句就可以完成计数器初值的设置:,直接用下面两条语句就可以完成计数器初值的设置: TH0=-10000/256TH0=-10000/256; /取取-N-N的高的高8 8位位 TL0=-10000%256TL0=-10000%256; /取取-N-N的低的低8 8位位 例如:设系统的时钟频率是例如:设系统的时钟频率是12MHz12MHz,定时器工作于方式,定时器工作于方式2 2,定,定 时时间时时间200us200us。 根据前面分析,根

20、据前面分析,N=-T=-200N=-T=-200,可直接用以下语句实现:,可直接用以下语句实现: TH0=-200TH0=-200; TL0=-200TL0=-200; pMCS-51单片机的定时器是可编程的,但在进行定时或计数 之前要对程序进行初始化,具体步骤如下: (1)确定工作方式字:对TMOD寄存器正确赋值; (2)确定定时初值:计算初值,直接将初值写入寄存器的TH0 、TL0或TH1、TL1; 初值计算:设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0-M为213,

21、模式1-M为216,模式2和3-M为28) (3)根据需要,对IE置初值,开放定时器中断; (4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位, 置位以后,计数器即按规定的工作模式和初值进行计数或开 始定时。 6.4 定时器定时器/计数器的编程和应用计数器的编程和应用 6.4.1 P1口外接的口外接的8只只LED每每0.5s闪亮一次。闪亮一次。 【例例6-1】在在AT89S51单片机的单片机的P1口上接有口上接有8只只LED(电(电 路见图路见图4-7)。下面采用定时器)。下面采用定时器T0的方式的方式1的定时中断方的定时中断方 式,使式,使P1口外接的口外接的8只只LED每每0.

22、5s闪亮一次。闪亮一次。 (1)设置)设置TMOD寄存器寄存器 p方式方式1;计时工作模式;仅由;计时工作模式;仅由TR0来控制;来控制;T1不使用。不使用。 pTMOD寄存器应初始化为寄存器应初始化为0 x01=0000 0001B (2)计算)计算T0计数初值计数初值 设定时时间设定时时间5ms(即(即5000s),设定时器),设定时器T0的计数初值为的计数初值为 X,假设晶振的频率为,假设晶振的频率为11.0592MHz,则定时时间为:,则定时时间为: 定时时间定时时间=(216X) 12/晶振频率晶振频率 则则 5000=(216 X) 12/11.0592 得:得:X = 60928

23、,转换成,转换成16进制后为:进制后为:0 xee00,其中,其中0 xee装装 入入TH0,0 x00装入装入TL0。 (3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T0中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、 ET0位置位置1。 (4)启动和停止定时器)启动和停止定时器T0 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR0=1,则启动定时器,则启动定时器T0; TR0=0,则停止定时器,则停止定时器T0定时。定时。 21 #include Char i=100;/*给变量给变量i赋初值,定时赋初值,定时0.5S,每次定时中断,每次定时中断

24、 5MS,需要中断,需要中断100次次*/ void main( ) TMOD=0 x01;/*设置定时器设置定时器T0为方式为方式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) ;/*无穷循环,等待定时中断无穷循环,等待定时中断*/ 22 /*以下为定时器以下为定时器T0的中

25、断服务程序的中断服务程序*/ void T0_int(void) interrupt 1 TH0=0 xee; /*给给T0装入装入16位初值,计位初值,计4608个数后,个数后,T0溢出溢出 TL0=0 x00; i-; /*循环次数减循环次数减1*/ if(i=0) P1=P1; /*P1口按位取反口按位取反*/ i=100;/*重新设置循环次数重新设置循环次数*/ 23 案例2 如图所示,P0口接8只发光二极管,编 程使发光管轮流点亮,点亮时间为500ms,要求使 用定时器T0来控制,设晶振为12MHz。 D1 D2 D3 D4 D5 D6 D7 D8 R1 470R R2 470R R

26、3 470R R4 470R R5 470R R6 470R R7 470R R8 470R VCC P0.0 P0.1 P0.2 P0.0 P0.4 P0.5 P0.6 P0.7 8051 设计思想 我们可将P0口的初值设置为0 xFE,对应于发 光管D1亮,每隔500ms将P0的值循环左移一位,这 一周期性的定时作业用T0来完成。 当时钟频率为12MHZ时,在定时器的4种工作方式 中,方式1的最大溢出时间最长,但即使在方式1, 最大的溢出时间也只有65.536ms,所以我们不能在 每次中断时都执行上述移位操作。可以这样处理: 将定时器T0的溢出时间设定为50ms,累计满10次中 断正好50

27、0ms,才允许程序执行1次移位动作。 主函数 uchar count=0; /50ms定时中断次数计数器 void main(void) led=0 xfe; TMOD=0 x01; /T0工作于方式1 TH0=-50000/256; /定时时间为50ms TL0=-50000%256; ET0=1; /允许T0中断 TR0=1; /启动T0定时 EA=1; /CPU开中断 while (1); void time0(void) interrupt 1 TH0=-50000/256; TL0=-50000%256; count+; if(count=10) count=0; led=_crol

28、_(led,1); P0=led; 6.4.2 计数器的应用计数器的应用 【例例6-2】 采用定时器采用定时器T1的方式的方式1的中断计数方式,如的中断计数方式,如图图 6-13所示,计数输入引脚所示,计数输入引脚T1(P3.5)上外接开关)上外接开关K1,作为,作为 计数信号输入。按计数信号输入。按4次次K1后,后,P1口的口的8只只LED闪烁不停。闪烁不停。 28 (1 1)设置)设置TMODTMOD寄存器寄存器 T1T1工作在方式工作在方式1 1,应使,应使TMODTMOD的的M1M1、 M0=01M0=01;设置计数器工作模式;设置计数器工作模式 C/TC/T* *=1=1;对;对T0

29、T0的运行控制仅由的运行控制仅由 TR0TR0来控制,应使来控制,应使GATE0=0GATE0=0。定。定 时器时器T0T0不使用,各相关位均设不使用,各相关位均设 为为0 0。所以,。所以,TMODTMOD寄存器应初始寄存器应初始 化为化为0 x500 x50。 图图6-13 (2)计算)计算T1计数初值计数初值 由于每按由于每按4次次K1,计数一次,因此计数器的初值为,计数一次,因此计数器的初值为65536-4 =65532,将其转换成,将其转换成16进制后为:进制后为:0 xfffc,因此,因此,TH0=0 xff ,TL0=0 xfc。 (3)设置)设置IE寄存器寄存器 本例由于采用定

30、时器本例由于采用定时器T1中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、 ET1位置位置1。 (4)启动和停止定时器)启动和停止定时器T1 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR1=1,则启动定时器,则启动定时器T1 计数;计数;TR1=0,则停止定时器,则停止定时器T1计数。计数。 参考程序如下:参考程序如下: 29 #include /* 定义延时函数定义延时函数Delay( ),i是形式参数,不能赋初值是形式参数,不能赋初值*/ void Delay(unsigned int i) unsigned int j; /* 变量变量i由实际参数传入一个值,因此由

31、实际参数传入一个值,因此i不能赋初值不能赋初值*/ for(;i0;i-) for(j=0;j125;j+) ;/*空函数空函数*/ void main( )/*主函数主函数*/ TMOD=0 x50;/*设置定时器设置定时器T1为方式为方式1计数计数*/ TH0=0 xff;/*向向TH0写入初值的高写入初值的高8位位*/ 30 TL0=0 xfc;/*向向TL0写入初值低写入初值低8位位*/ EA=1; /*总中断允许总中断允许*/ ET1=1; /*T1中断允许中断允许*/ TR1=1; /*启动启动T1*/ while(1) ; /*无穷循环,等待定时中断无穷循环,等待定时中断*/ /

32、*以下为定时器以下为定时器T1的中断服务程序的中断服务程序*/ void T1_int(void) interrupt 3 for(;) /*无限循环无限循环*/ P1=0 xff;/*8位位LED全灭全灭*/ Delay(500) ;/*延时延时500ms*/ P1=0;/*8位位LED全亮全亮*/ Delay(500); /*延时延时500ms */ 31 案例4 用定时器来控制数码管的动态显示。 用定时器控制数码管动态显示的方法: 设定时器的定时时间为1ms,每次产生溢出中断,就根据位 选变量bsel(主程序中将其初值设置为0 xfe)送位选口,点亮 一位数码管,并将bsel左移一位,为

33、下一位的显示做好准备, 4次定时中断分别完成4位数码管的显示,之后将bsel的值再次 初始化为0 xfe,准备下一轮显示。 因此这种显示方式由定时中断自动完成,无需在主程序中调用 a b c d e f g dp COM1COM2COM3COM4 Q1 Q2 Q3 Q4 R12 R11 R10 R9 R1 470R *8 R2 R3 R4 R5 R6 R7 R8 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 VCC P2.0 P2.1 P2.2 P2.3 LED1LED2LED3LED4 8051 主程序 uchar bsel , n; void main(v

34、oid) n=0; bsel=0 xfe; /首先显示数码管的最低位 TMOD=0 x01; /T0工作于定时方式2 TH0=-1000/256; /T0的定时时间为1000us TL0=-1000%256; ET0=1; /允许T0中断 TR0=1; /启动定时 EA=1; /开中断 while(1); void time0(void) interrupt 1 TH0=-1000/256; TL0=-1000%256; P0=0 xff; P2=bsel; P0=segtabdbufn; bsel=_crol_(bsel,1); n+; if(n=4) n=0; bsel=0 xfe; 6.

35、4.3 扩展一个外部中断源扩展一个外部中断源 方式方式2可自动重新装载初值。此方式可省去用户程序中重新可自动重新装载初值。此方式可省去用户程序中重新 装初值的指令。装初值的指令。 当某个定时器当某个定时器/计数器不使用时,可为计数器不使用时,可为AT89S51扩展一个负扩展一个负 跳沿触发的外部中断源。跳沿触发的外部中断源。 基本思想:基本思想:把定时器溢出中断做成外部中断把定时器溢出中断做成外部中断,然后把计数输,然后把计数输 入信号接到定时器的相应引脚上入信号接到定时器的相应引脚上T0脚(或脚(或T1脚),并把定时脚),并把定时 器被设置为方式器被设置为方式2(自动装入常数方式)计数工作模

36、式,计数(自动装入常数方式)计数工作模式,计数 器器TH0、TL0初值均为初值均为0FFH,并允许,并允许T0中断,总中断开放。中断,总中断开放。 当检测到当检测到T0脚(或脚(或T1脚)引脚电平发生负跳变时,计数器脚)引脚电平发生负跳变时,计数器 TF0(或或TF1)溢出,这时将产生一个中断请求。溢出,这时将产生一个中断请求。 【例例6-3】扩展一个负跳沿触发的外部中断源,把定时器扩展一个负跳沿触发的外部中断源,把定时器T0计计 数输入引脚作为外部中断请求信号的输入端。数输入引脚作为外部中断请求信号的输入端。 35 #include#include void main( )void main

37、( ) TMOD=0 x06TMOD=0 x06;/ /* *设置定时器设置定时器T0T0为方式为方式2 2计数计数* */ / TH0=0 xffTH0=0 xff;/ /* *给给T0T0装入初值装入初值* */ / TL0=0 xffTL0=0 xff; / /* *给给T0T0装入初值装入初值* */ / ET0=1ET0=1; / /* *允许允许T0T0中断中断* */ / EA=1EA=1; / /* *总中断开总中断开* */ / TF0=0TF0=0;/ /* *T0T0中断溢出标志位清中断溢出标志位清0 0* */ / TR0=1TR0=1/ /* *接通接通T0 T0 计

38、数计数* * / / while (1) while (1) / /* *无限循环等待无限循环等待* * / / / /* *以下为定时器以下为定时器T0T0的中断服务程序的中断服务程序* */ / void T0_int(void) interrupt 1 using 0void T0_int(void) interrupt 1 using 0 / /* *外中断处理部分外中断处理部分* */ / 36 6.4.4 P1.0上产生周期为上产生周期为2ms的方波的方波 【例例6-4】系统时钟为系统时钟为12MHz,编程实现从,编程实现从P1.0引脚上输出引脚上输出 一个周期为一个周期为2ms的

39、方波,如的方波,如图图6-14所示。所示。 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为2ms的方波,定时器应产生的方波,定时器应产生 1ms的周期性的定时,定时对的周期性的定时,定时对P1.0求反。选择定时器求反。选择定时器T0,方,方 式式1定时,采用中断方式,定时,采用中断方式,GATE不起作用。不起作用。 37 图图6-14 定时器控制定时器控制P1.0输出一个周期为输出一个周期为2ms的方波的方波 计算计算T0的初值计算:的初值计算: 设设T0的初值为的初值为X,则,则 (216 X) 1 106 = 1 103= 65536X =1000 则初值为:则初值为:655

40、361000=64536, 因此因此 TH0=(65536 1000) /256 , TL0=(65536 1000) %256。 参考程序如下:参考程序如下: 38 #include sbit P1_0=P10; void main(void) TMOD=0 x01;/*设置定时器设置定时器T0为方式为方式2计数计数*/ P1_0=0; TH0=(65536 1000) /256;/*给给T0装入初值装入初值*/ TL0=(65536 1000) %256; /*给给T0装入初值装入初值*/ ET0=1; /* 允许允许T0中断中断 */ EA=1; /* 总中断开总中断开 */ TR0=1

41、/* 接通接通T0 计数计数 * / do while (1); /* 无限循环等待无限循环等待 * / void T0_int(void) interrupt 1 using 1 P1_0=! P1_0; TH0=(65536 1000) /256; TL0=(65536 1000) %256; 39 6.4.5 P1.1上产生周期为上产生周期为1s的方波的方波 【例例6-5】假设系统时钟为假设系统时钟为12MHz,编程实现从,编程实现从P1.1引脚引脚 上上输出一个周期为输出一个周期为1s的方波。的方波。 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为1s的方波,定时器应产的

42、方波,定时器应产 生生500ms的周期性定时,定时到则对的周期性定时,定时到则对P1.0求反。由于定时时求反。由于定时时 间较长,用定时器不能直接实现,直接定时时间最长的就是间较长,用定时器不能直接实现,直接定时时间最长的就是 方式方式1,仅为,仅为65ms(系统时钟系统时钟12MHz)多一点。多一点。 实现:实现:T0定为定为10ms定时,每定时,每10ms对对P1.0求反一次,求反一次, P1.0输出的脉冲加到定时器输出的脉冲加到定时器T1的计数输入脚的计数输入脚P3.5(T1脚)脚) ,作为计数输入,定时,作为计数输入,定时500ms需计数需计数50次。次。T1设为方式设为方式2计计 数

43、,初值数,初值X为:为:28X=50,则,则X=206, 40 所以所以TH1= TL1=206。T0设为方式设为方式1定时,则控制字为定时,则控制字为 61H。定时器。定时器T0和和T1均采用中断方式工作。均采用中断方式工作。 参考程序如下:参考程序如下: #include sbit P1_0=P10; sbit P1_1=P11; void main(void) TMOD=0 x61;/*设置定时器设置定时器T0为方式为方式1定时,定时,T1为方式为方式2计数计数*/ P1_0=0; TH0=(65536 10000) /256;/*给给T0装初值装初值*/ TL0=(65536 1000

44、0) %256; TH1=206;/*给给T1装初值装初值*/ TL1=206; 41 EA=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_int(void) interrupt 3 P1_1=! P1_1; ;/* P1.1脚产生脚产生1s的方波的方波*/ 。 42 6.4.6 T1控制发出控制发出1KHz的音频信号的音频信号 【例例6-6】 利用定时器利用定时器T1的中断来控制蜂鸣器发出的中断来控制蜂鸣器发出1KHz的音频的音频 信号,电路图见信号,电路图见图图6-15。 假设系统时钟为假设系统时钟为11.0592MHz,则每个脉冲的周期为,则每个脉冲的周期为 12/11.0592=1.085s。1KHz的音频信号周期为的音频信号周期为1ms,因此,因此 要计数的脉冲数为要计数的脉冲数为1000/1.085=921次。所以次。所以T1的初值:的初值: TH1=(65536 921)

温馨提示

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

最新文档

评论

0/150

提交评论