收藏 分享(赏)

单片机C语言编程(定时器计数器).ppt

上传人:精品资料 文档编号:8552872 上传时间:2019-07-02 格式:PPT 页数:101 大小:1.07MB
下载 相关 举报
单片机C语言编程(定时器计数器).ppt_第1页
第1页 / 共101页
单片机C语言编程(定时器计数器).ppt_第2页
第2页 / 共101页
单片机C语言编程(定时器计数器).ppt_第3页
第3页 / 共101页
单片机C语言编程(定时器计数器).ppt_第4页
第4页 / 共101页
单片机C语言编程(定时器计数器).ppt_第5页
第5页 / 共101页
点击查看更多>>
资源描述

1、第6章 MCS-51单片机定时器/计数器,本章制作:刘晓霞,第6章 MCS-51单片机定时器/计数器,目 录6.1 MCS-51定时器/计数器的结构及原理 6.2 定时器T0、T1 6.3 定时器T2 6.4 定时器应用举例,本章主要讨论MCS-51单片机定时器/计数器的逻辑结构和工作原理。内容主要有MCS-51单片机定时器T0、T1、T2的逻辑结构,工作方式的选择和应用。本章为单片机的主要内容,也是第七章串行口的学习的基础。,第6章 MCS-51单片机的定时器/计数器,6.1 MCS-51单片机定时器/计数器的结构及原理,主要内容6.1.1 MCS-51单片机定时器的结构 6.1.2 MCS

2、-51单片机定时器的工作原理 6.1.3 定时器/计数器的控制寄存器,6.1.1 MCS-51单片机定时器的结构,MCS-51单片机定时器/计数器逻辑结构图:,6.1.1 MCS-51单片机定时器的结构,MCS-51主要由如下构成: 三个16位的可编程定时器/计数器:定时器/计数器0、1和2。 每个定时器有两部分构成:THx和TLx 特殊功能寄存器T2MOD和T2CON ,主要对T2进行控制。 特殊功能寄存器TMOD和TCON ,主要对T0和T1进行控制。,6.1.1 MCS-51单片机定时器的结构,引脚P3.5、P3.4、P1.0,输入计数脉冲。 定时器T0、T1和T2是3个中断源,可以向C

3、PU 发出中断请求。 定时器/计数器T2增加了两个8位的寄存器: RCAP2H和RCAP2L。 特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。,6.1.2 MCS-51单片机定时器的工作原理,定时器/计数器T0、T1、T2 的内部结构简图如下图所示。,6.1.2 MCS-51单片机定时器/计数器的工作原理,从上图可以看出:定时器的实质是一个加1计数器。C/T =0 ,为定时器方式。计数信号由片内振荡电路提供,振荡脉冲12分频送给计数器,每个机器周期计数器值增1。例如:如果晶振频率为12MHz,则最高计数频率为0.5MHz,6.1.2 MCS-51单片机定时器/计数器的工作原理,C/T

4、=1 ,为计数方式。计数信号由Tx引脚(P3.4、P3.5和P1.0)输入,每输入一有效信号,相应的计数器中的内容进行加1。 控制信号TRx=1时,定时器启动。 当定时器由全1加到全0时计满溢出,从0开始继续计数,TFx=1 ,向CPU申请中断。,6.1.3 定时器/计数器的方式和控制寄存器,1、T0、T1 工作模式寄存器TMOD 功能:确定定时器的工作模式。 其格式如图6-3所示:,GATE外部门控制位。GATE1,使用外部控制门。 TRx=1, P3.2(P3.3)=1时,启动定时器。,6.1.3 定时器/计数器的方式和控制寄存器,GATE0,不使用外部门控制计数器 C/T定时或计数方式选

5、择位 。C/T0时,为定时器C/T1时,为计数器采样过程:CPU在每机器周期S5P2期间,输入信号进行采样。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,随后的机器周期S3P1期间,新的计数值装入计数器。,6.1.3 定时器/计数器的方式和控制寄存器,M1、M0工作模式选择位。 如下表所示:,6.1.3 定时器/计数器的方式和控制寄存器,2、T0、T1的控制寄存器TCON,TF1、TF0:T1、T0的溢出标志位计数溢出,TFx=1。中断方式:自动清零;查询方式:软件清零。,6.1.3 定时器/计数器的方式和控制寄存器,TR1、TR0:T1、T0启停控制位。置1,启动定时器;清

