回覆列表
  • 1 # 長沙妹子欣欣

    用定時器來實現比較準確。比如你的晶振是12MHz,那麼微控制器執行的週期就是: 1/ ( 12M / 12) = 1uS.那麼,如果你想要定時一秒,需要微控制器執行 1000 000個指令週期。也就是說,從你讓定時器開始工作開始計時,當達到1000 000個指令週期之後,就是標準的1秒時間了。

  • 2 # 使用者1158134898603

    unsigned char rSecondCount; //秒計時數

    unsigned char rMinuteCount; //分計時數

    sbit IsOneSecondReach;

    sbit Pulse_Sec=P1^0;

    sbit Pulse_Min=P1^1;

    main()

    {

    rSecondCount=0;

    rMinuteCount=0;

    TH1=0x3C;

    TL1=0xAF; //定時器50ms產生一次中斷 (FFFF-3CAF)us

    MOD = 0x10; //定時器1工作於模式1,(用工作於模式2也可以,而且更 簡便)

    TR1=1; //使能定時器1

    ET1=1; //開中斷

    EA=1; //開全域性中斷

    while(1)

    {

    if (IsOneSecondReach)

    {

    IsOneSecondReach = 0;

    //do something,如果一秒延時標誌為1,則清除此標誌,等待下次1秒,在此處

    //執行需要執行的程式

    }

    }

    }

    /* 定時器50ms產生一次中斷 */

    void Timer(void) interrupt 3

    {

    /* 重新載入T1引數 */

    TH1=0x3C;

    TL1=0xAF;

    /* 一秒累加 */

    rSecondCount++;//秒計時+1

    if (rSecondCount==20) //1sec到,50ms*20

    {

    IsOneSecondReach = 1;

    }

    }

    //

    脈衝寬度為50ms,如果有其他要求的話,修改T1引數和“秒分”的引數湊下就行了.

  • 中秋節和大豐收的關聯?
  • CCI指標是什麼?如何用CCI指標選股?