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++;    
    }

     

     

     

  • 相关阅读:
    oracle用户被锁死
    windows远程桌面智能调整大小
    批量ping测试脚本
    信息的组织和提取方法
    BeautifulSoup
    requests模块学习
    Telerik Fiddler 应用方法
    js 时间格式换成 把字符串(yyyymmdd)转换成日期格式(yyyy-mm-dd)记录
    vuedraggable 拖拽 应用 不同列表之间的拖拽
    vue项目图片上传 vant van-uploader 图片上传
  • 原文地址:https://www.cnblogs.com/wangxuehao/p/8092834.html
Copyright © 2011-2022 走看看