单片机3种定时方法_51单片机定时器初值计算方法 - CSDN
  • 单片机控制定时器

    2015-12-12 16:30:57
    51单片机有2个16位的定时/计数器T0、T1,52单片机3个16位定时/计数器T0、T1、T2。 定时/计数器顾名思义就是有定时和计数的功能,下面主要介绍定时器,对计数器不进行论述单片机定时功能在日常的单片机编程中应用...
    一、定时器介绍
    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<reg52.h>
    #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中断累加
    }


    展开全文
  • 单片机 -长时间定时

    2019-02-28 16:15:02
    由于定时时间较长,一个定时/计数器不能直接实现,可以定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或定时/计数器T1对10ms计数50次实现。 系统时钟为12MHZ,定时/计数器T0定时10ms,计...

    在这里插入图片描述

    设系统时钟频率为12MHZ,编程实现从P1。1输出周期为1s的方波。

    由于定时时间较长,一个定时/计数器不能直接实现,可以定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或定时/计数器T1对10ms计数50次实现。

    系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为1000,只能选择方式1,方式控制字为00000001B(01H) ,初值X:

    X=65536-10000 =55536 =1101 1000 1111 0000B,

    则TH0=1101 1000B=D8H TL0=1111 0000=F0H

    用某变量i对计数器溢出中断次数进行软件计数
    在这里插入图片描述

    展开全文
  • 单片机定时/计数器

    2012-02-01 11:26:28
    上一篇,我们给大家讲述了单片机的一些简单入门知识,不知道对您是否有用呢,今天我将继续为大家献上单片机定时/计数器知识,...实现定时/计数,有软件,数字电路和可编程定时/计数3种主要方式.   定时/计数器的结构

    上一篇,我们给大家讲述了单片机的一些简单入门知识,不知道对您是否有用呢,今天我将继续为大家献上单片机的定时/计数器知识,欢迎和我一起讨论学习,嘻嘻。

     

    在测量控制系统中,常常要求有一些实时时钟,以实现定时控制,定时测量或延时动作,也往往要求有计数器能对外部事件计数,如测电机转速,频率,工作个数等.

    实现定时/计数,有软件,数字电路和可编程定时/计数3种主要方式.

     

    定时/计数器的结构和工作原理

    51单片机的定时/计数器T1由寄存器TH1和TL1组成,定时/计数器T0由寄存器TH0和TL0组成.它们均是8位寄存器.它们用于存放定时或计数的初始值.

    定时/计数器实质上是加1计数器,它可以工作与定时方式,也可以工作于计数方式.两种工作方式实际上都是对脉冲计数,只不过所计脉冲的来源不同.

     

     

    定时方式:

    TMOD.2=0,开关打向上,计数器TH0,TL0的计数脉冲来自振荡器的12分频后的脉冲,即对系统的机器周期计数.每过一个机器周期,寄存器TH,TL自动加1,当计满了预设的个数,TH,TL回零.产生溢出中断.

    计数方式:

    TMOD.2=1,开关打向下,计数器的计数脉冲分别来自于引脚T0和T1上的外部脉冲.当计满预制数后回零,并产生中断.

    计数器的最高频率不得超过振荡器的24分频.

     

    定时/计数器的寄存器

    51单片机的定时/计数器为可编程定时/计数器.在定时/计数器工作之前,必须将控制命令写入定时/计数器的控制寄存器,即进行初始化.

    定时/计数器方式寄存器TMOD

    TMOD寄存器为8位,高4位用于选择T1的工作方式,低4位用于选择T0的工作方式.

     

     

    定时/计数器控制寄存器TCON

    TCON寄存器是一个多功能的寄存器.

     

    TF1:T1溢出中断请求标志。

    TR1:T1运行控制位

    TF0:T0溢出中断请求标志

    TR0:T0运行控制位

     

    定时/计数器的工作方式

    51单片机的定式/计数器有4种工作方式:

     

     

    工作方式0

    方式0为13位定时计数方式,由TH提供高8位,TL提供低5位的计数初值,最大计数值为 (8192个脉冲)。

    工作方式1

    方式1与方式0基本相同。唯一的区别在于计数寄存其的位数是16位,由TH提供高8位,TL提供低8位的计数初值,最大计数值为 (65536个脉冲)。

    工作方式2

    方式2是8位的可自动装入的定时计数方式。最大计数数值为 (256个脉冲)。

    工作方式3

    方式3只是用于定时/计数器0。只有将T1用做串行口的波特率发生器时,T0才工作在方式3,以便增加一个定式/计数器。

    定时/计数器的计数初值的计算

     

     

     

    更多信息请访问相关博文:http://blog.csdn.net/wiznet2012/article/details/7218846

    如果您有什么疑问请留言或者来信:wiznetbj@wiznettechnology.com,希望本篇文章可以给您带来帮助,谢谢。

     

     

     

    展开全文
  • 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期) 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个振荡周期。 ...

    前言:单片机的中断系统(一)

    图片和内容来自普中科技的ppt。


    相关知识:

    周期:

    振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)

    状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。

    机器周期:1个机器周期含6个状态周期,12个振荡周期。

    指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

    (1M=1000000,所以在晶振频率为12MHZ时,一个机器周期=1/12M=1us)

      (指令周期的长短不一,如果不知道一些指令周期的长度,即使定时中断,也不能理论上绝对准确的中断。因为函数的调用等也需    要时间)(这目前我还不会,但是感觉应该可以更精确延时,因为可以在计时中剪掉相应的操作时间)

    IT0/IT1:

    51单片机有两组定时器/计数器IT0/IT1,因为既可以定时又可以计数,故称之为定时器/计数器。

    定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

    51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。

    有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。

     

    定时/计数器的工作原理

    定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

     

    51单片机定时/计数器结构

    定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

    图一:定时计数器结构

     

    定时/计数器的控制

    51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

    工作方式寄存器TMOD

    图二:TMOD

    1、高四位用来控制T1,低四位用来控制T0

    2、GATE是门控位。GATE=0时,用于控制定时器的启动不受外部中断源信号的影响。只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。

    3、C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。(T上有个非)

    4、M1M0:工作方式设置位。定时/计数器有四种工作方式。(8位自动重装,指的是将初始化值装在高位,然后赋值给低位。低位进行计数或计溢出后,高位的数重新赋值给低位,重复)

    图三

     

    控制寄存器TCON

    制定时/计数器的启动和中断申请。其格式如下:

    图四

    TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

    TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

    TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。

    TR0(TCON.4):T0运行控制位,其功能与TR1类同。

     

    定时/计数器的工作方式

    这里仅仅提及方式一(我目前只用过这两种)

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

            计数个数与计数初值的关系为:X=216-N

    图五

     

     

     

    定时器的使用

    对TMOD赋值,以确定T0和T1的工作方式。

    计算初值,并将其写入TH0、TL0或TH1、TL1。

    中断方式时,则对EA,ET0/1赋值,开放定时器中断。

    使TR0或TR1置位,启动定时/计数器定时或计数。(这个最后设置,因为一旦设置,计时或计数就开始)

     

    代码:

    定时器0

    #include<reg52.h>
    
    sbit led=P2^0;//LED接在P2^0引脚上
    
    int i=0;
    
    void Timer0Init()
    {
    	TMOD|=0X01;//这样写是非常好的,仅仅设置定时器0,不影响定时器1的工作状态。在多文件编程中,这一点能更好的体现
    	TH0=(65536-1000)/256;
       	TL0=(65536-1000)%256;
    	//TH0=0xFC;//晶振频率为12M
    	//TL0=0X18;
    	TH0=0xFC;//我板子上晶振频率为11.05926M
    	TL0=0X66;//这差别很小的
    	ET0=1;//定时器0的中断允许
    	EA=1;//打开总终端
    	TR0=1;
    }
    
    void main(void)
    {
    	Timer0Init();
    	while(1);			
    }
    
    void Timer0() interrupt 1//尽量减少中断中的操作,提高精度
    {
       i++;
       TH0=0xFC;//重新赋初值
       TL0=0X66;
       if(i==1000)
       {
       		led=~led;
    		i=0;
       }
    }
    
    
    

    1、TMOD|=0X01;//这样写是非常好的,仅仅设置定时器0,不影响定时器1的工作状态。在多文件编程中,这一点能更好的体现

    2、尽量减少定时中断中的操作,提高精度。

    3、这个定时中断是1ms,中断中的操作应该是不到1000的1/10,所以这个中断在ms级别中,可能还是相对准确的。可以用于以后的实验。但是在s级别误差逐渐变大,下面是我简单测量的方法和结果。

    测量:

    在灯灭下的瞬间,手机开始计时。如果要测10s,在第五次灯灭的时候结束计时。(因为点亮和熄灭各一秒)

    下面用上述方法测量了10s,30s,50,70s,各三次。结果如下

    1ms延时的测量
      10s 30s 50s 70s
    第一次测量(s) 09.77 28.08 46.48 65.98
    第二次测量(s) 09.38 28.15 46.44 65.88
    第三次测量(s) 09.46 28.08 47.18 65.53
    实际平均时间(s) 09.536 28.103 46.700 65.797

     上表可见,误差越来越大。当然也可能我的晶振不是11.0592MHz,上面没标注,问的淘宝客服。

    好奇万年历是怎么做出来的,回头好好查查。

     

    定时器1(普中科技的代码)

    /**************************************************************************************
    *		              定时器1实验												  *
    实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。
    注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。																				  
    ***************************************************************************************/
    
    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit LSA=P2^2;
    sbit LSB=P2^3;
    sbit LSC=P2^4;
    
    u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
    u8 n=0;
    /*******************************************************************************
    * 函 数 名         : Timer1Init
    * 函数功能		   : 定时器1初始化
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void Timer1Init()
    {
    	TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
    
    	TH1=0XFC;	//给定时器赋初值,定时1ms
    	TL1=0X18;	
    	ET1=1;//打开定时器1中断允许
    	EA=1;//打开总中断
    	TR1=1;//打开定时器			
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {	
    	LSA=0;
    	LSB=0;
    	LSC=0;
    	Timer1Init();  //定时器1初始化
    	while(1);		
    }
    
    /*******************************************************************************
    * 函 数 名         : void Timer1() interrupt 3
    * 函数功能		   : 定时器0中断函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void Timer1() interrupt 3
    {
    	static u16 i;
    	TH1=0XFC;	//给定时器赋初值,定时1ms
    	TL1=0X18;
    	i++;
    	if(i==1000)
    	{
    		i=0;
    		P0=smgduan[n++];
    		if(n==16)n=0;	
    	}	
    }

    在定时中断函数中,为了不断定时,进行了重装载(重新赋值)。当溢出的时候ET0置一,中断标志。

    TR0=1,为打开计时器;ET0=1是打开定时器1中断允许。我咋感觉这两个有点重复呢?

     

    补充:

    来自百度百科:晶体振荡器

            石英晶体振荡器是高精度和高稳定度的振荡器,被广泛应用于彩电、计算机、遥控器等各类振荡电路中,以及通信系统中用于频率发生器、为数据处理设备产生时钟信号和为特定系统提供基准信号。

            石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片(简称为晶片,它可以是正方形、矩形或圆形等),在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 单片机实验-定时中断

    2018-07-22 16:15:50
    1.掌握51单片机定时器工作原理。 2.掌握51单片机中断系统工作原理。 3.掌握定时器初始化编程。 4.掌握中断程序的编写和调试。 二.实验设备和器件 1.KEIL软件 2.PROTEUS仿真软件 3.伟福实验箱 三.实验内容 ...
  • 8051单片机内部有两个16位的定时/计数器:T0和T1 定时器用途:延时和脉宽测量 读取方式:软件读取和中断 公式: T(初值)=2^N-定时时间/机器周期时间 机器周期时间=12/fosc N:代表几位定时器,有13 16...
  • 汇编语言+C语言 51单片机定时闹钟设计,proteus 仿真
  • 51单片机定时/计数器 实现LED灯闪烁,代码如下: #include &lt;reg51.h&gt; //51单片机头文件 sbit LED = P0^0; //定义特殊寄存器p0.0;注意:sbit 必须小写、P 大写! void main() { unsigned int i; //...
  • 单片机定时功能 先上代码,然后再解释: //定時器功能 void timer_0(void) { TMOD=0x01; //採用定時器T0,工作方式為1(16位定时器) IE=0x82; //二進制1000|0010,七位為1表示全局中斷打開,即EA=1,一位...
  • 51单片机 定时/计数器

    2019-03-18 15:24:21
    51单片机中有两个定时/计数器T0、T1,既可以实现定时功能,也可以实现计数功能。 T0可工作在四定时器模式下, 在定时方式1下,定时/计数器0的核心是一个16位宽的由计数脉冲触发的按递增规...
  • 如果使定时器1为工作方式3,则定时器1将处于关闭状态。 当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0...
  • /*****************************...定时炸弹 9秒倒计时,至0时蜂鸣器响演示炸弹 Author:Vivien *******************************************************/ #include &lt;reg51.h&gt; #define DataPort P0 /...
  • 单片机根据计时/计数模式的不同,来进行计算 M1 M0 工作模式 说明 0 0 0 13位计时计数器 (8192) 0 1 ...
  • 定时器(计数器) ...  51系列单片机中有两个16位可编程定时/计数器:T0和T1,52子系列还有一个T2 定时/计数器T0、T1的结构 如图,T0、T1各有两个计数变量TH、TL 计数变量有计数范围,当计数变量达到计数上...
  • 定时器/计数器51的定时器/计数器有2个分别是T1和T0,52系列的单片机3个定时器/计数器,T0和T1是通用定时器/计数器,定时器/计数器2(简称T2)是集定时、计数和捕获三功能于一体,功能更强。首先看一下这个简单点...
  • 单片机定时中断的精确定时编程方法种种作 者:■ 南京农业大学 蹇兴亮引 言 MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为...
  • 我们这学期开了单片机的课,不知道为什么我们要用汇编语言写程序,感觉汇编程序真的挺难写的,所以把实验记录下来把。 如果没有学过汇编的小伙伴建议先去熟悉一下简单的汇编指令,之前简单的实验我就不记录了,我们...
  • 3.根据需求,开放定时/计数器中断选项 4.设置 TCON,通过 TR0 置 1 来让定时器开始计数。 5.等待定时时间到,如果查询处理编写查询程序判断溢出标志,溢出标志等于1,如果中断方式处理,编写中断服务程序。 计算...
1 2 3 4 5 ... 20
收藏数 11,678
精华内容 4,671
关键字:

单片机3种定时方法