日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时

發布時間:2025/10/17 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8051內部集成了2個16bits的計數器, 可以根據需要將其作為定時器使用. 這時, 定時器的計數頻率為系統CLK/12. 如果CPU的晶振頻率為12MHz, 那么定時器信號源的頻率固定為12MHz/12 = 1MHz. 如果定時器的定時周期設定為50ms, 則需要50000個脈沖. 由于單片機定時器為加1計數器, 所以, 計數器初始值應設為65536 - 50000 = 15536 = 3CB0H. 另外, 還需要設置定時器工作模式寄存器TMOD, 如果使用定時器0, 16bits定時器方式, 則TMOD = 0x01.

定時器初始值計算解析:

若系統晶振頻率為12MHz, 那么定時器信號源的頻率固定為1MHz, 即每隔1 * 10^-6 s, 定時器內的值加1. 若定時器定時周期為50ms(=5*10^-2s), 那么這50ms就需要(5*10^-2)/(1*10^-6)=50000次加1計數.

#include

void delay()//用定時器0實現10ms精準定時

{

TMOD = 0x01;

TH0 = 0xd8;

TL0 = 0xf0;//65536 - 10000 = 55536

TF0 = 0;//置溢出標志位為0

TR0 = 1;//開啟定時器0

while(TF0 == 0);

TR0 = 0;//暫停定時器0

}

void disp_digit()

{

int d = 60;//要顯示的數字

unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

while(1)

{

//顯示個位數

P2 = 0;// P2 = 0 -> (P24, P23, P22) = (0, 0, 0) -> 右數第一個數字點亮

P0 = DIG_CODE[d % 10];

delay();//10ms精準定時

//顯示十位數

P2 = 1 << 2;//P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右數第二個數字點亮

P0 = DIG_CODE[d / 10];

delay();//10ms精準定時

}

}

int main()

{

disp_digit();

return 0;

}

總結

以上是生活随笔為你收集整理的单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。