6、0,关闭定时器。 IE1、IE0:外部中断1、0请求标志位 IT1、IT0:外部中断1、0触发方式选择位 注意: GATE=1 ,TRx与P3.2(P3.3) 的配合。,6.2 定时器T0、T1的工作模式及应用,主要内容6.2.1 模式0的逻辑结构及应用 6.2.2 模式1的逻辑结构及应用 6.2.3 模式2的逻辑结构及应用 6.2.4 模式3的逻辑结构及应用,6.2.1 模式0的逻辑结构及应用,M1M000,选择模式0。逻辑结构如图6-5所示。(以T0为例)T0的结构:13位定时器/计数器。由TH0的8位、TL0的低5位构成(高3位未用)工作过程:TL0溢出后向TH0进位,TH0溢出后将TF

7、0置位,并向CPU申请中断。定时时间=(213-定时初值)机器周期最大定时时间:213机器周期,6.2.1 模式0的逻辑结构及应用,C/T=1,计数方式。计数脉冲由P3.4引脚输入。 C/T=0时,定时方式。,图6-5 模式0的逻辑结构图,6.2.2 模式1的逻辑结构及应用,M1M001时,选择模式1。逻辑结构如下页图所示。T0的结构:16位定时器/计数器。TL0:存放计数初值的低8位。TH0存放计数初值的高8位; 定时时间=(216-定时初值)机器周期最大定时时间:216机器周期,6.2.2 模式1的逻辑结构及应用,工作过程:当TL0计满时,向TH0进1;当TH0计满时,溢出使TF0=1,向

8、CPU申请中断。MCS-51单片机之所以设置几乎完全一 样 的方式0和方式1,是出于与 MCS-48单片机兼容的。,6.2.3 模式2的逻辑结构及应用,M1 M0 10时,选择模式2。逻辑结构如图6-7所示。T0的结构:TL0:8位的定时器/计数器;TH0:8位预置寄存器,用于保存初值。工作过程:当TL0计满溢出时,TF0置1,向CPU发出中断请求;同时引起重装操作(TH0的计数初值送到TL0),进行新一轮计数。,6.2.3 模式2的逻辑结构及应用,图6-7 模式2的逻辑结构图,6.2.3 模式2的逻辑结构及应用,定时时间=(28 - 初值)机器周期最大定时时间=28 机器周期 优点:模式2能

9、够进行自动重装载。模式0和1计数溢出后,计数器为全0。循环定时或计数时,需要重新设置初值。 说明:在模式2能够满足计数或定时要求时,尽可能使用模式2。,6.2.4 模式3的逻辑结构及应用,1、T0模式3的结构特点M1 M0 11,选择模式3。逻辑结构如图 6-8和6-9所示:结构: TL0、TH0分为两个独立的8位计数器TL0: 8位定时器/计数器使用T0所有的资源和控制位TH0:8位定时器使用T1所有的资源(中断向量、中断控制ET1、PT1)和控制位 (TR1、TF1),6.2.4 模式3的逻辑结构及应用,图6-8 模式3下T0的逻辑结构图,6.2.4 模式3的逻辑结构及应用,2、T0模式3

10、时T1的工作模式T1可以模式0模式2工作。 T1的结构如图6-9所示 由于TF1及中断矢量被TH0占用,所以T1仅用作波特率发生器或其它不用中断的地方。T1作波特率发生器,其计数溢出直接送至串行口。设置好工作方式,串行口波特率发生器开始自动运行。TMOD中T1的M1M0=11,T1停止工作。,6.2.4 模式3的逻辑结构及应用,图6-9 模式3下,T1的逻辑结构图,思考:T0工作在模式3,T1怎么进行方式设置?,串行口,6.2.4 模式3的逻辑结构及应用,1、定时器/计数器工作模式的选择方法 (1)首先计算计数值N (2)确定工作模式原则是尽可能地选择模式2 若 N 256选择模式2,否则选择

