片机定时器与计数器.ppt

上传人:牧羊曲112 文档编号:6426493 上传时间:2023-10-30 格式:PPT 页数:47 大小:411.50KB
返回 下载 相关 举报
片机定时器与计数器.ppt_第1页
第1页 / 共47页
片机定时器与计数器.ppt_第2页
第2页 / 共47页
片机定时器与计数器.ppt_第3页
第3页 / 共47页
片机定时器与计数器.ppt_第4页
第4页 / 共47页
片机定时器与计数器.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《片机定时器与计数器.ppt》由会员分享,可在线阅读,更多相关《片机定时器与计数器.ppt(47页珍藏版)》请在三一办公上搜索。

1、,第五章 单片机定时器 与计数器,Company Logo,单片机定时器与计数器,Company Logo,一、定时/计数器结构,MCS-51单片机定时器/计数器的逻辑结构如图5-1所示。主要由工作方式寄存器TMOD、控制寄存器TCON和初值寄存器TLX、THX等工作部件组成。,Company Logo,等效逻辑结构图,Company Logo,1工作方式寄存器(TMOD 89H),GATE:门控位。GATE=0 启动不受/INT0或/INT1的控制;GATE=1 启动受/INT0 或/INT1 的控制。C/:外部计数器/定时器方式选择位。C/=0 定时方式;C/=1 计数方式。M1M0:工作

2、模式选择位。,TMOD,Company Logo,M1M0:工作模式选择位。,Company Logo,2、初值寄存器 TH0,TL0,TH1,TL1,51子系列单片机内有两个十六位增一 定时/计数器,TH0,计数值高八位,TL0,计数值低八位,TH1,计数值高八位,TL1,计数值低八位,最大计数器值M65535,Company Logo,3定时/计数器控制寄存器(TCON 88H),TR0:定时/计数器0运行控制位。软件置位/复位。与GATE有关分两种情况:GATE=0 时:若TR0=1,开启T0;若TR0=0,停止T0。GATE=1 时:若TR0=1 且/INT0=1时,开启T0;若TR0

3、=1 但/INT0=0,则不能开启T0。若TR0=0,停止T0计数。TR1:定时/计数器1运行控制位。用法与TR0类似。TF0/TF1:定时/计数溢出标志。1:有溢出,0:无溢出IE0/IE1:外部中断请求标志。1:有请求,0:无请求IT0/IT1:外部中断触发方式。1:下降沿,0:低电平,Company Logo,二、定时器/计数器的工作方式,工作方式 M1M0=00,工作方式0:13位计数。TH的8位和TL的低5位,Company Logo,在工作方式0下,计数器的计数值由下式确定:213-X=8192-X计数值范围是:18192(213)定时器的定时值由下式确定:T=N*Tcy=(819

4、2-X)*Tcy,例:单片机晶振频率fosc=12MHZ定时器0定时1MS,采用方式0时,TCON,TMOD,TH0,TL0的值分别是:,TCON=0 x10,TMOD=0 x00,TH0=(81921000)/32,TL0=(81921000)%32,Company Logo,工作方式的应用:【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式0产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。解:(1)计算计数初值.欲产生周期为600s的等宽方波脉冲,只需在P1.7端以300s为周期交替输出高低电平即可,因此定时时间应为300s。设待求计数初值为N,则:(213-

5、N)210-6=30010-6N=8042=1F6AH01010B用T1实现。将低5位01010B=0A写入TL1,将高8位有效值11111011B=FBH写入TH1中。,Company Logo,(2)TMOD初始化为把定时/计数器1设定为方式0,则M1M0=00。为实现定时功能应使C/T=0,为实现内部定时器启动应使GATE=0,因此设定工作方式控制寄存器TMOD=00H。(3)由TR1启动和停止定时器TR1=1为启动,TR1=0为停止,Company Logo,C语言参考程序,#include/包含特殊功能寄存器库sbit P1_7=P17;/定义P1.7口,程序中用P1_7代替P1.7

