定時工作方式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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM