zoukankan      html  css  js  c++  java
  • 51单片机的定时器深入讲解

    单片机的定时器是作为片外资源,开启定时器需要设置相关的寄存器,当然,这些寄存器是可以位寻址的,怎么位寻址?在头文件中reg52.h中已经预定义好了。不用担心,你只需要学会设置就好了:

    TMOD=0X01;    //定时器0工作在方式1(16位计数器)

    TH0=0xfe;

    TL0=0x33;

    EA=1;

    ET0=1;

    TR0=1;

    以上6条语句,已经将定时器设置好了,现在协议个led的项目来时间一下:

    #include

    #define uint unsigned int
    #define uchar unsigned char
    uint count=0; 

      //5000微秒的次数,用于在中断中加1,count有多少,定时count*5ms
    sbit led=P1^0;

    int main()

    {
    TMOD=0X01;    //定时器0工作在方式1(16位计数器)
    TH0=0xfe;    //赋初值
    //TH0=(65536-5000)/256;   //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为              5000微秒(5ms),之后产生中断
    TL0=0x33;
    ////TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
    EA=1;     //开总中断
    ET0=1;    //开T0中断
    TR0=1;    //启动T0开始计数

    while(1)//大循环,循环执行里面的程序
    {
    if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led
    {
    count=0;  //重新赋成0
    led=~led; //led状态取反一次
    }
    }

    void timer0() interrupt 1  //中断函数
    {
    TH0=0xfe;    //,重新赋值
    //TH0=(65536-5000)/256;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位)
    TL0=0x33;
    ////TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
    count++;//0.5ms的次数加1

    }

    注意:这里使用到了中断,有时无需使用到中断:

    #include

    #define uint unsigned int
    #define uchar unsigned char
    uint count=0;     //5000微秒的次数,用于在中断中加1,count有多少,定时count*5ms
    sbit led=P1^0;

    int main()

    {
    TMOD=0X01;    //定时器0工作在方式1(16位计数器)
    TH0=0xfe;    //赋初值
    //TH0=(65536-5000)/256;   //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为              5000微秒(5ms),之后产生中断
    TL0=0x33;
    ////TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
    EA=1;     //开总中断
    ET0=1;    //开T0中断
    TR0=1;    //启动T0开始计数

    while(1)//大循环,循环执行里面的程序

    {

              if(TF0==1)//每次产生中断的时候,TFx(0或1)都会置位

               {

                     TF0=0;

                     count++;

               }

              if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led

    {
    count=0;  //重新赋成0
    led=~led; //led状态取反一次
    }
    }
  • 相关阅读:
    CMD 已存在的表, 没有主键的 添加主键属性
    回调函数 call_back
    在Ubuntu下安装MySQL,并将它连接到Navicat for Mysql
    F查询和Q查询,事务及其他
    Djabgo ORM
    Diango 模板层
    Django视图系统
    Django简介
    Web 框架
    HTTP协议
  • 原文地址:https://www.cnblogs.com/ifreewolf/p/9346697.html
Copyright © 2011-2022 走看看