11、模式1 (3)如果需要增加一个定时器/计数器选择模式3。,6.2.4 模式3的逻辑结构及应用,2、定时器/计数器初值X的计算方法 因为 X + N = 28或216 所以 X = 28或216-N (1)对定时器 设定时时间为t N = t/机器周期 所以 X = 28或216- t/机器周期 (2)对计数器X = 28或216- N,6.2.4 模式3的逻辑结构及应用,例6-1 设单片机的振荡频率为12MHz,用定时器/计数器0的模式1编程,在P1.0引脚产生一个周期为1000s的方波,定时器T0采用中断的处理方式。 定时器的分析过程。 工作方式选择需要产生周期信号时,选择定时方式。定时时间

12、到了对输出端进行周期性的输出即可。工作模式选择根据定时时间长短选择工作模式。首选模式2,可以省略重装初值操作。,6.2.4 模式3的逻辑结构及应用,定时时间计算:周期为1000s的方波要求定时器的定时时间为500s,每次溢出时,将P1.0引脚的输出取反,就可以在P1.0上产生所需要的方波。 定时初值计算:振荡频率为12MHz,则机器周期为1s。 设定时初值为X, (65536-X)1s=500s X=65036=0FE0CH 定时器的初值为:TH0=0FEH,TL0=0CH,6.2.4 模式3的逻辑结构及应用,C语言程序: #include /包含特殊功能寄存器库 sbit P1_0=P10;

13、 /进行位定义 void main( ) TMOD=0x01; /T0做定时器,模式1TL0=0x0c;TH0=0xfe; /设置定时器的初值ET0=1; /允许T0中断EA=1; /允许CPU中断TR0=1; /启动定时器while(1); /等待中断 ,6.2.4 模式3的逻辑结构及应用,void time0_int(void) interrupt 1 /中断服务程序TL0=0x0c;TH0=0xfe; /定时器重赋初值P1_0=P1_0; /P1.0取反,输出方波 汇编语言程序:ORG 0000HSJMP MAINORG 000BH LJMP TIME0,6.2.4 模式3的逻辑结构及应

14、用,MAIN: MOV TMOD,#01H ;T0定时,模式1MOV TL0,#0CH ;置定时初值MOV TH0,#0FEH SETB ET0 ;定时器T0开中断SETB EA ;CPU开中断SETB TR0 ;启动定时器T0SJMP $ ;等待定时器溢出TIME0: ;中断服务程序MOV TL0,#0CH MOV TH0,#0FEH ;重装定时初值CPL P1.0 ;P1.0取反RETI ;中断返回END,6.2.4 模式 3的逻辑结构及应用,例6-2 设单片机的振荡频率为12MHz,用定时器/计数器0编程实现从P1.0输出周期为500s的方波。 分析:方法同例6-1定时时间:方波周期为5

15、00s,定时250s。模式选择:定时器0可以选择模式0、1和2。模式2最大的定时时间为256s,满足250s的定时要求,选择模式2。,6.2.4 模式 3的逻辑结构及应用,(1)初值计算(256-X)1s=250sX=6; 则TH0=TL0=6 (2)程序: 采用中断处理方式的程序 :C语言程序 : # include /包含特殊功能寄存器库sbit P1_0=P10;,6.2.4 模式3的逻辑结构及应用,void main( ) TMOD=0x02; /选择工作模式TL0=0x06;TH0=0x06; /为定时器赋初值ET0=1; /允许定时0中断EA=1;TR0=1; /启动定时器0whi

16、le(1); /等待中断 void time0_int(void) interrupt 1 P1_0=P1_0; ,6.2.4 模式3的逻辑结构及应用,汇编语言程序:ORG 0000HLJMP MAIN ORG 000BH ;中断处理程序CPL P1.0RETI ORG 0030H ;主程序 MAIN: MOV TMOD,#02H MOV TL0,#06H MOV TH0,#06HSETB ET0 ;允许定时器0中断SETB EA ;允许CPU中断SETB TR0 ;启动定时器0SJMP $ ;等待中断END,6.2.4 模式3的逻辑结构及应用,采用查询方式处理的程序:C语言程序: # inc

