MCS51 单片机原理及应用定时器计数器.ppt

上传人:laozhun 文档编号:2877237 上传时间:2023-02-28 格式:PPT 页数:38 大小:1.14MB
返回 下载 相关 举报
MCS51 单片机原理及应用定时器计数器.ppt_第1页
第1页 / 共38页
MCS51 单片机原理及应用定时器计数器.ppt_第2页
第2页 / 共38页
MCS51 单片机原理及应用定时器计数器.ppt_第3页
第3页 / 共38页
MCS51 单片机原理及应用定时器计数器.ppt_第4页
第4页 / 共38页
MCS51 单片机原理及应用定时器计数器.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

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

1、MCS-51 单片机原理及应用,MCS-51单片机定时器/计数器,单片机的定时计数器,单片机应用系统中定时计数的需求:如用单片机控制的打铃器、空调的定时开关、啤酒自动生产线上对酒瓶的计数装置等。80C51单片机片内的定时/计数器:两个位可编程的定时计数器:T0和T1,都能定时和对外部事件进行计数。此外,T1还可以作为串行接口的波特率发生器。,定时计数器的结构,.定时和计数的原理,(1)计数 定时计数器的实质是在处置基础上的加计数器(位),,16位定时/计数器的计数容量是65536,单片机是对脉冲个数计数,计数器每接收到一个脉冲,计数值加1,,当接收满65535个脉冲后,再来一个脉冲,计数值清0

2、表明这一轮计数结束,同时将标志位TF0或TF1置1。,(2)定时 单片机内部的计数器用作定时器时,是对标准的时钟进行了计数,每来一个时钟脉冲,计数器加1,只要保证计数脉冲的间隔相等,则计数值就代表了时间的流逝。,由单片机的晶振经过12分频后得到。由于晶振的频率很准,所以这个时钟脉冲的时间间隔也很准。当单片机采用12的晶振时,它提供给计数器的脉冲频率是,脉冲周期就是微秒。,定时/计数器T0的结构示意图,获得标准时间,单片机内部的16位定时计数器由高8位和低8位两个寄存器组成:T0由TH0和TL0组成,T1由TH1和TL1组成,定时计数器的计数值就存放在这里面。定时/计数器T1的结构与T0相同。,

3、定时/计数器的结构,16位定时计数器计满65536个脉冲时,也会发生溢出。定时计数器溢出后标志位TF0(或TF1)由0变1,由此能够引发定时中断(在中断定时方式下),这就像定时的时间一到,闹钟就会响一样。如果采用12的晶振,对应的脉冲周期是微秒,计满65536个脉冲所对应的时间就是65.536ms。,定时/计数值的设置,计数器的道理是一样的,只要用预置数的方法先在计数容器内存入一个初值,如我们要计100,那就存入65436,只要再来100个脉冲,就刚好会溢出,引发中断。,在时钟频率为12MHz的情况下,每个时钟脉冲是1微秒,则计满65536个脉冲需65.536毫秒,如要定时10毫秒则存入初值5

4、5536,(10毫秒是10000微秒,需计数10000个脉冲)。可见,定时器的定时时间长短与系统时钟和定时器初值有关。,定时器初值的设置,定时器/计数器的初始化,定时/计数器的方式寄存器TMOD,其中:M1、M0为工作方式选择位,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下,C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。,GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。,例如:设定时/计数器 T0 为定时工作方式 1。设定时/计数器 T1为计数方式2和T0 为定时工作方式 1,MOV TMOD,#01H

5、;TMOD0000 0001BMOV TMOD,#61H;TMOD0110 0001B,定时/计数器的控制寄存器TCON,其中:TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬件电路自动清除。TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时启动;TR1=0时停止。,定时器计数器初值计算,定时器计数器用于定时或计数时,必须按照需要给计数器设置初值。定时器计数器在计数初值的基础上以加1的方式进行计数,在计数器从全1变为全0时,将自动产生溢出中断请求。(1)计数初值计算 假设要计数的值为X,由于计数器

