初识定时器

其实定时器就是配置TCON与TMOD 然后还有

ea,pt0,et0这三个是终端配置

void Timer0_Init() //定时器初始化

TMOD=0x01; //配置工作模式定时器 一共8位----前四位表示定时器1 -GATE-C/T(0是定时器)--最后两位是模式位一般用模式1 GATE是门控位控制定时器是否受外界中断的影响
                            //GATE=0表示只受TR0的控制TR0表示定.0时器开关控制位

 


TMOD=TMOD&0xf0; 这个是配置定时器0 需要把低八位置0 如果配置定时器1的话需要高八位置0

//按位与高四位不变,低四位置0
TMOD=TMOD|0x01;    //按位或高四位不变,最后一位置1

如果没有上面两行的话配置定时器0的时候容易刷新定时器1的状态


TF0=0;        //中断溢出位
TR0=1;        /定时器开关位 1表示定时器开

初识定时器_第1张图片
TH0=64535/256;       
TL0=64535%256;        //TH0开始计数的高8位,TL0低八位
ET0=1;            //ET0是51系列单片机中定时器0的中断允许开关
EA=1;                //中断总开关 1是开
PT0=0;            //优先级PT  0表示定时器0,0表示低优先级

 

初识定时器_第2张图片

 

 

 

void main()
{
    Timer0_Init(); //定时器初始化   开始必须初始化
    
    while(1)
    {
        P2_0=0;
        Delay(500);
        P2_0=1;
        Delay(500);
        
    }
}

 

下面是中断程序

unsigned int TimeC=0;
void Timer0_routine(void)  interrupt 1
{
    TH0=64535/256;        //定时器开关位 1表示定时器开
    TL0=64535%256;        //TH0开始计数的高8位,TL0低八位

如果不设置上面两行的话就第一次是1000ms 第二次就从0开始了
    TimeC++;
    if(TimeC>=1000)
    {
        TimeC=0;
        P2_3=~P2_3;
    }
}

 

 

 

 

 

你可能感兴趣的:(单片机,嵌入式硬件,51单片机)