6、。void main()/主函数 IE=0 x00;/关中断TMOD=0 x00;/工作方式设定TR0=1;/启动定时for(;)/无限循环体TH1=0 xFB;TL1=0 x0A;/计数初值设定do while(!TF1)/查询是否溢出,当TF0=1时溢出来,则跳出do-while循环。P1_7=!P1_7;TF1=0;/溢出,P1.7取反,中断标志TF1清0。,Company Logo,中断方式完成,#include/包含特殊功能寄存器库sbit P1_7=P17;/定义P1.7口,程序中用P1_7代替P1.7。void main()/主函数 TMOD=0 x00;/工作方式设定TR0=1

7、;TH1=0 xFB;TL1=0 x0A;ET0=1;EA=1;while(1);/启动定时Void T_0()interrupt 1 using 3 P1_7=!P1_7;TH1=0 xFB;TL1=0 x0A;,Company Logo,2.定时/计数器工作方式1 M1M0=01,P3.4,P3.2,Company Logo,在工作方式1下,计数器的计数值由下式确定:216-X=65536-X计数值范围是:165536(216)定时时间长;时器的定时值由下式确定:T=N*Tcy=(65536-X)*Tcy,定时计数器的工作方式1与方式0基本相同,区别只是方式0是13位计数器,而方式1为了1

8、6位计数器。当要求定时时间较长,13位计数器不能满足要求时,可改用方式1,用16位计数器计数。,Company Logo,工作方式1 应用,【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式1产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。该题目就是用方式1实现例5-1的功能。原理与例5-1相似,只需修改工作方式和计数初值设置即可。,Company Logo,(1)计算计数初值欲在P1.7引脚输出周期为600s的等宽方波脉冲,只需在P1.7端交替输出300s的高低电平即可,因此定时时间应为300s。设计数初值为N,则:(65536-N)210-6=30010-6N

9、=65236将计数初值N的低8位6AH写入TL1;将计数初值N的高8位1FH写入TH1。(2)TMOD初始化题目要求定时器/计数器1为工作方式1,所以M1M0=01;为实现定时功能应使C/=0;为实现定时器内启动,应使GATE=0。此题目不涉及定时器/计数器0,为方便起见,设其各控制位均为0。则工作方式控制寄存器TMOD=10H。(3)启动和停止控制因为定时器/计数器1作定时器,故当TR1=1时,启动计数;当TR1=0时,停止计数。(4)中断的开放/禁止题目中要求用查询方式检查T1的计数溢出状态,故设置IE=00H,以关中断。,Company Logo,3、定时/计数器工作方式2 M1M0=1

10、0,初值自动重装,将TH中的数值装入TL中。,Company Logo,工作在方式下,计数器的计数值由下式确定:28-X=256-X 计数范围为:1256 定时准确定时器的定时值由下式确定:T=N*Tcy=(256-X)*Tcy,Company Logo,工作方式的应用【例】使用定时器T0以方式2产生200微秒定时,在P1.0输出周期为400微秒的连续方波。已知晶振频率fosc=6MHz。(1)计算计数初值(256-N)210-6=20010-6 N=156=9CH(2)TMOD初始化工作方式2时,M1M0=10,实现定时功能C/T=0,内部启动GATE=0。定时器1不用,无关位设定为0,可得

11、TMOD=02H。(3)允许中断(4)TR0 启动定时,Company Logo,C语言参考程序:#include/包含特殊功能寄存器库sbit P1_0=P10;/定义P1.0口,程序中用P1_0代替P1.0。void main()/主函数TCON=0 x00/清TCON,定时器中断标志清零及不允许计数TMOD=0 x02;/设定时器T0工作方式2TH0=0 x9c;TL0=0 x9c;/设初值EA=1;ET0=1;/开中断TR0=1;/启动计数while(1);/无限循环,结束主函数void time0_int(void)interrupt 1/中断函数 P1_0=!P1_0;,Compa

12、ny Logo,、定时/计数器工作方式 功能多,当M1,M0=10时,定时/计数器处于工作方式3,此时,定时/及数器的等效电路如图所示,Company Logo,当T0工作于方式3时,T1只能工作在方式0、方式1或方式2,并且由于已没有计数溢出标志位TF1可供使用,只能把计数溢出直接送给串行口,作串行口的波特率发生器使用。等效电路图如下,波特率发生器,Company Logo,在使用定时/计数器时,应做好4件事:设置TMOD以选择工作方式;计算并设置计数初值THX,TLX;设置IE、IP以规定中断的开放/禁止及优先级;设置TCON以启动/停止定时/计数器的工作。,Company Logo,工作

