173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

基于单片机的多功能定时器

htxw 2023-03-13 资讯中心 24 ℃

单片机定时器原理及使用

这里通俗的说下C51单片机的定时器的工作原理,C51单片机的定时器是由计数器构成的,所计量的时间是通过计算固定周期的脉冲个数的累计获得的,通过设置定时器的工作模式,可以由16位(高、低两个8位)寄存器模式或其他位数的寄存器模式来计数,以16位计数模式来讨论,那就是无论那种工作模式只有当计数用的寄存器的各个位全部置1,也就是满值后下一个计数脉冲进入时使寄存器产生溢出,而这个溢出才会使计数产生中断从而完成一次定时控制,因此,如果我们想产生某个时长的定时,那么我需要将这个时长根据单片机运行的时钟频率、周期等等相关因素换算成需要计数的个数,进而在这个满值的16位寄存器中扣除需要计数的个数,启动运行后当计数值补充满了寄存器就完成了一次计时,而一个16位寄存器满值为2的16次方=65536,假如一个计数脉冲的周期为1us,那么满值后就会耗时65536us,假如我们需要计时36us,那么我们只需要为寄存器赋值65500就可以了,这里需要注意的是,因为C51单片机的寄存器是8位的,我们需要将这个65500拆分出高8位数据装入THx中计算方法为THx=65500/256,再计算出低8位数据装入TLx中,THx=65500%256。

单片机定时器的作用是什么啊

它的主要功能是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位。也可以用于将器件从休眠或空闲模式唤醒,看门狗定时器对微控制器提供了独立的保护系统。

当系统出现故障时,在可选的超时周期之后,看门狗将以RESET信号作出响应,像x25045就可选超时周期为1.4秒、600毫秒、200毫秒三种。当程序死机时,x25045就会使单片机复位。

扩展资料

定时/计数器T0和T1分别是由两个8位的专用寄存器组成,即定时/计数器T0由TH0和TL0组成,T1由TH1和TL1组成。

此外,其内部还有2个8位的特殊功能寄存器TMOD和TCON,TMOD负责控制和确定T0和T1的功能和工作模式,TCON用来控制T0和T1启动或停止计数,同时包含定时/计数器的状态。

TF1:定时器1溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除。或用软件清除。

TF0:定时器0溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除,或用软件清除。

参考资料来源:百度百科-定时器中断

参考资料来源:百度百科-看门狗定时器

单片机定时器的使用方法

第一步:设置特殊功能寄存器 TMOD,配置好工作模式。

第二步:设置计数寄存器 TH0 和 TL0 的初值。

第三步:设置 TCON,通过 TR0 置 1 来让定时器开始计数。

第四步:判断 TCON 寄存器的 TF0 位,监测定时器溢出情况。

写程序之前,我们要先来学会计算如何用定时器定时时间。我们的晶振是 11.0592M,时钟周期就是 1/11059200,机器周期是 12/11059200,假如要定时 20ms,就是 0.02 秒,要经过x 个机器周期得到 0.02 秒,我们来算一下 x*12/11059200=0.02,得到 x= 18432。16 位定时器的溢出值是 65536(因 65535 再加 1 才是溢出),于是我们就可以这样操作,先给 TH0 和 TL0一个初始值,让它们经过 18432 个机器周期后刚好达到 65536,也就是溢出,溢出后可以通过检测 TF0 的值得知,就刚好是 0.02 秒。那么初值 y = 65536 - 18432 = 47104,转成 16 进制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。

这样 0.02 秒的定时我们就做出来了,细心的同学会发现,如果初值直接给一个 0x0000,一直到 65536 溢出,定时器定时值最大也就是 71ms 左右,那么我们想定时更长时间怎么办呢?用你小学学过的逻辑,倍数关系就可以解决此问题。

好了,我们下面就用程序来实现这个功能。