6、是加工计数器,所以定时器计数器的初值为 2 X:其中n的值依赖于工作方式,对于方式 0,n=13;即初值=8192-X对于方式 1,n=16;即初值=65536-X对于方式 2和方式 3,n=8;即初值=256-X,n,2)定时初值计算定时就是定时间,假设晶振频率为f,定时时间为T,对应的计数值为X,此时计数器是将系统时钟12分频后作为计数脉冲,则以下等式成立。要装入的计数器初值 CI=2 Tfosc/12。例如:已知晶振的频率为 6 MHz,要求定时为2 ms,则 当为方式0时,应装入的计数初值为;8192210 610/12=8192-1000=7192,n,3,6,定时时间常数初值X:方

7、式0 X=8192-T(fosc/12)方式1 X=65536-T(fosc/12)方式2、方式3 X=256-T(fosc/12)其中T是需要定时的时间,单位是微秒;fosc是晶振,计数时间常数X:方式0 X=8192-S 方式1 X=65536-S 方式2、方式3 X=256-S 说明:式中S是需要计数的次数,定财器计数器初始化步骤,1)确定工作方式:把工作方式控制字写入到TMOD中;2)设置定时或计数的初值:根据问题要求,求出定时或计数的初值,写入到寄存器THO、TLO或THI、TLI中。3)如果需要中断,使定时器中断允许位ET0或ETI置位,如果要求中断嵌套,还应设置相应的中断优先级,

8、然后置位EA,使CPU开放中断;如果不需要中断,仅以软件方式对计数器溢出标志TFO或TFI进行查询,则可略去此步骤;4)启动定时器计数器:将 TRO或 TRI置 1即可启动定时器计数器。,定时/计数器的工作方式,一方式0,方式0是13位的定时/计数方式,因而最大计数值为 2的13次幂,等于8192。如计数值为N,则置入的初值X为:X=8192-N例如定时/计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000B,TL0=00011000B。,二、方式1,方式1是16位的定时/计数方式,因而最大计数值为 2的16次幂,等于6553

9、6。如计数值为N,则置入的初值X为:X=65536-N如定时/计数器T0的计数值为1000,则初值为65536-1000=64536,转换成二进制数为1111110000011000B,则TH0=11111100B,TL0=00011000B。,三方式2,方式2,16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。,特别适合于产生比较精确的连续脉冲信号。,由于是8位的定时/计数

10、方式,因而最大计数值为 2的8次幂,等于256。如计数值为N,则置入的初值X为:X=256-N 如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为10011100B,则TH0=TL0=10011100B。注意:由于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。,方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、

11、TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。,四、方式3,初始化程序,例3:某牛奶生产线上一个包装是12盒,要求每生产12盒就执行装箱操作,用80C51单片机来控制,请编写初始化程序。思路与计算:要确定定时器(T0 或T1),选择其工作方式。我们以T0的工作方式2为例,计算时间常数并赋值给TH0、TL0。X=256-S=256-12=244=0F4H,2初始化程序:MOV TMOD,#06H;T0作计数器,工作于方式2 MOV TH0,#0F4H;装入时间常数初值 MOV TL0,#0F4H;自动重装时间常数

12、 MOV IE,#00H;用查询方式确定计满12盒?(或MOV IE,#82H);使用T0中断,计满12盒后,;自动申请中断 SETB TR0;启动T0波特率发生器 3总结:对计数过程是否结束有查询和中断两种方法,要合理选择,并在程序设计中正确体现。,例:设 6M时钟,用定时/计数器TO产生 1ms的 定时,并使P1.0输出 占空比 为1:1周期为 2ms的方波 计算初值:方式0,13位计数器 X=8192-T(fosc/12)=8192-1000 x6/12=7692=11110000 01100 TH0=0F0H TL0=0CH程序:,ORG0000HAJMPMAINORG000BH;T0