17、lude sbit P1_0=P10; void main() TMOD=0x02;TL0=0x06;TH0=0x06;TR0=1;while (1) while(!TF0) ; /查询计数溢出 TF0=0;P1_0=P1_0; ,6.2.4 模式3的逻辑结构及应用,汇编语言程序: MAIN: MOV TMOD,#02H ;主程序MOV TL0,#06HMOV TH0,#06HSETB TR0 LOOP: JNB TF0,$ ;查询计数溢出CLR TF0CPL P1.0 SJMP LOOPEND,6.3 定时器/计数器T2,主要内容6.3.1 定时器T2的特殊寄存器 6.3.2 定时器T2的工

18、作方式及结构,6.3.1 定时器/计数器T2的特殊寄存器,89C52中的T2是一个16位的、具有自动重装载和捕获能力的定时器/计数器。T2的结构:除TL2、TH2和控制寄存器T2CON及T2MOD之外,还增加了捕获寄存器RCAP2L(低字节)和RCAP2H(高字节)。T2的计数脉冲源有两个:一个是内部机器周期,另一个是由T2(P10)端输入的外部计数脉冲。,6.3.1 定时器/计数器T2的特殊功能寄存器,T2有4种工作方式自动重装、捕获和波特率发生器、可编程时钟输出。增加了两个引脚:T2(P1.0),T2EX(P1.1)。 1、定时器/计数器2的控制寄存器T2CON可位寻址和字节寻址。功能:选

19、择T2的工作方式和工作模式。 允许位寻址和字节寻址。其格式如下:,6.3.1 定时器/计数器T2的特殊功能寄存器,TF2 :定时器/计数器2的溢出中断标志位T2溢出时置位,申请中断。软件清零。波特率发生器方式下,RCLK1或TCLK1时,定时器溢出不对TF2进行置位。EXF2(T2CON.6):定时器/计数器2外部触发标志位,6.3.1 定时器/计数器T2的特殊功能寄存器,EXEN21,且T2EX引脚上有负跳变将触发捕获或重装操作,EXF2=1,向CPU发出中断请求。软件复位。 RCLK:串行口接收时钟允许标志位 RCLK=1时,T2溢出信号分频后做串行口工作在模式1和3的接收波特率。 RCL

20、K=0时,T1溢出信号分频信后做串行口接收波特率。,6.3.1 定时器/计数器T2的特殊功能寄存器,TCLK:串行口发送时钟允许标志位 TCLK=1时,T2溢出信号分频后做串行口工做在模式1和3的发送波特率。 TCLK=0时,T1溢出信号分频后做串行口的发送波特率。,6.3.1 定时器/计数器T2的特殊功能寄存器,EXEN2 ( T2CON3 ) :定时器/计数器2外部允许标志位 EXEN2=1,定时器/计数器2没有工作在波特率发生器方式,如T2EX(P1.1)引脚上产生负跳变时,将激活“捕获”或“重装”操作。EXEN2=0,T2EX引脚上的电平变化对定时器/计数器2不起作用。,6.3.1 定

21、时器/计数器T2的特殊功能寄存器,TR2 :定时器/计数器2启动控制位 TR2=1,启动定时器/计数器2。 TR2=0,停止定时器/计数器2。 C/T2:T2的定时器或计数器方式选择位。 C/T2=1,T2为计数器。对T2(P1.0)引脚输入脉冲进行计数(下降沿触发);当T2(P1.0)产生负跳变时,计数器增1。,6.3.1 定时器/计数器T2的特殊功能寄存器,C/T2=0, T2做定时器。 每个机器周期T2加1。 CP/RL2 :捕获和重装载方式选择控制位捕获方式:CP/RL2=1,EXEN2=1,T2EX(P1.1)引脚负跳变将触发捕获操作。重装载方式: CP/RL2=0,EXEN2=1,