#include

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main(){

unsigned char cnt = 0; //定义一个计数变量,记录 T0 溢出次数

ENLED = 0; //使能 U3,选择独立 LED

ADDR3 = 1;

ADDR2 = 1;

ADDR1 = 1;

ADDR0 = 0;

TMOD = 0x01; //设置 T0 为模式 1

TH0 = 0xB8; //为 T0 赋初值 0xB800

TL0 = 0x00;

TR0 = 1; //启动 T0

while (1){

if (TF0 == 1){ //判断 T0 是否溢出

TF0 = 0; //T0 溢出后,清零中断标志

TH0 = 0xB8; //并重新赋初值

TL0 = 0x00;

cnt++; //计数值自加 1

if (cnt 》= 50){ //判断 T0 溢出是否达到 50 次

cnt = 0; //达到 50 次后计数值清零

LED = ~LED; //LED 取反:0--》1、1--》0

}

}

}

}

程序中都写了注释,结合前几章学的内容,自己分析一下,不难理解。本程序实现的结果是开发板上最右边的小灯点亮一秒,熄灭一秒,也就是以 0.5Hz 的频率进行闪烁

设计一个基于单片机控制的专用定时器

按你说的意思,专门给你写的程序

电路图将放在

使用51单片机,时种频率为6MHz,

五个按键,1 复位键 2 开始/暂停键 3 调整键 4 +键 5 -键

程序如下:

;;;;;;;;;;;;;;;;;;;;;AT89S51,F=6MHz;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 00H ;程序从这里开始

SJMP MAIN ;主程序

ORG 0BH ;定时器0中断入口

LJMP GOTO

ORG 40H

;初始化

MAIN:MOV SP,#5FH ;设堆栈

MOV 30H,#50H ;设初值50S

MOV 31H,#50H ;剩余时间S

SETB P1.0 ;定时时间到输出位P1.0,接个LED

SETB P1.1 ;1 复位键

SETB P1.2 ;2 开始/暂停键

SETB P1.3 ;3 调整键

SETB P1.4 ;4 +键

SETB P1.5 ;5 -键

MOV R3,#50 ;设定时次数

MOV R4,#50

CLR TR0

MOV TMOD,#02H ;设定时器0工作方式为方式2

MOV TH0,#56 ;设初始值

MOV TL0,#56

SETB ET0 ;启动中断

SETB EA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LOOP:LCALL XIAN

LCALL AJ

SJMP LOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中断处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GOTO:PUSH A ;保护现场

DJNZ R3,GOTO1

MOV R3,#50

DJNZ R4,GOTO1

MOV R4,#50

MOV A,31H

LCALL DECBCD

MOV 31H,A

CJNE A,#00H,GOTO1

CLR TR0

CLR P1.0

GOTO1:POP A ;恢复现场

RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2位LED显示子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

XIAN:MOV A,31H ;将暂存的数转成字形

MOV B,#10H

DIV AB

LCALL ZH

MOV P0,A ;LED显示

MOV P2,#11111101B

LCALL DELAY

MOV A,B

LCALL ZH

MOV P0,A

MOV P2,#11111110B

LCALL DELAY

RET

DELAY:MOV R5,#0AH ;延时1mS(6MHz)

L1:MOV R6,#19H

L2:DJNZ R6,L2

DJNZ R5,L1

RET

ZH:MOV DPTR,#TAB ;字形转换

MOVC A,@A+DPTR

MOV P2,#0FFH ;消影

RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形0~9

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;-hsz

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示子程序结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BCD减1子程序HSZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DECBCD:CJNE A,#10H,DECA1

MOV A,#09H

RET

DECA1:CJNE A,#20H,DECA2

MOV A,#19H

RET

DECA2:CJNE A,#30H,DECA3

MOV A,#29H

RET

DECA3:CJNE A,#40H,DECA4

MOV A,#39H

RET

DECA4:CJNE A,#50H,DECA5

MOV A,#49H

RET

DECA5:CJNE A,#60H,DECA6

MOV A,#59H

RET

DECA6:CJNE A,#70H,DECA7

MOV A,#69H

RET

DECA7:CJNE A,#80H,DECA8

MOV A,#79H

RET

DECA8:CJNE A,#90H,DECA9

