精华内容
下载资源
问答
  • 51单片机定时器

    2011-11-02 00:05:04
    主要讲述对51单片机进行定时器的编写方法
  • C51单片机定时器

    2020-10-02 14:50:32
    1、定时器的构成 定时器:硬件 ; 此件利用 T0定时器,可在四种模式下工作 实质是加1计数器(16位计数器),由高8位TH0和低8位TL0两个寄存器组成,TMOD是工作方式寄存器,TCON是控制寄存器 2、定时器溢出 ...

      一、

    与以前的软件延迟做对比:软件延迟利用若干次空循环实现,占用CPU

    1、定时器的构成

    定时器:硬件  ;

    此件利用 T0定时器,可在四种模式下工作

    实质是加1计数器(16位计数器),由高8位TH0和低8位TL0两个寄存器组成,TMOD是工作方式寄存器,TCON是控制寄存器

    分开赋初始值
    TH0=0x??;
    TL0=0x??;

    2、定时器溢出

    任何一个计数范围有限的系统,都存在溢出现象。系统可表达数的个数,称为模。溢出时,会导致定时器溢出中断请求(发出中断请求),与此时是否使能无关。但是有发生中断请求,不一定会被收到

    溢出=总数为11,10+5时,等于15>11,无法表示,就溢出

    3、计数器的控制

    TMOD是工作方式寄存器,TCON是控制寄存器(控制启动和中断申请)

    ①TMOD   低四位用于T0,高四位用于T1   

    GATE:门控位

    GATE=0时,令TR0=1,可以启动工作;

    GATE=1时,令TR0=1,和外部中断引脚也为高电平,才可以启动工作

    C/T:模式选择位

    =0为定时模式;=1为计数模式

    M1M0:工作方式设置位

    自动重装定时:在溢出后,发出中断请求,会自动回零

         //前三个步骤
    TMOD=0x01;//0x01=0000 0001,在低四位,分别为gate,c/t,m1m0

    TCON是控制寄存器(高四位进行控制)

    TR1&TR0:运行控制位,=1,开始工作,=0,停止工作

    TF1&TF0:中断请求标志位,溢出时硬件会自动将其置于“1”

    TR0=1;//运行控制位,置1位为工作

    ③中断的开启

    EA=1 总中断开启

    ET0=1 ET0是T0的中断允许位,ET1是T1的

    EA=1;//开大门
    	ET0=1;//定时器0的中断运行

    通过公式进行计算,得到初始值,将其附上,就可以得到想要的延迟时间

     

    //简单的利用定时器控制LED的延迟闪烁
    
    #include <reg52.h>
    #include"bstv51.h"
    
    void dsq()
    {
      	TMOD|=0x01;//0000 0001,最后2位-工作方式的选择,这里选择16位定时器‘01’
    	TH0=0X00;//给高、低四位都赋初值=0
    	TL0=0X00;
    	EA=1;//开大门
    	ET0=1;//定时器0的中断运行
    	TR0=1;//运行控制位,置1位为工作
    }
    
    
    void main()
    {
    	bstv51_init();
    	while(1);
    }			
    
    void ab(void)interrupt 1  //中断的时间在大约65ms ,但是中断函数一般不要写太多东西
    {
    	TH0=0x00;
    	TL0=0x00;
    	L0=~L0;
    }						 

     

    展开全文
  • 51单片机 定时器

    2019-04-10 20:04:46
    51单片机中断级别 中断源 默认中断级别 序号(C语言用) INT0---外部中断0 最高 0 T0---定时器/计数器0中断 第2 1 INT1---外部中断1 第3 2 T1----定时器/计数器1中断 第4 3 ...

    51单片机中断级别

    中断源 默认中断级别 序号(C语言用)
    INT0---外部中断0 最高
    T0---定时器/计数器0中断 第2 1
    INT1---外部中断1 第3 2
    T1----定时器/计数器1中断 第4 3
    TX/RX---串行口中断 第5 4
    T2---定时器/计数器2中断 最低 5

    中断允许寄存器IE

    位序号 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    符号位 EA ------- ET2 ES ET1 EX1 ET0 EX0

    EA---全局中允许位。
    EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
    EA=0,关闭全部中断。
    -------,无效位。
    ET2---定时器/计数器2中断允许位。 EA总中断开关,置1为开;
    ET2=1,打开T2中断。 EX0为外部中断0(INT0)开关,……
    ET2=0,关闭T2中断。 ET0为定时器/计数器0(T0)开关,…… 
    ES---串行口中断允许位。 EX1为外部中断1(INT1)开关,……
    ES=1,打开串行口中断。 ET1为定时器/计数器1(T1)开关,……
    ES=0,关闭串行口中断。 ES为串行口(TX/RX)中断开关,……
    ET1---定时器/计数器1中断允许位。 ET2为定时器/计数器2(T2)开关,……
    ET1=1,打开T1中断。
    ET1=0,关闭T1中断。
    EX1---外部中断1中断允许位。
    EX1=1,打开外部中断1中断。
    EX1=0,关闭外部中断1中断。
    ET0---定时器/计数器0中断允许位。
    ET0=1,打开T0中断。
    ET0=0,关闭T0中断。
    EX0---外部中断0中断允许位。
    EX0=1,打开外部中断0中断。
    EX0=0,关闭外部中断0中断。
    中断优先级寄存器IP

    位序号 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    位地址 --- --- --- PS PT1 PX1 PT0 PX0

    -------,无效位。
    PS---串行口中断优先级控制位。
    PS=1,串行口中断定义为高优先级中断。
    PS=0,串行口中断定义为低优先级中断。
    PT1---定时器/计数器1中断优先级控制位。
    PT1=1,定时器/计数器1中断定义为高优先级中断。
    PT1=0,定时器/计数器1中断定义为低优先级中断。
    PX1---外部中断1中断优先级控制位。
    PX1=1,外部中断1中断定义为高优先级中断。
    PX1=0,外部中断1中断定义为低优先级中断。
    PT0---定时器/计数器0中断优先级控制位。
    PT0=1,定时器/计数器0中断定义为高优先级中断。
    PT0=0,定时器/计数器0中断定义为低优先级中断。
    PX0---外部中断0中断优先级控制位。
    PX0=1,外部中断0中断定义为高优先级中断。
    PX0=0,外部中断0中断定义为低优先级中断。
    定时器/计数器工作模式寄存器TMOD

     

     

    M1 M0 工作模式
    0 0 方式0,为13位定时器/计数器
    0 1 方式1,为16位定时器/计数器
    1 0 方式2,8位初值自动重装的8位定时器/计数器
    1 1 方式3,仅适用于T0,分成两个8位计数器,T1停止工作

    |-----------------定时器1------------------------|--------------------定时器0----------------------|
    GATE---门控制位。
    GATE=0,定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制。
    GATE=1,定时器计数器启动与停止由TCON寄存器中TRX(X=0,1)和外部中断引脚(INT0或INT1)上的电平状态来共同控制。
    C/T---定时器和计数器模式选择位。
    C/T=1,为计数器模式;C/T=0,为定时器模式。
    M1M0---工作模式选择位。

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

    位序号 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    符号位 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

    TF1---定时器1溢出标志位。
    当定时器1记满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。
    TR1---定时器1运行控制位。
    由软件清0关闭定时器1。当GATE=1,且INIT为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。
    TF0---定时器0溢出标志,其功能及其操作方法同TF1
    TR0---定时器0运行控制位,其功能及操作方法同TR1
    IE1---外部中断1请求标志。
    当IT1=0时,位电平触发方式,每个机器周期的S5P2采样INT1引脚,若NIT1脚为定电平,则置1,否则IE1清0。
    当IT1=1时,INT1为跳变沿触发方式,当第一个及其机器周期采样到INIT1为低电平时,则IE1置1。IE1=1,表示外部中断1正向CPU中断申请。当CPU响应中断,转向中断服务程序时,该位由硬件清0。
    IT1外部中断1触发方式选择位。
    IT1=0,为电平触发方式,引脚INT1上低电平有效。
    IT1=1,为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变有效。
    IE0---外部中断0请求标志,其功能及操作方法同IE1
    IT0---外部中断0触发方式选择位,其功能及操作方法同IT1
    从上面的知识点可知,每个定时器都有4种工作模式,可通过设置TMOD寄存器中的M1M0位来进行工作方式选择。
    方式1的计数位数是16位,对T0来说,由TL0寄存器作为低8、TH0寄存器作为高8位,组成了16位加1计数器。
    关于如何确定定时器T0的初值问题。定时器一但启动,它便在原来的数值上开始加1计数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为12MHz,12个时钟周期为一个机器周期,那么此时机器周期为1us,记满TH0和TL0就需要216 -1个数,再来一个脉冲计数器溢出,随即向CPU申请中断。因此溢出一次共需65536us,约等于65.6ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上记50000个数后,定时器溢出,此时刚好就是50ms中断一次,当需要定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。
    以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为TCY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/TCY ,装入THX和TLX中的数分别为:
    THX=(65536-N)/256 , TLX=(65536-N)%256 <x为01>
    中断服务程序的写法
    void 函数名()interrupt 中断号 using 工作组
    {
    中断服务程序内容
    }
    在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下:
    (1)对TMOD赋值,以确定T0和 T1的工作方式。
    (2)计算初值,并将初值写入TH0、TL0或TH1、TL1。
    (3)中断方式时,则对IE赋值,开放中断。
    (4)使TR0和TR1置位,启动定时器/计数器定时或计数。

    例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。
    程序代码如下:
    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit led1=P1^0;
    uchar num;
    void main()
    { 
        TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1)
        TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872
        TL0=(65536-45872)%256;
        EA=1; //开总中断
        ET0=1; //开定时器0中断
        TR0=1; //启动定时器0
        while(1)
        {
            if(num==20) //如果到了20次,说明1秒时间
            {
                led1=~led1; //让发光管状态取反
                num=0;
            }
        }
    }
    void T0_time()interrupt 1
    {
        TH0=(65536-45872)/256; //重新装载初值
        TL0=(65536-45872)%256;
        num++; 
    }
    
    
    

     

    51定时器 可以设置为定时 / 计数 工作模式

    定时模式:

    计数模式: (以STC89C52为例) P3.4 和 P3.5引脚接收入脉冲

    定时器常用模式初始化

    void Timer0_Init(void)
    {
       TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
       TH0=(65536-50000) / 256;	      //给定初值,50ms
       TL0=(65536-50000) % 256;
       EA=1;            //总中断打开
       ET0=1;           //定时器中断打开
       TR0=1;           //定时器开关打开
    }

     

        void Time0_Init()
        {
            TMOD = 0x01;         //定时器0选择工作方式1
            TH0 = (65536-5000) / 256;          //设置初始值
            TL0 = (65536-5000) % 256;          
            EA = 1;              //打开总中断
            ET0 = 1;             //打开定时器0中断
            TR0 = 1;             //启动定时器
        }

     

    中断服务函数:

    unsigned int cnt = 0;//定时器时间到计数加1
    
    //定时器中断函数5ms进入中断一次
    void time0Int() interrupt 1
    {
        TH0 = (65536-5000) / 256;          //设置初始值
        TL0 = (65536-5000) % 256;    
    
        cnt++;
    
    }

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 51单片机定时器中断汇编代码
  • 51单片机定时器工具.rar
  • 51单片机定时器实验

    2017-11-10 12:50:45
    51单片机定时器实验,代码简洁全面,均有标注,通俗易懂。
  • 51单片机定时器封装,封装了定时器的功能,用时可直接调用相关函数
  • 本文给大家分享了51单片机定时器计数器中断总结。
  • 本文主要简单介绍了51单片机定时器
  • MCS51单片机定时器系统1、掌握MCS51单片机定时器/计数器的硬件结构、功能 2、掌握MCS51单片机定时器/计数器 寄存器TMOD 、TCON 3、掌握MCS51单片机定时器/计数器 工作方式 4、掌握MCS51单片机定时器/计数器 的...
  • 51单片机定时器详解

    2014-12-08 22:09:31
    51单片机定时器的使用和详细讲解__特别是定时器2
  • MCS-51单片机定时器课件讲解
  • 51单片机定时器编程

    2012-11-28 10:49:38
    51单片机定时器编程
  • 8051单片机内部有两个定时/计数器T0及T1,具有定时和计数两种功能。T0及T1在计数过程中不需要CPU参与,也不影响CPU的其他工作。当计数溢出后,定时/计数器给出中断信号,申请CPU停止当前的工作,去处理预先设定的...

    fd4397c62822e80d372283808cafd1c3.png

    8051单片机内部有两个定时/计数器T0T1,具有定时和计数两种功能。T0T1计数过程中不需要CPU参与,也不影响CPU的其他工作。当计数溢出后,定时/计数器给出中断信号,申请CPU停止当前的工作,去处理预先设定的中断事件。

    一、T1内部结构

    bf92fc2461706134a1515f16b1130531.png

    定时器工作模式:对内部时钟信号计数。由于时钟频率是定值,所以可根据计数值计算出定时时间。

    计数器工作模式:是对加在T1(P3.5)引脚上的外部脉冲进行计数。

    二、计数功能

    计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。

    输入脉冲的高电平与低电平至少应保持一个机器周期时间,以确保正确采样,因此输入脉冲的频率最高为单片机内部脉冲频率的一半。如果内部脉冲频率为1 MHZ,则最高计数频率为0.5 MHz。

    三、定时功能

    定时功能是单片机通过对内部机器脉冲信号计数实现的,计数值乘以机器周期就是相应的时间。例如,如果单片机采用12 MHz的晶振,则机器内部脉冲频率为1 MHz,则机器周期为1us,若共计数1000,则用时为1ms时间。

    905ee0e2a9e1943e33806b331b7491bb.png

    9595cfd4fa6e1426f6aea19f3b1a4814.png

    四、工作方式

    工作方式寄存器TMOD

    工作方式寄存器TMOD用于控制定时/计数器的工作方式和工作模式,长度为一个字节,只能按字节整体赋值。

    1e28fa6759df67afd857f4bda28188fb.png

    (1)Ml和M0用于设置TO(T1)的工作方式。

    18edef2971306499aaf3133c593518f9.png

    ac04deb5d50d4cf39ce367e6748689f2.png

    (2)C/T用于设置TRO(TR1)是工作于计数器或定时器模式。

        C/T—计数器模式和定时器模式选择位

    0:定时器工作模式,对单片机的晶体振荡器12分频后的脉冲进行计数。

    1:计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。

    1e28fa6759df67afd857f4bda28188fb.png

    (3)GATE(门控制位)用于设置TO(T1)的启动方式。

    GATE—门控位。

    0:仅由运行控制位TRx(x =0,1)来控制定时器/计数器运行。

    1:用外中断引脚INT0(或INT1 )上的电平与运行控制位TRx共同来控制定时器/计数器运行。

    d8c0e2dad228129b3935ba4772441f44.png

    例:设定时器1为定时工作方式,按方式2工作,定时器0为计数方式,按方式1工作,均由程序单独控制启动和停止,请给出TMOD控制字。

    解:

    定时器1做定时器使用则D6=0;按方式2工作则D5=1,D4=0;由程序单独控制启停则D7=0 。定时器0做计数器使用则D2=1;按方式1工作则D0=0,D1=1;由程序单独控制启停则D3=0。因此命令字TMOD的值应为00100101B,即25H。

    442e7a41ad710e9cc0859bac6b5d3097.png

    定时器控制寄存器TCON (Timer controller)

    TCON也是8位寄存器,与TMOD不同的是它可按位单独赋值,其各位的意义见下表。

    6f929710685f0129f4d73763967c7feb.png

    1、TF1、TF0—计数溢出标志位。

    当计数器计数溢出时,该位置“1”。

    使用中断方式时,此位作为中断请求标志位,标志位由硬件自动清“0”。使用查询方式时,应注意查询有效后使用软件及时将该位清“0”。

    2、TR1、TR0—计数运行控制位。

    TR1位(或TR0位)=1,启动定时器/计数器工作的必要条件。

    TR1位(或TR0位)=0,停止定时器/计数器工作。

    4.1、工作方式0

    方式0是13位的定时/计数器,它由TL的低5位和TH的8位构成。

    9f396283f8b5abcd08dc09ef7f81ae33.png

    4.2、工作方式1

    方式1是16位的定时/计数器,由TH的8位和TL的8位构成。方式0和方式1的工作原理基本相同。

    96550fa76d896320e68d15a5b95e5540.png

    方式0和方式1的特点:

    T1启动后,在TL1和TH1中存储的计数初值基础上进行加“1”计数,直至溢出。溢出时T1寄存器被清零,TF1被置位,并申请中断。此后,若T1重新启动,则从零重新开始计数。若希望T1从某一数值开始计数,则应给计数器赋初值。

    若所需计数长度为N,则计数初值X=2M-N(1≤N≤2M),其中当工作于方式0时,M=13,当工作于方式1时,M=16。在为计数器赋初值时,应将初值拆成高低两部分字节,分别送入TL1和TH1。

    实例:欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。

    18768c18a69f89fa08aa47eb8df2f9e7.png

    设置定时/计数器的过程:

     1)先初始化工作方式寄存器TMOD

     2)为定时/计数器赋初值

     3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。

    #include                  //  将8051单片机头文件包含到文件中main(void ){    unsigned char counter;   //设置无符号字符型变量,存储定时器中断次数。     TMOD=0x01; //设T0为定时模式,由TR0控制启动和停止,且工作于方式1  TH0=(65536-46083)/256;         //初始化T0的高8位  TL0=(65536-46083)%256;        //初始化T0的低8位  TF0=0;                       //初始化定时器溢出标志  P0=0xff;                      //关闭LED    counter=0;                    //从0开始计数      TR0=1;                       //启动定时器0   while(1)    {     while(TF0==1)              //如果定时器溢出    {          counter++;              //计时次数加1          if(counter==20)          //计时时间达到1s           {             P0=~P0;                // P0所有位取反,使LED闪烁                           counter=0;              //重新从0开始计数           }            TH0=(65536-46083)/256;  //重新初始化T0的高8位            TL0=(65536-46083)%256; //重新初始化T0的低8位            TF0=0;                 //重新初始化定时器溢出标志       }    }}

    方式0和方式1的特点:

    T1启动后,在TL1和TH1中存储的计数初值基础上进行加“1”计数,直至溢出。溢出时T1寄存器被清零,TF1被置位,并申请中断。此后,若T1重新启动,则从零重新开始计数。若希望T1从某一数值开始计数,则应给计数器赋初值。

    若所需计数长度为N,则计数初值X=2M-N(1≤N≤2M),其中当工作于方式0时,M=13,当工作于方式1时,M=16。在为计数器赋初值时,应将初值拆成高低两部分字节,分别送入TL1和TH1。

    实例:欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。

    18768c18a69f89fa08aa47eb8df2f9e7.png

    设置定时/计数器的过程:

     1)先初始化工作方式寄存器TMOD

     2)为定时/计数器赋初值

     3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。

    #include                  //  将8051单片机头文件包含到文件中main(void ){    unsigned char counter;   //设置无符号字符型变量,存储定时器中断次数。     TMOD=0x01; //设T0为定时模式,由TR0控制启动和停止,且工作于方式1  TH0=(65536-46083)/256;         //初始化T0的高8位  TL0=(65536-46083)%256;        //初始化T0的低8位  TF0=0;                       //初始化定时器溢出标志  P0=0xff;                      //关闭LED    counter=0;                    //从0开始计数      TR0=1;                       //启动定时器0   while(1)    {     while(TF0==1)              //如果定时器溢出    {          counter++;              //计时次数加1          if(counter==20)          //计时时间达到1s           {             P0=~P0;                // P0所有位取反,使LED闪烁                           counter=0;              //重新从0开始计数           }            TH0=(65536-46083)/256;  //重新初始化T0的高8位            TL0=(65536-46083)%256; //重新初始化T0的低8位            TF0=0;                 //重新初始化定时器溢出标志       }    }

    4.3、工作方式2

    方式2的特点是能自动加载计数初值。16位计数器被分为两部分,以TL0作为计数器,以TH0作为存储器。初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,由存储器TH0自动给计数器TL0加载计数初值。若所需计数长度为N,则计数初值X=28-N(1≤N≤256)。

    50a0f97517cade980c25815ea3bf3c9d.png

    实例:下图是产品包装生产线的计数系统,每个产品经过计数装置时由机械杆碰合按键S1一次。当第一次计满一包(5个)则D1亮,计满第二包则D2亮…,计满第八包则D1~D8全亮,八包包装成一箱,此后重复以上过程。编写程序实现此功能。

    f9f602ac321c41719df5bb93ba41cf34.png

    #include            //  包含51单片机寄存器定义的头文件unsigned char counter;      //计数初值main(void ){        TMOD=0x60;                //使用T1的工作方式2  TH1=256-5;              // T1的高8位赋初值  TL1=256-5;              // T1的低8位赋初值    counter=0;    TR1=1;                    //启动T1  while(1)                   {     while(TF1==1)           //如果计满        {            TF1=0;             //计数器溢出后,将TF1清0            counter++;         //计数加1    switch (counter)  //检查中断计数值      {                case 1: P0=0xfe; break;  //则第1个灯亮                case 2: P0=0xfd; break;  //第2个灯亮                case 3: P0=0xfb; break;  //第3个灯亮                case 4: P0=0xf7; break;  //第4个灯亮                case 5: P0=0xef; break; //第5个灯亮                case 6: P0=0xdf; break; //第6个灯亮                case 7: P0=0xbf; break; //第7个灯亮                case 8: P0=0x00; counter=0; break; //8个灯全亮             }                                       }             } }

    4.4、工作模式3

    TO被拆成两个独立的8位计数器TLO和THO,TL0独占T0的各控制位、引脚和中断源,既可以用作定时器也可作计数器。TH0只能作为定时器使用,且需要占用T1的控制位TR1和TF1实现启停和中断。

    20bf4696bf2bb3a83cd12fab8f1563c8.png

    两个定时/计数器的使用方法与方式0或1相似。工作方式3只适用于T0,不适用于T1。若将T1强行设置为模式3,将使T1立即停止计时或计数,相当于使TR1=0。

    当T0作方式3时,T1仍可以设置为除工作方式3外的其它工作方式,但由于它的TR1和TF1已被T0占用,因此无法按正常计时/计数器工作,常用于串行通信时的波特率发生器,以控制传输数据的速度。

    单片机的P0口接了8个发光二极管,要求使用定时器T0中断实现流水灯操作,流水频率为每0.5秒钟更替一次(假设单片机外接11.0592MHz的晶振)。

    7a85a975a728f7e9f553947ddebb2cba.png

    #includeunsigned char cnt=0;    //用于中断次数计数unsigned char led =0xfe;  //初始化流水灯int main(void){  TMOD=0x01;       //16位定时方式  TH0=(65536-46083)/256;   //初始化T0的高8位  TL0=(65536-46083)%256;   //初始化T0的低8位  EA=1;  ET0=1;      //开中断  TR0=1;      //启动T0工作   while(1);}void T0_int(void)  interrupt 1   {  cnt++;  if( cnt==10 )    //0.5秒钟的时间到了  {    cnt=0;      //清除次数统计    led =(led <<1)|1;    //更新流水灯数据    if(led ==0xff)    {      led =0xfe;    }    P0=led;      //显示流水灯  }   TH0=(65536-46083)/256;       //初始化T0的高8位  TL0=(65536-46083)%256;       //初始化T0的低8位}

    往期回顾

    01

    ESP8266模块详解

    02

    |DA转换器是什么?快来一起学习一下吧!

    03

    STM32中断优先级详解

    04

    |STM32下载程序新思路--使用串口下载程序

    8313240951a59d389ed4fb188d489843.png

    展开全文
  • 51单片机定时器初值计算器 51单片机定时器初值计算器 51单片机定时器初值计算器
  • 本文主要讲了51单片机定时器工作原理及用法,希望对你的学习有所帮助。
  • 51单片机定时器计算

    2014-05-04 21:36:50
    51单片机定时器计算,设置时钟、方式就可以算出值。
  • 51单片机定时器的使用51单片机定时51单片机定时器的使用器的使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,156
精华内容 1,262
关键字:

51单片机定时器