22、T2EX引脚有负跳变或T2计满溢出时,触发自动重装操作。,6.3.1 定时器/计数器T2的特殊功能寄存器,RCLK=1或TCLK=1时,定时器/计数器2做波特率发生器。CP/RL2标志位不起作用,当T2溢出时强制自动装载。 2、数据寄存器TH2、TL2 8位的数据寄存器,组成16位定时器/计数器。 字节寻址,地址分别为CDH和CCH。 复位后,TH2=00H,TL2=00H。 3、捕获寄存器RCAP2H和RCAP2L,6.3.1 定时器/计数器T2的特殊功能寄存器,RCAP2H:高8位捕获寄存器,字节地址为CBH。 RCAP2L:低8位捕获寄存器,字节地址为CAH。 捕获方式,保存当前捕获的计

23、数值。 重装方式,保存重装初值。 复位后均为00H。,6.3.1 定时器/计数器T2的特殊功能寄存器,功能: 对定时器的加1减1计数方式进行设置。选择是否工作在可编程时钟输出方式。 复位后为00B。,4、定时器/计数器2的模式控制寄存器T2MOD,6.3.1 定时器/计数器T2的特殊功能寄存器,T2MOD中标志 :保留位,未定义,为未来功能扩展用。 T2OE:定时器/计数器2输出启动位。 T2OE1,工作在可编程时钟输出方式。 输出方波信号至T2(P1.0)引脚。,DCEN:定时器/计数器2向上/向下计数控制位。 当DCENl,T2自动向下(递减)计数 当DCEN0, T2自动向上(递增)计数

24、,6.3.2 定时器/计数器T2的工作方式,定时器/计数器2是一个16位的加1计数器,具有四种工作方式。如表6-2所示:方式选择寄存器: T2CON和T2MOD。 注意:无论T2做定时器还是计数器,都具有捕获和自动重装的功能。,6.3.2 定时器/计数器T2的工作方式,6.3.2 定时器/计数器T2的工作方式,一、16位自动重装方式 CPRL20,DCEN=0时,选择自动重装方式。结构如下图所示: T2计满溢出时, TF2置1,申请中断。打开重装载三态缓冲器,将RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。 EXEN21且T2EX(P11)端的信号有负跳变时, EXF2置1,申请

25、中断。引起重装载操作。,6.3.2 定时器/计数器T2的工作方式,6.3.2 定时器/计数器T2的工作方式,CP/RL20,DCEN=1时,定时器/计数器2既可以增量(加1)和减量(减1)计数。 T2EX电平控制计数方向:当T2EX(P1.1)引脚输入为高电平1时,T2执行增量(加1)计数。增量计数过程:计满溢出时,一方面置位TF2,向主机请求中断处理;另一方面将存放在寄存器RCAP2L和RCAP2H中的16位计数初值自动重装TL2和TH2中,进行新一轮加1计数。,6.3.2 定时器/计数器T2的工作方式,6.3.2 定时器/计数器T2的工作方式,T2EX(P1.1)引脚为低电平0时,定时器/

26、计数器2执行减量(减1)计数。 减量计数过程:是用FFH分别初始化(预置)TL2和TH2,用0FFFFH减去计数次数所求得的下限初始化RCAP2L和RCAP2H。计数器不断减1,直至计数器中的值等于寄存器RCAP2L和RCAP2H中预置的值时,计满溢出。 0FFH重装TL2和TH2,进行新一轮的计数操作,6.3.2 定时器/计数器T2的工作方式,增量(加1)计数是以65536为模。对计数次数求补得到计数初值,此初值初始化TL2、TH2和RCAP2L、RCAP2H陷阱寄存器。 在电平控制重装方式下,无论减量增量计数,溢出时TF2置1,EXF2状态翻转,相当于17位计数器的最高位。,6.3.2 定

27、时器/计数器T2的工作方式,二、捕获方式 当CPRL2l,选择捕获方式。存在以下两种情况。T2结构如下图所示,有两种情况: EXEN=0定时器2的计数溢出,置位TF2,申请中断。EXEN21T2EX(P11)端的信号有负跳变时,触发捕获操作。将TH2和TL2的内容自动捕获到寄存器RCAP2H和RCAP2L中同时EXF2置1,申请中断。,6.3.2 定时器/计数器T2的工作方式,图6-14 捕获方式的逻辑结构图,6.3.2 定时器/计数器T2的工作方式,三、波特率发生器方式RCLK=1或TCLK 1时,选择波特率发生器方式。结构如下图所示,从图可以看出: RCLK=1,T2为接收波特率发生器。

