61单片机定时器查询和定时的区别

在使用定时器的过程中,避免不了使用定时器定时或者查询的情况

但定时器用于定时中断查询,其实是有实际的区别的

下面直接把分享下我之前代码

定时器查询是通过判断标志位的方式

#include<reg51.h>
#define uint unsigned int      //宏定义
sbit led1=P2^0;           //定义led1
uint num;
void timer0_init(void);      //引用定时器子函数

void main()
{
    led1 = 0;
    num = 0;
    timer0_init();
    while(1)
    {
        if(TF0 == 1)   //检测是否溢出
        {
            TF0 = 0;    //软件清零
            TH0 = (65536-50000)/256;    //重新赋值
            TL0 = (65536-50000)%256;
            num++;         //累加器
        }
            if(num>=140)    //学号最后一位为数字7,50ms循环140次,时间为7s
            {
                num = 0;
                led1 = ~led1;    //led1取反            
            }
            
    }
}


void timer0_init(void)      //初始化定时器0
{
    EA = 0;        //关闭全局中断
    ET0 = 0;    //关闭定时器0中断
    TMOD = 0x01;     //定时器工作模式1,16位定时器计数模式
    TH0 = (65536-50000)/256;   //设置16位定时器的高8位,定时50ms
    TL0 = (65536-50000)%256;   //设置16位定时器的低8位
    TR0 = 1;      //打开定时器0

}

定时器用于中断情况

void Timer0Init()
{
    TMOD|=0x01;                         //选择为定时器0模式,工作方式1,仅用TR0打开启动。
    TH0=(65536-45872)/256;     //装初值11.0592M晶振定时50ms数为45872
    TL0=(65536-45872)%256;
    ET0=1;//打开定时器0中断允许
    TR0=1;//打开定时器0    
    EA=1;//打开总中断        
}

void Timer0() interrupt 1
{
    static u16 i;                                            //定义局部变量i
    TH0=(65536-45872)/256;                       //装初值11.0592M晶振定时50ms数为45872
    TL0=(65536-45872)%256;
    i++;                                     //每一个机器周期i自增1
    if(i==120)                           //当i记到120,即6秒的时候重新赋值为0
    {
        i=0;
        num++;                         //每6秒时间变量num加1
        if(num==60)                     //当num记到60时重新赋值为0
        {    
            num=0;
        }
    }            
}
    

上一篇:定义二维数组常量(结构体)


下一篇:ZigBee2-1 练习 定时器