zoukankan      html  css  js  c++  java
  • 单片机-定时器

    简介:

      主要介绍定时器的使用。

    中断资源:

      8051中断有5种:外部中断0、定时器/计数器0、外部中断1、定时器/计数器1、串口中断。

    TMOD寄存器:

      TMOD是定时器/计数器的模式控制寄存器。

      

      其中高四位控制定时器1,低四位控制寄存器0。

      GATE置为0,仅由TRx控制是否启动。

      C/T置为0,为定时器模式。

      M1和M0控制定时器的工作模式,置为01,为16位定时器。

    机器周期:(以12M晶振为例,1M = 10^6)

      时钟周期:1/12M = 1/12 us

      机器周期:12*时钟周期 = 1us ;

              注意普通单片机以12个时钟周期为一个机器周期,一些增强型单片机比如12T增强型单片机,以1个时钟周期为一个机器周期;

    TH0和TL0:

       T0为1个16位的寄存器,用来设置定时器0的初值,当T0加满到2^16即65536就完成了一次定时。

       由于51单片机是8位的,所以T0表示为TH0和TL0.

       假设要定时n个us,那么

        TH0 = (65536-n)/256

             TL0 = (65536-n)%256

          256表示,低位的八位

    中断服务程序:

      void 函数名() interrupt 中断号{

        //中断服务程序内容

      }

      中断服务程序无需主动调用。

    中断号:

      0:外部中断0

      1:定时器/计数器0

      2:外部中断1

      3:定时器/计数器1

      4:串口中断

      如果是8052单片机,如AT89S52,还有一个定时器2,中断号为5

    启动定时器:

        TMOD=0x01;                      //设置定时器0位工作模式1

        TH0=(65536-1000)/256;     //定时1ms

        TL0=(65536-1000)%256;   //定时1ms

        EA=1;             //开总中断

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

        TR0=1;           //启动定时器0

    示例:

      功能:用定时器0控制led以300ms的周期闪烁

    #include<reg52.h>
    #define uchar unsigned char
    #define uint  unsigned int
    sbit led1=P2^7;
    uint num;
    uint numTimer0 = 1000;  //定时器定时时间1ms
    void main()
    { 
      TMOD=0x01;                      //设置定时器0为16位定时器
      TH0=(65536-numTimer0)/256;  
      TL0=(65536-numTimer0)%256;
      EA=1;    //开总中断
      ET0=1;   //开定时器0中断
      TR0=1;   //启动定时器0
      while(1)
      {
         if(num==300)       //num == 300,即300ms
             {
                led1=~led1;    //让发光管状态取反
                num=0;
             }
      }
    }
    void T0_time()interrupt 1
    {
       TH0=(65536-numTimer0)/256;  //重新装载初值
       TL0=(65536-numTimer0)%256;
       num++;    
    }

     

     

     

  • 相关阅读:
    LeetCode 345. Reverse Vowels of a String 题解
    LeetCode 344. Reverse String 题解
    LeetCode 27. Remove Element 题解
    LeetCode 61. Rotate List 题解
    LeetCode 19.Remove Nth Node From End of List 题解
    Android耗电量
    Android 使用adb查看和修改电池信息
    Android AOP AspectJ 插桩
    Flask相关用法
    Monkey日志信息的11种Event percentage
  • 原文地址:https://www.cnblogs.com/wangxuehao/p/8092834.html
Copyright © 2011-2022 走看看