28、TCLK=1,T2为发送波特率发生器。C/T20,选用内部脉冲。C/T21,选用外部脉冲。T2(P1.0)输入负跳变时,计数值增l。,6.3.2 定时器/计数器T2的工作方式,6.3.2 定时器/计数器T2的工作方式,计数溢出时,触发自动装载操作。 RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。 T2用做波特率发生器时,TH2的溢出不会将TF2置位,不产生中断请求。 T2EX还可以作为一个附加的外部中断源。T2用做波特率发生器时,若EXEN2=1,当T2EX有负跳变时,EXF2置1,由于不发生重装载或捕获操作,此时T2EX引脚可外接一中断源。,6.3.2 定时器/计数器T2的工作

29、方式,定时器/计数器T2作为波特率发生器使用时的编程方法如下: RCAP2H=0x30; /设置波特率 RCAP2L=0x38; TCLK=1; /选择定时器2的溢出脉冲 作为波特率发生器 注意:在波特率发生器工作方式下,在 T2计数过程中不能再读/写 TH2和TL2的内容。,6.3.2 定时器/计数器T2的工作方式,四、可编程时钟输出方式 T2OE=1时,C/T2=0时,T2工作于时钟输出方式。结构如下图所示:工作过程:当T2计满溢出时,T2(P1.0)引脚状态翻转,从而输出频率可调、精度很高的方波信号;同时使RCAP2H和RCAP2L寄存器内容装入TH2和TL2寄存器中,重新计数。 在时钟

