定时器的基本原理 | 您所在的位置:网站首页 › 计时器原理图画法视频 › 定时器的基本原理 |
一、定时器概念:
1.能够对内部时钟信号或外部输入信号进行计数,数值达到设定要求时,向CPU发起中断请求,完成外部程序的运行。 2.本质就是进行计数,选择内部时钟脉冲,作为计数器时,技术信号的来源选择非周期脉冲信号。 二、过程:C51具有两个定时器/计数器T0和T1,16位的加法计数器,由低8位和高8位THx两个寄存数值为65535个技术脉冲。 技术脉冲的来源有两个: (1)系统时钟振荡器输出的12分频。 (2)T0或T1引脚输入的外部脉冲信号。 每接收到一个计数脉冲,计数器就会加1,当计数值累计至全为1时(8位255,13位8191,16位65535),再输入一个计数脉冲,计数器便会溢出回零,并且计数器的溢出是TCON寄存器的TF0或TF1位置1,同时向内核提出中断请求。如果定时/计数器工作于定时模式,则表示间隔定时时间到,如果工作与计数模式,则表示计数值已满。 假设单片机的外部晶振为12MHz,那么,经过12分频后输入计数器的计数脉冲为1MHz,即每个脉冲的周期为1us。因此定时器T0的16位工作模式最大的定时时间为65535us,65.5ms。如果要定时10ms的话,计数器就不能够从0开始计数了,必须给它一个计数初值。怎么计算这个初值呢? 要定时10ms,则相当于计数10000个脉冲后计数器的值就到达65535了,那么开始计数的这个地方就是计数初值。 三、编程思路:定时/计数器的程序设计中,通常有两个函数:初始化函数和中断服务函数。 初始化函数中,一般情况下有: a.配置工作模式,即对TMOD寄存器编程。 b.计算初始化值,即对THx和TLx寄存器进行赋值。 c.定时器/计数器中断,对ET0或ET1置1. d.打开总中断,EA=1。 e.启动定时器,即TR0或TR1置1. 中断服务函数中有: 如果不是自动重装模式,需要对THx和TLx重新进行赋值;进行间隔定时达到逻辑处理越少越好。 代码如下: #include "reg52.h" sbit L1 = P0^0; sbit L8 = P0^7; void SeclectHC573() { P2 = (P2 & 0x1f | 0x80); } //**** void InitTimer0() { TMOD = 0x01; TH0 = (65535 - 50000) / 256; TL0 = (65535 - 50000) % 256; ET0 = 1; EA = 1; TR0 = 1; } unsigned char count = 0; //这里我们可以在定义一个unsigned型的count1变量,但是为了代码的简洁,我们只需要定义一个即可 //unsigned char count1 = 0; void ServiceTimer0() interrupt 1 { TH0 = (65535 - 50000) / 256; TH0 = (65535 - 50000) % 256; count++; if(count % 10 == 0) { L1 = ~ L1; //count = 0; } if(count == 100) { L8 = ~L8; count = 0; } } //*** void main() { SeclectHC573(); InitTimer0(); while(1) { } } |
CopyRight 2018-2019 实验室设备网 版权所有 |