单片机控制定时器

发布者:科技飞翔最新更新时间:2018-08-12 来源: eefocus关键字:单片机控制  定时器 手机看文章 扫描二维码
随时随地手机看文章

一、定时器介绍
51单片机有2个16位的定时/计数器T0、T1,52单片机有3个16位定时/计数器T0、T1、T2。
定时/计数器顾名思义就是有定时和计数的功能,下面主要介绍定时器,对计数器不进行论述单片机的定时功能在日常的单片机编程中应用十分的广泛,同时定时中断也是单片机常用的中断之一,所以学好定时控制也是非常重要的,如果不理解中断的概念请查我的文章嵌入式中断的理解 http://blog.csdn.net/snyanglq/article/details/50238205

二、单片机的内部框图与定时器工作原理分析


大家请看上面的图,这是定时器T0和T1内部结构图,图中用不同颜色的线条标注了相互之间的工作关系,
从上面的图中红线可以看出由TMOD选择由那个定时器工作,工作于什么方式;
从上面的图中蓝线可以看出由TCON决定定时器是否启动;
从上面的图中黄线可以看出外部技术输入由TH和TL进行累计;
从上面的图中紫线可以看出当TH和TL计数溢出时会向TCON进行申请报告;
从上面的图中绿线可以看出所有的定时中断都由TCON向CPU进行中断申请;
从上面的图中黑线可以看出外部中断直接向CPU进行中断申请;

通过上面的图大家已经对CPU的定时中断内部结构图有一个清晰的理解,下面再看看单片机的工作原理图


从上图可以看出当作为定时器使用时,计时脉冲来自于外部晶振振荡频率后的12分频,当设置为计数器时则是直接外部脉冲作为计时脉冲,控制选择定时还是计数由C/T位控制,而控制定时器是否进行计时则由B控制,B是一个与门的输出端,与门的工作原理是有0出0,全1出1,可见定时器要启动TRx和A必须要为1,而A是或门的输出,或门的工作原理是有1出1,全0出0,所以需要输入端要任意一位为1方可,当所有条件符合,TH和TL开始定时计算,当两个计数器计数满溢出时,会令TF置位,最后由TF向CPU发出中断请求,处理中断程序,注意此时,单片机的计数器会清零,这是计数器内部设计决定的,所以定时需要再次使用时需要重载计数器初值

三、寄存器介绍


TCON:
TF0和TF1:定时器/计数器溢出标志位。

                    当定时器/计数器0(或定时器/计数器1)溢出时,由硬件自动使TF0(或TF1)置1,并向CPU申请中断。

                    CPU响应中断后,自动对TF1清零。TF1也可以用软件清零。 

TR0和TR1:定时器/计数起运行控制位。  
                     TR0(或TR1)=0,停止定时器/计数器0(或定时器/计数器1)工作。
                     TR0(或TR1)=1,启动定时器/计数器0(或定时器/计数器1)工作。

外部中断暂时不介绍

TMOD:
GATE:门控位。  
             GATE=0,只要用软件使TR0(或TR1)置1就能启动定时器/计数器0(或定时器/计数器1);
             GATE=1,只有在(或)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器/计数器0(或定时器/计数器1)工作。不管GATE处于什么状态,只要TR0(或TR1)=0定时器/计数器便停止工作。
C/T: 定时器/计数器工作方式选择位。
           C/T =0,为定时工作方式;
           C/T=1,为计数工作方式。  
M0、M1:工作方式选择位,确定4种工作方式。


IE:
EA = 1, CPU开放总中断;     
ET0 = 1,允许T0中断;
TR TL:定时器寄存器
注意:由于reg52.h的库定义了大部分的寄存器所以可以直接给TCON TMOD IE赋值操作或者是单独寄存器操作。


四、中断程序执行方法和定时计数公式
中断程序执行方法有直接中断和查询两种方法,查询即查询TF位是否置位为1
定时初值计算公式为:
定时时间=(计数最大值 – 计数初值)×机器周期 
机器周期T = 12/晶振频率


