定时工作方式2实现1s定时

定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只处理TLx的8位,所以计数最大值为2^8=256,方式2的另一个特点是,当计数溢出后,不需要控制初值,而是会自动将THx中的值做为计数初值重新开始计数。用工作方式2,实现1s延时程序如下:

查询方式

#include <reg52.h>



sbit LED = P0^2;

unsigned int vT = 0;



void main()

{

    LED = 0;         // 初始亮灯

    TMOD = 0x02;     // 工作模式2 最大计数值256

    TH0 = 0x06;         // 从6开始  256-6=250 * 1us = 0.25ms

    TL0 = 0x06;

    TR0 = 1;         // 启动定时器0

    while(1)

    {

        if (TF0 == 1)    // 如果定时器计数溢出

        {

            TF0 = 0;

            vT++;

            if (vT == 4000)     // 0.25ms * 4000 = 1000ms = 1s

            {

                LED = !LED;

                vT = 0;            

            }        

        }    

    }

}

中断方式

#include <reg52.h>



sbit LED = P0^2;

unsigned int vT = 0;



void main()

{

    LED = 0;           // 初始亮

    TMOD = 0x02;       // 模式2

    TH0 = 0x06;           // 256-6=250 * 1us = 0.25ms

    TL0 = 0x06;

    ET0 = 1;           // 定时器0中断开启

    EA = 1;               // 总中断开

    TR0 = 1;           // 定时器0开启

    while(1);

}



void MyInterrupt(void) interrupt 1      // 中断服务程序

{

    vT++;

    if (vT == 4000)   // 4000*0.25ms=1000ms=1s 

    {

        LED = !LED;

        vT = 0;

    }

}

 

你可能感兴趣的:(工作)