MOV A,#89H

RET

DECA9:CJNE A,#00H,DECAA

MOV A,#00H

RET

DECAA:DEC A

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;按键;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

AJ:JB P1.1,AJ2 ;复位

LCALL XIAN

JB P1.1,AJ2

CLR TR0

SETB P1.0

MOV R3,#50

MOV R4,#50

MOV TH0,#56

MOV TL0,#56

MOV 31H,30H

AJ1:JB P1.1,AJ2

LCALL XIAN

SJMP AJ1

AJ2:JB P1.2,AJ3 ;开始/暂停

LCALL XIAN

JB P1.2,AJ3

CPL TR0

AJ22:JB P1.2,AJ3

LCALL XIAN

SJMP AJ22

AJ3:JB P1.3,AJ4 ;设置调整

LCALL XIAN

JB P1.3,AJ4

CLR TR0

SETB P1.0

MOV R3,#50

MOV R4,#50

MOV TH0,#56

MOV TL0,#56

MOV 31H,30H

LOOP2:LCALL XIAN

AJ5:JB P1.4,AJ6 ;加1

LCALL XIAN

JB P1.4,AJ6

CJNE A,#99H,AJX

SJMP AJ55

AJX:MOV A,30H

ADD A,#01H

DA A

MOV 30H,A

MOV 31H,A

AJ55:JB P1.4,AJ6

LCALL XIAN

SJMP AJ55

AJ6:JB P1.5,AJ7 ;减1

LCALL XIAN

JB P1.5,AJ7

MOV A,30H

LCALL DECBCD

MOV 30H,A

MOV 31H,A

AJ66:JB P1.5,AJ7

LCALL XIAN

SJMP AJ66

AJ7:JB P1.2,AJ8 ;开始

LCALL XIAN

JB P1.2,AJ8

MOV 31H,30H

SETB TR0

AJ77:JB P1.2,AJ4

LCALL XIAN

SJMP AJ77

AJ8:SJMP LOOP2

AJ4:RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

END ;程序结束

怎样使用51单片机的定时器?

51单片机定时器的使用

51单片机定时器/计时器的使用

步骤:

1、 打开中断允许位:

对IE寄存器进行控制,IE寄存器各位的信息如下图所示:

EA: 为0时关所有中断;为1时开所有中断

ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开

2、 选择定时器/计时器的工作方式:

定时器TMOD格式

CPU在每个机器周期内对T0/T1检测一次,但只有在前一次检测为

1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz。

方式0:定时器/计时器按13位加1计数,这13位由TH中的高8位和TL中的低5位组成,其中TL中的高3位弃之不用(与MCS-48兼容)。

13位计数器按加1计数器计数,计满为0时能自动向CPU发出溢出中断请求,但要它再次计数,CPU必须在其中断服务程序中为它重装初值。

方式1:16位加1计数器,由TH和TL组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。

1

1/3

方式2:计数器被拆成一个8位寄存器TH和一个8位计数器TL,CPU对它们初始化时必须送相同的定时初值。当计数器启动后,TL按8位加1计数,当它计满回零时,一方面向CPU发送溢出中断请求,另一方面从TH中重新获得初值并启动计数。

方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特

3、 为计数器赋值

计数器初值计算

TC=M−C

TC:计数器初值,M:计数器模值(2k),C:把计数器计满的计数值 定时器初值计算

T=(M−TC)T计数

TC=M−T/𝑇计数

M:模值,T计数:单片机时钟周期TCLK(ΦCLK的倒数)的12倍;TC为定时器的定时初值,T为欲定时的时间。

TC=M−T×𝛷𝐶𝐿𝐾/12

M:模值,ΦCLK:单片机时钟周期ΦCLK;TC为定时器的定时初值,T为欲定时的时间。 例如:单片机主脉冲频率ΦCLK为12MHz,最大定时时间为: 方式0时 TMAX = 213×1us = 8.192ms 方式1时 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms

4TR0:为0时,停T0计数;为1时,启T0计数

2

2/3