13、入口地址AJMPOUT1;终端服务入口MAIN:MOVTMOD,#00H;置T0方式0MOVTH0,#0F0H;初值高位MOVTL0,#0CH;初值低位SETBTR0;启动T0SETB ET0;开定时器中断SETB EA;开CPU中断LOOP:NOPSJMP LOOP;等待OUT1:CPL P1.0;P1.0去反MOVTH0,#0F0H;初值高位MOVTL0,#0CH;初值低位RETI;返回中断,PROTEUS硬件仿真绘制电路原理图,PROTEUS硬件仿真-参数设置,PROTEUS硬件仿真波形测试,仿真后确定的低位初值,原始初值,PROTEUS硬件仿真-频率测量,PROTEUS硬件仿真最终初值

14、,接续上题,用 定时器T1完成上述功能,ORG0000HAJMPMAINORG001BH;T1入口地址AJMPOUT1;住程序入口MAIN:MOVTMOD,#00H;T1方式0MOVTH1,#0F0H;初值高位MOVTL1,#0cH;初值低位SETBTR1;开ToSETB ET1;开定时器中断SETB EA;开CPU中断LOOP:SJMP LOOP;等待OUT1:CPL P1.0;P1.0去反MOVTH1,#0F0H;初值高位MOVTL1,#0cH;初值低位RETI;返回中断 END,【例】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。先产生500ms的周期性的定时,定时

15、到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H),初值X:X=65536-10000=55536=1101100011110000B则TH0=11011000B=D8H,TL0=11110000B=F0H。,(1)用寄存器R2作计数器软件计数,中断处理方式。汇编程序:ORG 0000HLJMP MAINORG

16、 000BHLJMP INTT0 ORG 0100HMAIN:MOV TMOD,#01HMOV TH0,#0D8HMOV TL0,#0F0HMOV R2,#00HSETB EASETB ET0SETB TR0SJMP$,INTT0:MOV TH0,#0D8H MOV TL0,#0F0H INC R2 CJNE R2,#32H,NEXT CPL P1.1 MOV R2,#00HNEXT:RETI END,利用定时器 TO,使与 PI 0口连接的发光二极管每 IS闪烁一次。解:使发光二极管闪烁也可以利用例61的方法,在时间到18时,对PI0取反。然而晶振的频率为 6 MHz,定时器所能定时的最长的

17、时间为 131072 ms,我们先用定时器计数器T0做一个100 ms的定时器,另外再设定一个计数器COUNT,每次定时器中断时,对COUNT内容加入如果此时COUNT的值为 10,则说明已到了 10 X 100 ms,也即 Is的定时时间,这时对计数器 COUNT中的值清零,重新开始计数,同时对PI0取反操作,使灯闪烁,这样就即可到题目要求,程序如下:Hll00MS EQU HIGH(65536-50000);定义预置计数器的高字节初值 LO100MS EQU LOW(65536-50000);定义预置计数器的低字节初值 COUNT DATA 30H;定义人为计数器的寄存器地址 ORG 00

18、00H LJMP MAIN ORG 000BH;定时器0的中断向量地址 LJMP TIM0;定时器0处理程序入口处 MAIN:MOV SP,50H MOV COUNT,00H;软件计数器预清0 MOV TMOD,00000001B;定时器计数器 0工作方式1 MOV THO,HIl00MS;置入 100。S时间常数 MOV TLO,LO100MS,SETB EA;总中断允许 SETB ETO;定时器计数器0中断允许 SETB TRO;定时器计数器 0开始运行 SJMP$MOV THO,Hll00MS MOV TLO,L0100MS;重置定时常数 INC COUNT MOV A,COUNT CJNE A10,TIMERET;COJllT中的值不为10跳至中断返回 MOV COUNT,00H;IS到,对人工定义计数器清 0,重新计数 CPL PI0;对P10取反TIMERET:RETI;中断返回 END,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号