13、方式的应用【例】假设有一个用户系统中已使用了两个外部中断源,并置定时器 T1 于方式 2,作串行口波特率发生器用,现要求再增加一个外部中断源,当有中断时,累加器加1。并由P1.0 口输出一个5KHz的方波(假设晶振频率为 6 MHz)。,Company Logo,思路,在不增加其它硬件开销时,可把定时/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。由P1.0输出5kHz的方波,即每隔

14、100s使P1.0求反一次。则TH0的初始值:(256-N)210-6=10010-6 N=206,Company Logo,C语言参考程序:#include/包含特殊功能寄存器库sbit P1_0=P10;/定义P1.0口,程序中用P1_0代替P1.0void main()/主函数TMOD=0 x27;/置T0工作方式3,TL0计数器方式;TH0为8位定时器TL0=0 xFF;/送初值,用于外部引脚T0口(P3.4)做新增外部中断TH0=206;/送定时100s的初值TL1=BAUD;/BAUD是根据波特率要求设置的常数TH1=BAUD;TCON=0 x55;/启动定时器 T0、T1,置边沿

15、触发IE=0 x9F;/开放全部中断while(1);/无限循环,结束主函数void TL0INT(void)interrupt 1/中断函数,处理新增的外部中断源TL0=0 xFF;/外部引脚T0引起中断处理程序 void TH0INT(void)interrupt 3/中断函数,处理输出5kHz的方波 TH0=206;/重送初值 P1_0=!P1_0;/P1.0口取反,Company Logo,5.计数器功能,当C/T1时,多路开关接通计数器引脚TX,外部计数脉冲由引脚输入。每一个脉冲过来,计数器的寄存器单元加一。加满之后溢出,满值会根据不同的方式而各不相同。计数方式也受GATE位控制。计

16、数溢出后需重装初值。,Company Logo,例:T0控制LED实现二进制计数,本例对按键的计数不使用查询法,不使用外部中断函数,不使用定时或计数中断函数。而是启用了计数器,连接在T0引脚的按键每次按下时,会使计数寄存器的值递增,其值通过LED以二进制形式显示,Company Logo,#includevoid main()TMOD=0 x05;/定时器0为计数器,工作方式1,最大计数值65535TH0=0;/初值为0TL0=0;TR0=1;/启动定时器while(1)P1=TH0;P2=TL0;,Company Logo,练习:计数器,对P3.5端口进行脉冲计数,计数满100次后产生中断,

17、在P1端口输出100的二进制值。,Company Logo,MCS51单片机有两个定时器计数器,当它们选择计数工作方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1,若把定时器计数器设置成计数工作方式,计数初值设定为满量程,一旦计数从外部引脚输入一个负跳变信号,计数器To或T1加1,产生溢出中断,这样,便可把外部计数输入端T0(P34)或T1(P35)扩展为外部中断源输入。,Company Logo,C语言参考程序:#include/包含特殊功能寄存器库#define uchar unsigned char/定义数据类型uchar i;/定义变量i,作为存放中断函数中加1的记录。void

18、 main()/主函数 TMOD=0 x60;/T1方式2,计数器TL1=0 xFF;/设初值满量程TH1=0 xFF;TR1=1;/启动T1计数ET1=1;/T1中断允许EA=1;/CPU中断开放while(1);/无限循环,结束主函数void INT(void)interrupt 3/中断函数 i+;/中断加1处理 P1=i;/将结果送P1口,Company Logo,四、全自动洗衣机定时控制Proteus仿真,洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。设洗衣机有三段定时时间,分别为:进水阶段定时2秒,洗涤阶段定时4秒,甩干阶段定时2秒。并分别用三个LED发光二极