或者是用取模的方式
TH0=(计数最大值 – 定时时间)/256;
TL0=(计数最大值 – 定时时间)%256;


首先解析为什么要设定初值?
当设定定时器为16为计数器时,则计数最大值为2^16 = 65536;
TH和TL分别为8位,即TL每逢256进一位,所以除掉256就能看出TH进了多少位,取模则是余下多少位
举个例子,2位计数器最大计数为4,要将初值6分到两个2位计数器,由于低位逢四进1所以剩下2

即TL = 2然后高位是1即TH=1,按照上面的方法:2^4 = 16,2^2 = 4; TH = (16-(16-6))/4=1(整型不算小数);

TL = (16-(16-6))%4=2;可见结果是一样的。


五、程序设计
例:利用数码管静态显示0到9,每1S钟加一,到9再加1回到0,使用中断程序实现。


分析:一秒钟加一即需要定时1S后才能动作,由于单片机最大定时也只是65536ms,

所以我们需要累加,为了计算方便我们累加20次定时50ms

#include

#define uchar unsigned char 

#define uint unsigned int 

 

uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

uchar num,a;

 

void main()

{

 TMOD=0x01;             //设置定时器0为工作方式1[直接赋值]

 TH0=(65536-50000)/256; //利用取模方式设置初值

 TL0=(65536-50000)%256;

 EA=1;      //打开总中断开关[直接操作寄存器]

 ET0=1;     //打开定时器中断

 a = 0;     //初始化a、num为了程序严谨,也可以去掉

 num = 0;

 TR0=1;     //启动定时器

 

 while(1)

 {

  if(a==20)

  {

   a=0; 

   P1=smg_du[num];

   num++;

   if(num==10)

   {

     num=0;

   }

  }

 }

}

 

void timer0 () interrupt 1  

{

 TH0=(65536-50000)/256; //初值重载,否则下次定时就是65535us而不是50ms

 TL0=(65536-50000)%256;

 a++;                   //50ms中断累加

}


关键字:单片机控制  定时器 引用地址:单片机控制定时器

上一篇:单片机控制串口通信
下一篇:单片机控制独立按键读入

推荐阅读最新更新时间:2024-03-16 16:10