TF0:为0时,无T0中断(硬件复位);为1时,有T0溢出中断 TR1:为0时,停T1计数;为1时,启T1计数 TF1:为0时,无T1中断(硬件复位);为1时,有T1溢出中断 IE1:为0时,硬件复位;为1时 IT1:为0时,INT1电平触发(软件复位);为1时,INT1负边沿触发 IE0:为0时,硬件复位;为1时 IT0:为0时,INT0电平触发(软件复位);INT0负边沿触发

5

在C51的C语言中使用interrupt x来指定中断入口地址,x为中断号,例T0中断: void Time0_Int() interrupt 1 //定时器T0的中断入口程序

有关单片机定时器的使用和定时器的介绍

导语:单片机,其实就是一种用于集成电路中的芯片,而单片机的定时器是一个电子元件,它是一个稳定的计数器,是由单片机本身提供的。它也是单片机上的一个连接部件,可以用来编程。定时器还有一个功能显而易见就是可以用来定时,同时,它也可以用来统计一些脉冲信号。下面就来介绍下单片机定时器的使用的相关内容。

  定时器的结构

定时器是由两个寄存器组成的,其中一个寄存器是用来确定计数器的工作形式和功能的,另外一个计时器是用来控制单片机的启动和停止的,同时它也是设置溢出的一个标志。

计数过程

每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

定时应用

用作定时器:此时设置为定时器模式,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。

计数运用

用作计数器:此时设置为计数器模式,外部事件计数脉冲由T0或T1引脚输入到计数器。每来一个外部脉冲,计数器加1。但单片机对外部脉冲有基本要求:脉冲的高低电平持续时间都必须大于1个机器周期。

定时器的使用

定时器的使用主要分为五个步骤,首先是要打开中断的可以允许的位置,主要是对IE寄存器的控制,然后选择定时器的工作的形式,定时器的一个格式是TMOD的形式,主要有四种方式。第一种计数的方式是十三位加一的形式,第二种是十六位加一的计数器,第三种的定数器被分解成两部分,一个是八位的寄存器,另外一个是八位的计数器。第三步就是要为定时器进行赋值,首先定时器的初值是等于计数器模值减去计数器记满的招满值,而定时器的初值是等于模值减去预定时的时间与单片机时钟周期的十二倍。接下来就是启动计时器,当TRO为0的时候,停止TO开始计数,而TRO值为1的时候,就启动TO进行计数。当TFO为0的时候,没有TO的中断,这时是没有硬件复位,而当值为1的时候有TO溢出中断的情况。当TR1为0的时候,停止TI进行计数,而值为1的时候开启T1进行计数。

当TF1为0的时候,没有T1的中断,为1 的时候会出现T1的溢出中断情况。当IE1的值为0的时候时,出现硬件的复位而当其值为1的时候出现中断。当IT1的值为0的时候INT1出现电平触发的情况,也就是软件复位,而当值为1的时候,INT1的负边沿会出现触发的情况。当IE0的值为0时会出现硬件复位,而当IEO的值为1的时候,INT0上会有中断的情况。当 IT0的值为0时,INT0会发生电平触发,也就是软件复位,同时INT0的负边沿触发。最后一步就是计数器中断入口程序。

定时器/计数器的工作方式

方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

方式1的计数位数是16位,由TL0(TL1)作为低8位、TH0(TH1)作为高8位,组成了16位加1计数器 。

方式2为自动重装初值的8位计数方式。

在方式2下,当计数器计满255(FFH)溢出时,CPU自动把TH 的值装入TL中,不需用户干预。因此特别适合于用作较精确的脉冲信号发生器。

方式3只适用于定时器/计数器T0,定时器T1方式3时相当于TR1=0,停止计数。

工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。

总而言之,定时器的使用可以为单片机的功能增加一些性能上的增强。所以,合理的运用定时器将会帮助我们使用单片机。以上就是有关单片机定时器的使用的相关内容,希望能对大家有所帮助!

基于单片机的多功能定时器的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:基于单片机的多功能定时器

<