19、管表示进水、洗涤、甩干三个环节的工作状态。其中如果发光二极管A亮,表示进水工作正在进行;发光二极管B亮,表示洗涤工作正在进行;发光二极管C亮,表示甩干工作正在进行。发光二极管熄灭时,说明相应的定时已到,工作停止。图5-7给出了Proteus仿真电路图。,Company Logo,Company Logo,图5-6中,S表示洗衣机启动开关,开关按下洗衣机开始工作。首先是进水定时控制,表示正在进水的LED发光二极管A点亮。当进水控制的定时时间到时,进水工作停止,发光二极管A灭灯;接着开始洗涤工作定时,发光二极管B点亮;洗涤工作结束后,开始甩干工作定时,发光二极管C点亮。当洗衣功能结束时,三个指示灯

20、都熄灭,表示洗衣工作结束,并接通扬声器LS1鸣声提醒。,Company Logo,C语言参考程序,#include/包含51单片机寄存器定义的头文件sbit P20=P20;/将P20位定义为P2.0引脚sbit P37=P37;/将P37位定义为P3.7引脚unsigned char Countor;/设置全局变量,储存定时器T1中断次数unsigned char f=0;/设置全局变量,作为区分不同阶段的定时void delay1()/延时函数 int q;for(q=0;q500;q+);void main(void)/主函数 if(P20=0)/若P2.0=0,说明键按下,执行语句,否

21、则一直等待。delay1();/有键按下,延时去抖动 if(P20=0)/再判有键按下,Company Logo,P1=0 x0e;/A灯亮,开始放水定时 EA=1;/开总中断 ET0=1;/定时器T0中断允许 TMOD=0 x01;/使用定时器T0的模式1 TH0=(65536-46083)/256;/定时器T0的高8位赋初值,定时50ms TL0=(65536-46083)%256;/定时器T0的高8位赋初值 TR0=1;/启动定时器T0 while(1);/无限循环等待中断 void Time0(void)interrupt 1 using 0,Company Logo,if(f=0)/

22、f为标志变量,若f=0,执行第1阶段定时(放水功能)Countor+;/Countor加1 if(Countor=40)/若累计满40次,即计时满2s P1=0 x0d;/A灯灭,结束放水,B灯亮,开始洗涤Countor=0;/将Countor清0,重新从0开始计数f+;/f加1,准备第2阶段的定时 if(f=1)/若f=1,执行第2阶段定时(洗涤功能)Countor+;/Countor加1 if(Countor=80)/若累计满80次,即计时满4S P1=0 x0B;/B灯灭,结束洗涤,C灯亮,开始甩干Countor=0;/将Countor清0,重新从0开始计数 f+;/f加1,准备第3阶段

23、的定时 if(f=2)/若f=2,执行第3阶段定时(甩干功能),Company Logo,Countor+;/Countor加1 if(Countor=40)/若累计满60次,即计时满3S P1=0 x07;/灯全灭,洗衣机结束工作Countor=0;/将Countor清0,重新从0开始计数;f+;/f加1,准备进入第4阶段。,Company Logo,if(f=3)/若f=3,执行进入第4阶段工作(扬声器提醒)P1=0 x07;/灯全灭,洗衣机结束工作P37=P37;/扬声器提醒Countor=0;/将Countor清0,重新从0开始计数;TH1=(65536-46083)/256;/定时器

24、T1的高8位重新赋初值 TL1=(65536-46083)%256;/定时器T1的低8位重新赋初值,Company Logo,单片机音乐,声音的频谱范围为20Hz-200KHz,人的耳朵能辨别的声音频率大概在200Hz-20KHz。音符 1 2 3 4 5 6 7节拍 1/8 1 2 4结束符和休止符:00H FFHC调中音 1 的频率为 523Hz,Company Logo,C调音符与定时方式1初值,时钟频率12MHz,Company Logo,Company Logo,图6-7 音乐驱动,Company Logo,用T0方式1产生指定频率,通过P2.5驱动蜂鸣器,演奏指定音符,晶振频率为6MHz。用T1方式1控制音符节拍,节拍以1/8拍为基准,长度由BASE BASE1决定。其它节拍为该节拍的N倍,用循环N次1/8基准节拍实现。表6-1列出了C调各音符频率与T0初值N的对照表。建立音调初值表TONE,节拍初值表BEAT,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号