




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章定时器计数器第1页,课件共50页,创作于2023年2月7.4
51内部定时/计数器及其应用2定时与计数的概念定时的主要作用是产生各种时标间隔。 软件延时 硬件定时器计数:记录(外部)事件的数量。例如:温度测量第2页,课件共50页,创作于2023年2月定时/计数器的实质3定时/计数器的实质就是计数器,一般都具有定时兼计数的功能,具体是定时还是计数主要看计数对象(即计数脉冲)。若计数脉冲为已知固定周期的信号,则计数器就可以看作定时器;若计数脉冲为周期不固定的或未知的信号,则计数器只能看作是计数器。通过外部引脚对外部事件计数通过对机器周期进行计数实现定时MCS-51单片机内部定时/计数器第3页,课件共50页,创作于2023年2月一、内部定时/计数器结构和工作原理4
51单片机内部有两个可编程16位加1的定时器/计数器,具有两种工作模式(计数器模式、定时器模式)和四种工作方式(方式0、方式1、方式2、方式3),其控制字均在相应的特殊功能寄存器(SFR)中,通过对它的SFR的编程,可以方便的选择工作模数和工作方式。第4页,课件共50页,创作于2023年2月1、定时/计数器的结构5定时器/计数器是一个加1计数器,当计数溢出时产生中断申请表示定时到或计数到。第5页,课件共50页,创作于2023年2月每输入一个脉冲,计数器加1,当加到计数器各位都为1时,再输入一个脉冲,计数器各位全变为0,溢出,中断标志置1(SFR中TCON的TF0、TF1),从而向CPU申请中断。由预置计数值就可以算出从加1计数器启动到计满溢出所需的时间,即定时时间。8位-256;13位-8192;16位-65536计数原理第6页,课件共50页,创作于2023年2月
对外部脉冲计数时,当脉冲有一个高电平到低电平“1”-“0”跳变时,计数器加1,且在每个机器周期的S5P2采样外部输入,若前一个机器周期采样值为1,后一个机器周期采样值为0,则计数器加1。
由于识别一个从1到0的负跳变信号需要两个机器周期(24个振荡周期),所以最高的计数频率为系统时钟频率的1/24;两个输入脉冲的最小间隔应不小于两个机器周期。又因为一个机器周期对信号采样一次,因此输入信号的电平宽度至少应持续一个机器周期。第7页,课件共50页,创作于2023年2月定时原理输入脉冲不是外部脉冲源,而是一个晶体振荡器的脉冲源。输入脉冲是由内部振荡器的输出经12分频送来,所以定时器可看做对机器周期的计数。晶振12MHz,机器周期1us,定时器每接收一个脉冲是1us晶振6MHz,机器周期2us,定时器每接收一个脉冲是1us加法计数器的初值可以由程序设定,设置的初值不同,计数值或定时时间就不同。定时时间不仅与计数初值有关,而且与系统时钟频率有关。第8页,课件共50页,创作于2023年2月对于16位计数器,最大定时时间是216个脉冲的时间。则定时时间△T=(216-X)*TT:输入脉冲周期,T=12/fµs(f为晶振频率1.2~12MHz)如为12MHz,则T=1µsX:计数器初值(由程序输入)对于12MHz晶体,T=1µs,最大定时△T=65.536ms;对于6MHz晶体,T=2µs,最大定时△T=131ms常使用:X=216-△T/T第9页,课件共50页,创作于2023年2月例:系统时钟频率为12MHz,要产生1ms定时,求初值XT=12/12=1µs若为16位计数器X=216-1000/1=64536=0FC18H若为13位计数器X=213-1000/1=8192-1000=7192=1C18H不能采用8位计数器第10页,课件共50页,创作于2023年2月二、T/C的特殊功能寄存器SFR111、16位定时/计数器0:核心的计数单元由两个特殊功能寄存器TH0和TL0组成2、16位定时/计数器1:核心的计数单元由两个特殊功能寄存器TH1和TL1组成3、定时器方式选择寄存器:TMOD4、定时器控制寄存器:TCON第11页,课件共50页,创作于2023年2月T/C的特殊功能寄存器SFR12第12页,课件共50页,创作于2023年2月3、定时器方式选择寄存器:TMODM1M0方式说明00013位定时器(TH的8位和TL的低5位)01116位定时器/计数器102自动重装入初值的8位计数器113T0分成两个独立的8位计数器,T1在方式3时停止工作13地址:89H第13页,课件共50页,创作于2023年2月定时器方式选择寄存器:TMOD14GATE——门控位。
GATE=0启动不受/INT0或/INT1的控制;
GATE=1启动受
/INT0或
/INT1的控制。
C//T——外部计数器/内部定时器方式选择位
C//T=0定时方式;
C//T=1计数方式。
第14页,课件共50页,创作于2023年2月4、定时器控制寄存器:TCON15TF1TR1TF0TR0IE1IT1IE0IT0
TCON(88H)外部中断有关1、TF1:定时器/计数器T1溢出中断请求标志位。当启动T1计数后,T1从初值开始加1计数,计数器最高位产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。当CPU响应中断时,硬件将自动对TF1清0。2、TF0:定时器/计数器T0溢出中断请求标志位。含义与TF1类同。第15页,课件共50页,创作于2023年2月定时器控制寄存器:TCON16TF1TR1TF0TR0IE1IT1IE0IT0
TCON(88H)外部中断有关TR1:T1运行控制位。TR1=1时,T1开始工作;TR1清0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。TR0:T0运行控制位。第16页,课件共50页,创作于2023年2月三、四种工作方式17除了方式3,T0和T1有完全相同的工作方式。第17页,课件共50页,创作于2023年2月1、方式018T/C0方式0(13位计数器)的逻辑结构图低5位高8位方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。P3.4第18页,课件共50页,创作于2023年2月方式019定时计数模式选择低5位高8位启动控制分析GATE:门控位GATE=0时,定时计数器的启停,仅仅由TR0控制,只要TR0=1就启动
。GATE=1时,定时计数器的启停,还将受到INT0引脚的控制。在TR0=1的前提下int0引脚=1计数,=0停止计数。
TR0=0停止计数。第19页,课件共50页,创作于2023年2月计数初值问题20初值重装问题:用程序将0~8191的某一数送入TH0、TL0作为初值,TH0、TL0从初值开始加法计数,直至溢出。所以初值不同,定时时间或计数值不同。必须注意的是:加法计数器TH0溢出后,必须用程序重新对TH0、TL0设置初值,否则下一次TH0、TL0将从0开始计数。初值计算问题:加法计数器。例如:计数1000个。213-1000=7192=1
11000001
1000BE0送TH18H送TLMOVTH0,#0E0HMOVTL0,#18H第20页,课件共50页,创作于2023年2月此种方式与MCS-48系列兼容,如果不是为了兼容的目的,一般不用方式0.方式0的全部功能,方式1都可以代替。如果要重复定时或计数,则须重新设置时间常数初值注意:第21页,课件共50页,创作于2023年2月2、方式122T/C0方式1
(16位计数器)的逻辑结构图与方式0
相似,方式1时的计数长度是2的16次方。16位的初值直接拆成高低字节,分别送入TH和TL即可。初值的计算公式??方式1第22页,课件共50页,创作于2023年2月3、方式2(计数初值自动再装入)23
工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。工作方式2就针对这个问题而设置,它具有自动重装载功能,即计数初值自动再装入。第23页,课件共50页,创作于2023年2月3、方式224方式2(计数初值自动再装入)结构图第24页,课件共50页,创作于2023年2月计数初值自动再装入的实现25
在工作方式2中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。第25页,课件共50页,创作于2023年2月与方式0和方式1不同处:只使用TL0做8位计数器,最大计数值255;最大定时时间(晶振12MHz时):256
s用于需要重复定时和计数的场合。方式2用于定时工作方式,定时时间由下式确定:t=N×Tcy=(256-X)×Tcy计数初值X:X==256-t/Tcy第26页,课件共50页,创作于2023年2月4、方式327方式3(两个8位独立计数器)结构图只能定时不能计数。既可以定时也可以计数第27页,课件共50页,创作于2023年2月方式3(两个8位独立计数器)28(2)TH0占用了T1的控制位TR1、和中断标志位TF1,同时占用了T1的中断资源,此时,TH0固定为一个8位计数器,启动受TR1控制,只能定时不能计数。说明:(1)T0在方式3时,TL0使用T0的控制位C/T、GATE、TR0、INT0,既可以定时也可以计数。(3)T0工作在方式3时,T1可以工作在方式0、1、2。(4)T0工作在方式3时,占用了TR1、TF1;T1只受C/T位控制,计数满时也没有溢出中断请求,只能将输出送到串行口。所以此时T1可以作串行口波特率发生器,如果需要T1停止计数,只需设置T1为方式3即可。第28页,课件共50页,创作于2023年2月T0工作在方式3时,
T1工作在方式2的逻辑图29第29页,课件共50页,创作于2023年2月四、应用30定时/计数器的应用(1)选择定时/计数器——T0、T1选择其一,(2)定时或外计数选择——C//T及GATE,(3)工作方式——M1、M0(4)计数初值——加1计数、位数(5)计数初值的再装入1)写TMOD;2)确定IE、IP;3)写计数初值;4)启动计数(TRi)
编制初始化程序:第30页,课件共50页,创作于2023年2月中断相关寄存器31中断允许控制寄存器IEEA--ESET1EX1ET0EX0
IE(A8H)AFHAEHADHACHABHAAHA9HA8H51单片机有两个中断优先级。高优先级或低优先级中断。中断优先级寄存器IPPSPT1PX1PT0PX0IP(B8H)
BCHBBHBAHB9HB8H第31页,课件共50页,创作于2023年2月设计一个能产生t=1ms
的周期信号发生器,试编程.32解:选T0方式0;C//T=0,GATE=0;12MHz时钟,T=1usN=0.5ms/T=0.5ms/1us=500初值=213-500=8192-500=7692=1E0CH=0001111000001100B,
1E0CH01100TL011110000TH0F0H0CH第32页,课件共50页,创作于2023年2月33
LJMPMAIN
ORG000BHLJMPTim0ORG1000H
MAIN:
MOVSP,#60HMOVTL0,#0CHMOVTH0,#0F0HMOVTMOD,#00H
SETBTR0SETBET0SETBEASJMP$
………
ORG0000H
Tim0:MOVTL0,#0CHMOVTH0,#0F0HCPLP1.0RETI设计一个能产生t=1ms
的周期信号发生器,试编程.200ms的方波??第33页,课件共50页,创作于2023年2月34
LJMPMAIN
ORG000BHLJMPINSE0ORG1000H
MAIN:
MOVSP,#60HMOVTL0,#0CHMOVTH0,#0F0HMOVTMOD,#00H
SETBTR0SETBET0SETBEASJMP$
MOVR2,#200
………
ORG0000H
INSE0:DJNZ
R2,Next
CPLP1.0
MOVR2,#200Next: MOVTL0,#0CHMOVTH0,#0F0HRETI设计一个能产生t=200ms
的周期信号发生器,试编程.200ms的方波:软件计数第34页,课件共50页,创作于2023年2月
当实际应用系统中应用系统的2个外部中断源已被占用,现要求增加1个外部中断源,而片内定时器/计数器没有使用时,可利用定时器/计数器扩展外部中断源,方法如下:将定时器/计数器设置为计数模式,计数初值设定为满值,将待扩展的外部中断源接到定时器/计数器。当从该引脚输入一个下降沿信号,计数器加1后产生定时器/计数器溢出中断。因此定时器/计数器可作为扩展中断源的中断输入端。第35页,课件共50页,创作于2023年2月例:利用定时器/计数器T0扩展一个外部中断源,T0设置为方式2(自动重装初值方式)外部计数工作模式,TH0、TH1初值均为0FFH,初始化程序如下:INIT_T0:MOVTMOD,#06H;T0计数方式2MOVTH0,#0FFH;MOVTH0,#0FFH;SETBET0;T0开中断;
SETBEA;开总中断
SETBTR0;启动计数器T0第36页,课件共50页,创作于2023年2月
#include<reg51.h> sbit pulse_out=P1^0; unsigned char flag; /*定义T0产生中断标志位*/ /*定时器初始化程序*/ init_timer() { TMOD=0X25; /*T0计数,方式1;/*T1定时,方式2*/ TH0=0XFF; /*T0置初值*/ TL0=0XFF; TH1=0X06; /*T1置初值*/ TL1=0X06; IE=0X8A; /*开中断*/ TR0=1; /*启动T0*/ }例
假设某80C51应用系统的2个外部中断源已被占用,现要求增加1个外部中断源,并控制P1.0引脚输出1个周期为1ms的方波。假设晶振频率为6MHz。X=256-t/T=256–(500)/2==0X06HIEEAESET1EX1ET0EX0第37页,课件共50页,创作于2023年2月 /*T0中断服务程序*/ voidt0_int()interrupt1 { TR0=0; /*T0停止工作*/ flag=1; /*置1中断产生标志位*/ } /*T1中断服务程序*/ voidt1_int()interrupt3 { pulse_out=!pulse_out; /*脉冲输出位取反*/ } main()/*主程序*/ { init_timer(); /*调用定时器初始化程序*/ flag=0; /*T0产生中断标志位清0*/ while(!flag); /*等待T0产生中断*/ TR1=1; /*T0中断后,启动T1*/ while(1); /*等待T1`中断*/ }第38页,课件共50页,创作于2023年2月方式1的应用例:利用定时/计数器(T0)的方式1,产生一个50Hz的方波,此方波由P1.0引脚输出,假设晶振频率为12MHz。1)确定定时器初值X:由于晶振为12MHz,所以一个机器周期Tcy=(12×1)/(12×106)=1μs。计数初值X=216-t/Tcy=65536-0.01s/1μs=65536-10000=55536=D8F0H
即应将D8H送入TH0中,F0H送入TL0中。2)根据要求求得T0的方式控制字TMOD:
GATE=0,C/T=0,M1M0=01,可得方式控制字TMOD=01H,即T0的方式1。第39页,课件共50页,创作于2023年2月
查询方式:
#include<reg51.h> sbitpulse_out=P1^0; /*定义脉冲输出位*/ main() { TMOD=0x01; /*T0定时方式1*/ TH0=0xD8; /*装入计数初值*/ TL0=0xF0; TR0=1; /*启动定时器T0*/ while(1) { if(TF0) /*查询TF0,等待定时时间到*/ { TF0=0; /*定时时间到,清TF0*/ TH0=0xD8; /*重装计数初值*/ TL0=0xF0; pulse_out=!pulse_out; /*脉冲输出位取反*/ } } }第40页,课件共50页,创作于2023年2月
中断方式:
#include<reg51.h> sbit pulse_out=P1^0; /*定义脉冲输出位*/ /*中断服务程序*/ void T0_int()interrupt 1 { TH0=0xD8; /*重装计数初值*/ TL0=0xF0; pulse_out=!pulse_out; /*脉冲输出位取反*/ }/*主程序*/ main() { TMOD=0x01; /*T0定时方式1*/ TH0=0xD8; /*装入计数初值*/ TL0=0xF0; ET0=1; /*T0开中断*/ EA=1; /*开总中断*/ TR0=1; /*启动定时器T0*/ while(1); /*等待中断*/ }第41页,课件共50页,创作于2023年2月例:假设系统时钟为6MHz,编写定时器T0定时1s的程序。分析:MAX=131.072ms1s=100ms*10;X=65536-100/2=3CBOH #include<reg51.h>
/*定时器T0中断服务程序*/ void T0_int()interrupt1 { staticunsignedchar count; /*声明静态变量count*/ count++; /*累计中断次数*/ TH0=0x3C; /*重装计数初值*/ TL0=0xB0; if(count==10) {TR0=0; /*1s到,停止T0工作*/ } }/*主程序*/ main() { TMOD=0x01; /*T0定时方式1*/ TH0=0x3C; /*装入计数初值*/ TL0=0xB0; ET0=1; /*T0开中断*/ EA=1; /*开总中断*/ TR0=1; /*启动定时器T0*/ while(1); /*等待中断*/ }第42页,课件共50页,创作于2023年2月方式2例:利用定时/计数器T1的方式2对外部信号计数。要求每计满200个数,将P1.0引脚信号取反。 #include<reg51.h> sbit pulse_out=P1^0; /*定义脉冲输出位*/ voidt1_int()interrupt3 { pulse_out=!pulse_out; /*取反脉冲输出位*/ } main() { TMOD=0x60; /*T1计数方式2*/ TH1=0x38; /*装入计数初值*/ TL1=0x38;256-200=56=0x38 ET1=1; /*T1开中断*/ EA=1; /*开总中断*/ TR1=1; /*启动定时器T1*/ while(1); /*等待中断*/ }第43页,课件共50页,创作于2023年2月方式3例:
定时/计数器T1作波特率发生器用,增加1个外部中断源,并用它来控制P1.0引脚输出1个5KHz的方波。假设晶振频率为6MHz。 #include<reg51.h> sbit pulse_out=P1^0; /*定义脉冲输出位*/ /*定时器初始化程序*/ init_timer() { TMOD=0X27; /*设置定时器工作方式*/ TL0=0XFF; /*装入初值*/ TH0=0XCE; TL1=0Xxx; /*根据波特率设置初值*/ TH1=0Xxx; IE=0X9A; /*允许中断*/ TR0=1; /*启动TL0*/ }第44页,课件共50页,创作于2023年2月
/*TL0中断服务程序*/ voidtl0_int()interrupt1 { TR1=1; /*启动TH0*/ TL0=0XFF; /*重装初值*/ } /*TH0中断服务程序*/ voidth0_int()interrupt3 { TH0=0XCE; /*重装初值*/ pulse_out=!pulse_out; /*脉冲输出位取反*/ } /*主程序*/ main() { init_timer(); /*调用定时器初始化程序*/ while(1); /*等待中断*/ }第45页,课件共50页,创作于2023年2月例:门控位GATE的应用——测量INTX引脚脉冲宽度
当GATE0=1且TR0=1时,只有INT0引脚输入高电平时,T1才被允许工作。利用这个特性,可测量从INT0引脚(P3.2)上输入的正脉冲的宽度,其方法如图所示。(P3.2)09H→TMOD1→GATE01→TR0T0从0开始计数测量脉冲宽度0→TR0停止计数图6-23利用GATE位测量正脉冲宽度第46页,课件共50页,创作于2023年2月
ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#09H ;设置定时器工作方式
MOV TL0,#00H MOV TH0,#00H JB P3.2,$ ;等待P3.2变低
SETB TR0 ;P3.2变低后,启动T0 JNB P3.2,$ ;等待P3.2变高
JB P3.2,$ ;等待P3.2变低
CLR TR1 ;停止T0计数
MOV R7,TL0 ;缓存计数值
MOV R6,TH0 END第47页,课件共50页,创作于2023年2月例7.1:
用定时/计数器模拟生产线产品计件,以按键模拟产品检测,按一次键相当于产品计数一次。检测到的产品数送P1口显示,采用单只数码管显示,计满16次后从头开始,依次循环。系统采用12MHz晶振。第48页,课件共
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国成人帽行业投资前景及策略咨询报告
- 2025至2030年中国彩色文具胶带行业投资前景及策略咨询研究报告
- 2025至2030年中国强劲钙软胶囊数据监测研究报告
- 2025至2030年中国异型材制品市场调查研究报告
- 2025至2030年中国工业用快速卷门数据监测研究报告
- 茶叶安全培训
- 脊髓型颈椎病个案护理
- 高一对口教育试卷及答案
- 泰国旅游攻略必去景点
- 足球体能训练中心行业跨境出海战略研究报告
- 2024-2025学年人教新目标英语八年级下册期末综合检测卷(含答案)
- 331金属晶体课件高二化学人教版选择性必修2
- 矿山矿石采购合同模板
- 2024年浪潮数字企业技术有限公司社会招聘(105人)笔试核心备考题库及答案解析
- 第47届世界技能大赛江苏省选拔赛竞赛技术文件-混凝土建筑项目
- 2024年新人教版四年级数学下册《第6单元第2课时 小数加减法》教学课件
- 国开2024年《数据库运维》形考1-3
- 劳动合同(模版)4篇
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 药物研发监管的国际协调
- 生猪屠宰兽医卫生检验人员理论考试题及答案
评论
0/150
提交评论