MCS-51 单片机原理及应用-定时器-计数器.ppt_第1页
MCS-51 单片机原理及应用-定时器-计数器.ppt_第2页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

mcs-51 单片机原理及应用,mcs-51单片机 定时器/计数器,单片机的定时计数器,单片机应用系统中定时计数的需求: 如用单片机控制的打铃器、空调的定时开关、啤酒自动生产线上对酒瓶的计数装置等。 80c51单片机片内的定时/计数器: 两个位可编程的定时计数器:t0和t1,都能定时和对外部事件进行计数。 此外,t1还可以作为串行接口的波特率发生器。,定时计数器的结构,.定时和计数的原理,(1)计数 定时计数器的实质是在处置基础上的加计数器(位),,16位定时/计数器的计数容量是65536,单片机是对脉冲个数计数,计数器每接收到一个脉冲,计数值加1,,当接收满65535个脉冲后,再来一个脉冲,计数值清0表明这一轮计数结束,同时将标志位tf0或tf1置1。,(2)定时 单片机内部的计数器用作定时器时,是对标准的时钟进行了计数,每来一个时钟脉冲,计数器加1,只要保证计数脉冲的间隔相等,则计数值就代表了时间的流逝。,由单片机的晶振经过12分频后得到。由于晶振的频率很准,所以这个时钟脉冲的时间间隔也很准。当单片机采用12的晶振时,它提供给计数器的脉冲频率是,脉冲周期就是微秒。,定时/计数器t0的结构示意图,获得标准时间,单片机内部的16位定时计数器由高8位和低8位两个寄存器组成: t0由th0和tl0组成, t1由th1和tl1组成, 定时计数器的计数值就存放在这里面。定时/计数器t1的结构与t0相同。,定时/计数器的结构,16位定时计数器计满65536个脉冲时,也会发生溢出。 定时计数器溢出后标志位tf0(或tf1)由0变1,由此能够引发定时中断(在中断定时方式下),这就像定时的时间一到,闹钟就会响一样。 如果采用12的晶振,对应的脉冲周期是微秒,计满65536个脉冲所对应的时间就是65.536ms。,定时/计数值的设置,计数器的道理是一样的,只要用预置数的方法先在计数容器内存入一个初值 ,如我们要计100,那就存入65436,只要再来100个脉冲,就刚好会溢出,引发中断。,在时钟频率为12mhz的情况下,每个时钟脉冲是1微秒,则计满65536个脉冲需65.536毫秒,如要定时10毫秒则存入初值55536,(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 ;tmod0000 0001b mov tmod, #61h ; tmod0110 0001b,定时/计数器的控制寄存器tcon,其中: tf1:定时/计数器t1的溢出标志位,当定时/计数器t1计满时,由硬件使它置位,如中断允许则触发t1中断。进入中断处理后由内部硬件电路自动清除。 tr1:定时/计数器t1的启动位,可由软件置位或清零,当tr1=1时启动;tr1=0时停止。,定时器计数器初值计算,定时器计数器用于定时或计数时,必须按照需要给计数器设置初值。定时器计数器在计数初值的基础上以加1的方式进行计数,在计数器从全1变为全0时,将自动产生溢出中断请求。 (1)计数初值计算 假设要计数的值为x,由于计数器是加工计数器,所以定时器计数器的初值为 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: 方式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置位,如果要求中断嵌套,还应设置相应的中断优先级,然后置位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次幂,等于65536。如计数值为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位的定时/计数方式,因而最大计数值为 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、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 ;自动重装时间常数 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-1000x6/12 =7692 =11110000 01100 th0=0f0h tl0=0ch 程序:,org 0000h ajmp main org 000bh ;t0入口地址 ajmp out1 ;终端服务入口 main: mov tmod,#00h ;置t0方式0 mov th0,#0f0h ;初值高位 mov tl0,#0ch ;初值低位 setb tr0 ;启动t0 setb et0 ;开定时器中断 setb ea ;开cpu中断 loop: nop sjmp loop ;等待 out1: cpl p1.0 ;p1.0去反 mov th0,#0f0h ;初值高位 mov tl0,#0ch ;初值低位 reti ;返回中断,proteus硬件仿真绘制电路原理图,proteus硬件仿真-参数设置,proteus硬件仿真波形测试,仿真后确定的低位初值,原始初值,proteus硬件仿真-频率测量,proteus硬件仿真最终初值,接续上题,用 定时器t1完成上述功能,org 0000h ajmp main org 001bh ;t1入口地址 ajmp out1 ;住程序入口 main: mov tmod,#00h ;t1方式0 mov th1,#0f0h ;初值高位 mov tl1,#0ch ;初值低位 setb tr1 ;开to setb et1 ;开定时器中断 setb ea ;开cpu中断 loop: sjmp loop ;等待 out1: cpl p1.0 ;p1.0去反 mov th1,#0f0h ;初值高位 mov tl1,#0ch ;初值低位 reti ;返回中断 end,【例】设系统时钟频率为12mhz,编程实现从p1.1输出周期为1s的方波。 先产生500ms的周期性的定时,定时到则对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 0000h ljmp main org 000bh ljmp intt0 org 0100h main: mov tmod,#01h mov th0,#0d8h mov tl0,#0f0h mov r2,#00h setb ea setb et0 setb tr0 sjmp $,intt0: mov th0,#0d8h mov tl0,#0f0h inc r2 cjne r2,#32h,next cpl p1.1 mov r2,#00h next: reti end,利用定时器 to,使与 pi 0口连接的发光二极管每 is闪烁一次。 解:使发光二极管闪烁也可以利用例61的方法,在时间到18时,对pi0取反。然而晶振的频率为 6 mhz,定时器所能定时的最长的时间为 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 0000h ljmp main org 000bh ;定时器0的中断向量地址 ljmp tim0 ;定时器0处理程序入口处 main:mov sp, 50h mov count,00h;软件计数器预清0 mov tmod, 00000001b;定时器计数器 0工作方式1 m

温馨提示

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

评论

0/150

提交评论