30、输出方式下,T2溢出时不置位TF2。,6.3.2 定时器/计数器T2的工作方式,当EXEN2=1,T2EX(P1.1)引脚有负跳变时,EXF2将置1。(同波特率发生器方式) 从P1.0引脚输出的时钟信号频率为: Fosc/(4(65536-(RCAP2H,RCAP2L),6.3.2 定时器/计数器T2的工作方式,图6-16 T2时钟输出方式下的逻辑结构图,6.4 定时器应用举例,主要内容6.4.1 定时器的初始化 6.4.2 定时器应用举例,6.4.1 定时器的初始化,在使用定时器/计数器前,应首先对其进行初始化编程。一、定时器的初始化步骤 1、选择工作模式和工作方式。设置TMOD、T2MOD

31、。 2、设置定时器的计数初值。设置THx和TLx,RCAP2H和RCAP2L。 3、中断设置:设置IE。 4、启动定时器。设置TCON或T2CON。可以使用位操作指令。例如:SETB TRx。,6.4.1 定时器的初始化,二、定时器/计数器初值计算根据定时器/计数器的模式和方式,计算计数初值(注意T2) 计数器的长度为n,则计数的最大值为2n 。1、工作于定时方式 计数脉冲由内部的时钟提供,每个机器周期进行加1。 设晶振频率为fosc,则计数脉冲的频率为fosc/12,计数脉冲周期T=1/(fosc/12)。,6.4.1 定时器的初始化,如果进行定时时间为t,计数初值为X,则: t=( 2n

32、-X)12/fosc 2、工作于计数方式当工作在计数方式时,对外部脉冲计数。利用计数器计数结束产生溢出的特性,来计算初值X 。则有: X= 2n计数次数,6.4.2 定时器的应用举例,例6-3 利用定时器T1的模式2对外部信号进行计数,要求每计满100次,将P1.0端取反。 分析:T1工作在计数方式。脉冲数100。 模式2,模式字TMOD=0110b。 1、初值计数: 在模式2下:X= 28-100=156D=9CH 2、C语言程序: #include sbit p1_0=p10; /进行位定义,6.4.2 定时器的应用举例,void main ( ) TMOD=0x60; /T1工作在模式2

33、,计数TL1=0x9c; /装入计数(重装)初值TH1=0x9c;ET1=1; /允许定时器1中断EA=1; /开中断TR1=1 ; /启动定时器1while(1); ,6.4.2 定时器的应用举例,void time0_int(void) interrupt 3 /中断服务程序 P1_0=P1_0; /取反,产生方波 3、汇编语言程序: MAIN: MOV TMOD,#60H ;T1工作在模式2,计数MOV TL1,#9CH ;装入计数初值MOV TH1, #9CH ;装入计数(重装)初值,6.4.2 定时器的应用举例,MOV IE,#88H ;允许定时器中断SETB TR1 ;启动定时器H

34、ERE: SJMP HERE ;等待中断中断服务程序:ORG 001BH ;中断服务程序入口地址CPL P1.0 ;对P1.0引脚信号取反RETI ;中断返回,6.4.2 定时器的应用举例,例6-4 某一应用系统需要对INT0引脚的正脉冲测试其脉冲宽度。 分析:可以设置定时器/计数器0为定时方式,工作在模式1,且置位GATE位为1,将外部需测试的脉冲从INT0引脚输入,设机器周期为1s。,6.4.2 定时器的应用举例,C语言程序: 计算脉宽和处理程序略。 #include sbit P3_2=P32; unsigned int_test( ) TMOD=0x09;TL0=0x00;TH0=0x

35、00;while(P3_2);TR0=1;,6.4.2 定时器的应用举例,while(!P3_2);while(P3_2);TR0= 0;return (TH0*256+TL0); 汇编语言程序: INT00: MOV TMOD,#09H MOV TL0,#00H ;设置计数初值MOV TH0,#00H LOP1: JB P3.2,LOP1 ;等待P3.2变低电平,6.4.2 定时器的应用举例,SETB TR0 ;启动T0计数 LOP2: JNB P3.2,LOP2 ;等待P3.2变成高电平 LOP3: JB P3.2,LOP3 ;等待P3.2变成低电平 CLR TR0 ;停止T0计数MOV

36、A,TL0 ;计数器TL0中的内容送A MOV B,TH0 ;计数器TH0中的内容送B本题也可以使用定时器/计数器2工作在捕获方式下进行脉宽测试。注意:T2脉宽测试必须在定时器未溢出的情况下才有效。,6.4.2 定时器的应用举例,例6-5 某应用系统要求通过P1.0和P1.1口分别输出脉冲周期为200s和400s的方波,fosc=6MHz。分析:需要两个定时器。可以选择使用定时器/计数器0,设置为定时模式,工作模式3,分成两个8位的定时器。1、计算定时初值。t=(256 -X)12/fosc 初值分别为0CEH和9CH。,6.4.2 定时器的应用举例,2、C语言程序: # include sb

37、it P1_0=P10; /进行位定义 sbit P1_1=P11; void main( ) TMOD=0x03; /设置T0定时,工作在模式3TL0=0xce; /设置TL0计数初值,产生 200s方波TH0=0x9c; /设置TH0计数初值,产生 400s方波ET0=1; /设置定时器0中断允许位,6.4.2 定时器的应用举例,ET1=1; /设置定时器/计数 /器1中断允许位EA=1; /设置总中断允许位TR0=1; /启动定时器T0TR1=1; /启动定时器T1while(1); /等待溢出 void time0L_int(void) interrupt 1 /T0中断服务程序TL0

38、=0xce; /定时器重赋初值P1_0=P1_0; /产生方波 ,6.4.2 定时器的应用举例,void time0H_int(void) interrupt 3 /T1中断服务程序TH0=0x9c; /定时器重赋初值P1_1=P1_1; /产生方波 3、汇编语言程序: 主程序:ORG 0000HLJMP MAIN,6.4.2 定时器的应用举例,ORG 000BHLJMP T0SORG 001BHLJMP T1S MAIN: MOV TMOD,#03H ; 设置T0定时,模式3MOV TL0,#0CEH ;设置TL0计数初值,产 生200s方波MOV TH0, #9CH ;设置TH0计数初值,

39、产 生400s方波,6.4.2 定时器的应用举例,SETB EA ;设置总中断允许位SETB ET0 ;允许定时器0中断 SETB ET1 ;允许定时器1中断SETB TR0 ;启动定时器T0SETB TR1 ;启动定时器T1 T0中断服务程序: T0S: MOV TL0,#0CEH;重新设置定时初值CPL P1.0 ;P1.0口的输出取反RETI,6.4.2 定时器的应用举例,T1中断服务程序: T1S: MOV TH0,#9CH ;重新设置定时初值CPL P1.1 ;对P1.0口输出信号取反RETI ;中断返回 例6-6 利用定时器精确定时1s控制LED以秒为单位闪烁。已知fosc=12M

40、Hz。 分析:定时器/计数器在定时方式下,各个模式最大定时时间分别为:,6.4.2 定时器应用举例,定时器0=(8192-0)12/fosc=8.192ms定时器1=(65536-0)12/fosc=65.536ms定时器2=(256-0)12/fosc=0.256ms 选择模式1。定时时间为10ms,当10ms的定时时间到,TF1=1,连续定时100次,调用亮灯函数;再连续定时100次,调用灭灯函数。循环工作,即达到1s闪烁1次的效果。 1、初值计算: (256-X)12/fosc=10ms 初值X=55536=0D8F0H,6.4.2 定时器应用举例,2、程序设计: C语言程序: #inc

41、lude sbit LED=P10; unsigned char i; void main() LED=0; /定义灯的初始状态为灭TMOD=0x10; /设置定时器1工作在模式1TL1=0xf0; TH1=0xd8; /设置定时初值TR1=1; /启动定时器1,6.4.2 定时器应用举例,ET1=1; /允许定时器1中断 EA=1; while(1); void timer1_int() interrupt 3 TL1=0xf0; /定时器重装初值TH1=0xd8; if(+i=100) LED=LED;i=0; ,6.4.2 定时器应用举例,汇编语言程序: 选择硬件定时10ms,设置一计数

42、单元,存放计数值100,循环定时100次。ORG 0000HLJMP MAINORG 001BHLJMP TIMER MAIN:MOV R0,#100 ;存放计数值100MOV TMOD,#10H,6.4.2 定时器应用举例,MOV TL1,#0F0HMOV TH1, #0D8HSETB ET1SETB EASETB TR1CLR P1.0SJMP $ TIMER: MOV TL1,#0F0HMOV TH1,#0D8HDJNZ R0,NEXT MOV R0,#100CPL P1.0 NEXT: RETIEND,6.4.2 定时器应用举例,例6-7 用定时器/计数器2从P1.0产生一个5000H

43、z的方波,假设晶振频率fosc为12MHz。 分析:当T2MOD的T2OE=1,T2CON的C/T2=0时,T2工作于时钟输出方式。T2溢出信号自动触发T2(P1.0)引脚状态翻转从P1.0引脚输出频率可调、精度高的方波信号。,6.4.2 定时器应用举例,溢出后,RCAP2H和RCAP2L寄存器内容装入TH2 和TL2寄存器中,重新计数,以便获得准确的溢出信号。输出信号频率为: fosc/(4(65536-(RCAP2H,RCAP2L) 方波频率为5000Hz。 计数初值为65536-600=64936。 C语言程序: # include sfr16 RCAP2=0xca; /特殊寄存器定义,

44、6.4.2 定时器应用举例,sfr16 T2=0xcc; sfr T2MOD=0xc9; void main() RCAP2=64936;T2=64936;T2MOD=2;TR2=1;while(1); 汇编语言程序:ORG 0000HLJMP MAIN,6.4.2 定时器应用举例,MAIN: MOV T2MOD,#02H ;T2工作在可编程时钟输 出方式 SETB TR2 ;T2定时且启动T2工作 MOV RCAP2L,#0A8H ;送计数初值的低8位 MOV RCAP2H,#0FDH ;送计数初值的高8位 MOV TL2,#0A8H MOV TH2,#0FDH HERE: SJMP HERE ;等待溢出 END,本章小结本章首先总体简单介绍了MCS-51单片机定时器/计数器的结构、工作原理和相关的寄存器。然后重点研究了MCS-51增强型单片机定时器/计数器T0、T1、T2的不同工作方式的结构和工作原理。最后应用实例,讨论了各个定时器/计数器不同工作方式的应用。,本章小结(续)MCS-51单片机定时器/计数器是单片机中非常重要、应用非常多的部件,一个从事单片机应用开发的人员,单片机是否用得灵活、是否能够充分发挥单片机的功能与作用,与定时器/计数器是否掌握应用得好关系密切。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报