《第7章-定时计数器-单片机原理与实践指导课件.ppt》由会员分享,可在线阅读,更多相关《第7章-定时计数器-单片机原理与实践指导课件.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7 7章章 MCS-51 MCS-51单片机定时器单片机定时器/计数器计数器见教材见教材177-190177-190 提提 要要【1 1】学学好原理好原理【2 2】会设会设置置专专用寄存器用寄存器【3 3】定】定时时的例子的例子【4 4】演示日】演示日历历秒的秒的实实例例7 71 1 定时定时/计数器的工作原理计数器的工作原理定时器定时器/计数器实质上是一个加法计数器,当它对具有固定时间间隔的内部机器计数器实质上是一个加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器。周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器
2、。计数或定时计数或定时规定:规定:识别一个从识别一个从“1”“1”到到“0”“0”的跳变至少要花两个机器周期。的跳变至少要花两个机器周期。当然,最大计数频率为晶振频率的当然,最大计数频率为晶振频率的1/241/24。对外部输入脉。对外部输入脉冲宽度的要只有低限,即输入脉冲的低电平和高电平的宽冲宽度的要只有低限,即输入脉冲的低电平和高电平的宽度至少都应保持一个机器周期,多者不限。度至少都应保持一个机器周期,多者不限。这里需要注意的是:加法计数器是计满溢出时才申请中这里需要注意的是:加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数断,所以在给计数器赋初值时,不能直接
3、输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值,而应输入的是计数器计数的最大值与这一计数值的差值。设最大值为值。设最大值为M M,计值为,计值为N N,初值,初值X X的计算方法如下:的计算方法如下:计数状态:计数状态:X=M-NX=M-N 定时状态:定时状态:X=M-X=M-定时时间定时时间T,T,而而T=12T=12晶振频率。晶振频率。72 定时定时/计数器所用到的寄存器计数器所用到的寄存器二、控制寄存器二、控制寄存器TCON的设置的设置 控制寄存器控制寄存器TCONTCON用于控制定时器的启动、停止和中断请求。用于控制定时器的启动、停止和中断请求。其中,其中,TCON
4、的低的低4位与中断有关,在第位与中断有关,在第6章已介绍,这里不再重复。章已介绍,这里不再重复。高高4位含义如下:位含义如下:(1)TF0、TF1分别是定时器分别是定时器/计数器计数器T0、T1的溢出标志位。的溢出标志位。(2)TR0、TR1分别是定时器分别是定时器/计数器计数器T0、T1的运行控制位,必须由软件置的运行控制位,必须由软件置1或或清清0。当当TR0(或(或TR1)置)置1后,对应定时器后,对应定时器/计数器才开始工作;当计数器才开始工作;当TR0或或(TR1)清)清0后,对应定时器后,对应定时器/计数器停止工作;在系统复位时计数器停止工作;在系统复位时TR0或或(TR1)被清)
5、被清0。7.3.2 7.3.2 定时定时/计数器的工作模式计数器的工作模式(M1M1,M0M0)一、模式一、模式0【M1,M0=00,13位】位】1313位初值的高位初值的高8 8位赋值给位赋值给TH0TH0,低,低5 5位数前面加位数前面加3 3个个0 0凑成凑成8 8位之后赋位之后赋给给TL0TL0。如要求计数值。如要求计数值N N为为10001000,则初值,则初值X X为:为:X XM M100010008192819210001000719271921C18H1C18H(或(或1110011100,00011000B00011000B)其二进制的高其二进制的高8 8位是:位是:111
6、00000B11100000B,低,低5 5位是位是11000B11000B,因此赋初值时,因此赋初值时 TH0 TH0E0HE0H,TL0TL018H18H。二、模式二、模式1 1【M1M1,M0=01M0=01,1616位】位】如希望每隔如希望每隔250s250s产生一个定时控制脉冲,若晶振频率为产生一个定时控制脉冲,若晶振频率为12MHz12MHz,此时计数初值此时计数初值X XM MN N256256250125016 6,故只要在,故只要在TH0TH0,TL0TL0(或(或TL1TL1,TH1TH1)中预置初值)中预置初值6 6。四、模式四、模式3 3【M1M1,M0=11M0=11
7、,T0T0被设成两个被设成两个8 8位)位)定时器定时器/计数器计数器0 0设为模式设为模式3 3时,时,TH0TH0控制了控制了T1T1的中断,而的中断,而T1T1只能用于只能用于不需要中断的各种场合(可设置为模式不需要中断的各种场合(可设置为模式0 02 2中的一种),如用作不中的一种),如用作不使用中断的使用中断的“定时器定时器”、“计数器计数器”和串行口的波特率发生器。和串行口的波特率发生器。通常,当通常,当T1T1用作串行口波特率发生器时,用作串行口波特率发生器时,T0T0才定义为方式才定义为方式3 3,以,以增加一个增加一个8 8位计数器。位计数器。在用作波特率发生器时,在用作波特
8、率发生器时,T1T1被设置成模式被设置成模式0 02 2时的逻辑结构:时的逻辑结构:参考下图:参考下图:7.3.3 80527.3.3 8052定时定时/计数器计数器2 2的设置的设置 自学:教材自学:教材P183-185P183-185页页时间常数的算法时间常数的算法 1个机器周器的时间:12/22.1184M=0.5425微妙 定时一秒,从P1.0输出,需25个20ms=500ms 反转一次,这样,20ms的次数是:N(次数)=20毫秒/0.5425微妙36866D 用16位定时,T0初值=65536-36866=28670D=6FFFH,即:TH0=6FH,TL0=FFH 用s_numb
9、记次数需25次。(先用汇编编写,后用C编程如下:)to_t0:;中断程序 mov th0,#6Fh ;重新装入常数 mov tl0,#0FFh clr c mov a,s_numb ;判断是否到25次?subb a,#01h ;总次数减一 mov s_numb,a jnc no_to1s ;无减完退出!mov s_numb,#25 ;减完,需重新置次数.cpl speak ;发声 no_to1s:reti ;返回到主程序 main:mov sp,#60h ;设堆栈 mov ie,#00h ;将中断全部关掉?mov tmod,#00100001b ;T1为8位重装(0010b为波特率);T0为1
10、6位定时器(0001b)mov th0,#6Fh mov tl0,#0FFh mov s_numb,#25 ;(25x20=500ms)设25次 setb speak ;关蜂鸣器 setb ea ;开总中断 setb et0 ;开T0中断 setb tr0 ;T0开始计数 loop:sjmp loop ;循环等待中断 end ;整个程序结束用C编的20ms函数 void out_t0(void)/定时器T0初始化 TMOD=0X21;/【mov tmod,#21H】TH0=0X6f;/装T0 定时常数 TL0=0Xff;/TR0=1;void To_int(void)interrupt 1 /
11、T0中断入口函数中断入口函数 TH0=0 x6f;/装装T0定时常数定时常数 TL0=0 xff;s_numb=s_numb-1;/到到25次吗?次吗?If(s_numb=0)speak=speak;/取反取反“发声发声”s_numb=25;sbit speak=P10;/蜂鸣器 unsigned char s_numb;/全局变量 void main(void)/主函数 out_t0();/定时器初始化 s_numb=25;/设置次数“25”ET0=1;/开T0中断 EA=1;/开总中断 while(1);/等待发声 【例2】利用利用T0T0确定引脚上出现的正脉冲的宽度。确定引脚上出现的正脉冲的宽度。在外部中断在外部中断0 0为上升沿时为上升沿时,自动开始定时。在下降沿时自动开始定时。在下降沿时 产生中断,关掉产生中断,关掉T0T0(TR0=0TR0=0),读数(),读数(TH0TH0,TL0TL0)。)。【相关程序见教材】【相关程序见教材】