NEC单片机 UPD78F9234 16位定时器使用例程
NEC单片机 UPD78F9234 16位定时器使用例程(汇编) ;************************************************* ; Lable def ;************************************************* LED8_MODE EQU PM2.1 LED7_MODE EQU PM2.0 LED6_MODE EQU PM12.0 LED5_MODE EQU PM0.3 LED4_MODE EQU PM0.2 LED3_MODE EQU PM0.1 LED2_MODE EQU PM0.0 LED
[单片机]
具有四个输出并基于微处理器的双定时器
基于Freescale半导体公司MCC908QY型8位闪存微型计算机的图1所示电路,可提供一个低成本通用双定时器,该定时器可代替单触发电路。您可以通过修改汇编语言软件来满足特定应用要求。该电路采用微处理器 IC1的内部12.8MHz 时钟振荡器。内部时钟除以4即获得3.2 MHz时钟频率,此频率进一步除以定时器预定比例 64即获得50 kHz时钟。将定时器模数计数器除以 50000,可获得可产生1次/秒实时中断与主定时间隔 的1Hz 时基。   每组4个的两组开关(S3至S6及S7至S10),分别以1"16秒的递量设置时间间隔 t1和 t2。尽管该图只给出了单独的DIP 开关,但您也可采用十六进制编码的旋钮式开关来设置时
[单片机]
stm32定时器主从模式
TIM2作master;TIM3,TIM4作slave 定时器2事件更新被用作触发输出TRGO 从定时器TIM3,TIM4工作在从模式:门控模式 触发选择设为:ITR1,这样TIM2的TRGO就连到了TIM3和TIM4的内部触发输入ITR1上,经过一系列选择器之后TIM2的TRGO就是TIM3和tim4的TRGI; 这样一来就可以通过控制TIM2的period和Pulse来控制TIM3和TIM4输出一定的脉冲个数;
[单片机]
stm32<font color='red'>定时器</font>主从模式
STM32基础定时器详解
定时器最基本的功能就是定时处理事情。比如定时发送USART数据、定时采集AD数据、定时检测IO口电位、还可以通过IO口输出波形等。可以实现非常丰富的功能。定时器是一个很强大的外设,不同行业使用的方式不同,知识面很广。 01、定时器介绍 首先我们可以在STM32F207数据手册找到定制器的资源,从下图可以看到STM32F207一共10个通用定时器,2个高级定时器,2个基本定时器。 不同定时器的区别 在STM32F207的用户参考手册中可以看到定时器的基本框图,下图是定时器1&8的看图。 由上图看出,不同寄存器具有不同的参数,位数的区别,计数模式的区别,DMA请求的区别,通道得的区别,互补输出的区别和其他。在具体项目中
[单片机]
STM32基础<font color='red'>定时器</font>详解
MSP430F149;一、TIMEA
定时器A的逻辑图 由下图可以知道定时器有大致两部分: 时钟模块: 捕获比较 定时器模式说明 00:计数器停止 01:计数器从0到taccr0;taccro是手动设定的值 10:计数器从0到0xFFFF(2^16=65536)然后到0再从0到65535,一直循环; 11:计数器从0到taccr0再到0;然后,从0到taccr0再到0;循环0到taccr0再到0;(taccro是手动设定的值) 用到的寄存器介绍 用到的寄存器说明 主要是:时钟源选择;输入时钟分频(比如之前时钟源分频得到的时钟信号,在这里可以再分频,得到需要的震荡频率);时钟模式控制,上面说过的;中断使能和中断标志; 这个就是用来计数的,一个
[单片机]
MSP430F149;一、TIMEA
STM8与汇编语言(8)--16位定时器应用
当需要更长时间的定时时,最好使用16位的定时器,STM8单片机中都提供了2到3个的16位定时器,方便用户使用。 下面的代码给出了一个采用16位定时器实现的定时中断程序,在定时中断程序中,驱动LED指示灯的闪烁。 切记,一定要将中断服务程序的入口地址填写到中断向量表中,并且要根据定时器的中断向量号在正确的位置上填写。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。 stm8/ #include mapping.inc #include
[单片机]
51单片机C语言程序100例分析(2)定时器+中断
#include reg51.h //包含 51 单片机寄存器定义的头文件 void main(void) { TMOD=0x01;// 使用定时器 T0 的模式 1 TH0=(65536-46083)/256; // 定时器 T0的高 8 位赋初值 TL0=(65536-46083)%256; // 定时器 T0的低 8 位赋初值 TR0=1; // 启动定时器 T0 TF0=0; //清定时器溢出标志位 P2=0xff; while(1)// 无限循环等待查询 { while(TF0==0); TF0=0; P2=~P2;//按位取反 TH0=(65536-46083)/256; /
[单片机]
单片机控制技术发展与应用
1 单片机技术的发展特点 自单片机出现至今,单片机技术已走过了近20年的发展路程。纵观20年来单片机发 展历程可以看出,单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发 展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。 单片机长寿命 这里所说的长寿命,一方面指用单片机开发的产品可以稳定可靠地工作 十年、二十年,另一方面是指与微处理器相比的长寿命。随着半导体技术的飞速发展, MPU更新换代的速度越来越快,以386、486、586为代表的MPU,很短的时间内就被淘汰出 局,而传统的单片机如68HC05、8051等年龄已有15岁,产量仍是上升的。这一方面是由 于其对相应应用领域的适应性,另一方面是
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved