• 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状态取反一次
    }
    }
  • 相关阅读:
    int、bigint、smallint 和 tinyint
    我的fedora9安装后配置
    系统引导设置与管理EasyBCD与VistaBootPRO
    从Xml文档内部引用Xml Schema验证
    linux开机顺序
    OS引导-笔记
    Logic Volume笔记
    Service笔记
    python中若类属性与实例属性同名
    解析JavaScript中的null与undefined
  • 原文地址:https://www.cnblogs.com/ifreewolf/p/9346697.html
Copyright © 2020-2023  润新知