日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机中的定时器

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机中的定时器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 51單片機中的定時器介紹
      • 1.1 定時器的初步認識
      • 1.2 定時器的寄存器
      • 1.3 使用定時器的方法
      • 1.4 定時時間的計算
    • 2 定時器模式1
      • 2.1 定時器模式1原理分析
      • 2.2 使用查詢的方式使用定時器

1 51單片機中的定時器介紹

1.1 定時器的初步認識

時鐘周期:

  • 時鐘周期 T 是時序中最小的時間單位,具體計算的方法就是 1/時鐘源頻率,如果晶振是 11.0592M,那么對于我們這個單片機系統來說,時鐘周期=1/11059200 秒。

機器周期:

  • 我們的單片機完成一個操作的最短時間。機器周期主要針對匯編語言而言,在匯編語言下程序的每一條語句執行所使用的時間都是機器周期的整數倍,而且語句占用的時間是可以計算出來的,而 C 語言一條語句的時間是不確定的,受到諸多因素的影響。 51單片機系列,在其標準架構下一個機器周期是 12 個時鐘周期,也就是 12/11059200 秒。現在有不少增強型的 51 單片機,其速度都比較快,有的 1 個機器周期等于 4 個時鐘周期,有的 1個機器周期就等于 1 個時鐘周期,也就是說大體上其速度可以達到標準 51 架構的 3 倍或 12倍。

定時器:

  • 打開定時器后,定時器"存儲寄存器"的值經過一個機器周期自動加1,也就是說,機器周期是定時器的計數周期。

1.2 定時器的寄存器

定時值存儲寄存器:

  • 存儲定時器的計數值的。

    定時器控制寄存器TCON:


    定時器模式寄存器TMOD:

1.3 使用定時器的方法

第一步:設置特殊功能寄存器 TMOD,配置好工作模式。
第二步:設置計數寄存器 TH0 和 TL0 的初值。
第三步:設置 TCON,通過 TR0 置 1 來讓定時器開始計數。
第四步:判斷 TCON 寄存器的 TF0 位,監測定時器溢出情況。

1.4 定時時間的計算

我們的晶振是 11.0592M,時鐘周期就是 1/11059200,機器周期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器周期得到 0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。 16 位定時器的溢出值是 65536(因 65535 再加 1 才是溢出),于是我們就可以這樣操作,先給 TH0 和 TL0一個初始值,讓它們經過 18432 個機器周期后剛好達到 65536,也就是溢出,溢出后可以通過檢測 TF0 的值得知,就剛好是 0.02 秒。那么初值 y = 65536 - 18432 = 47104,轉成 16 進制就是0xB800,也就是 TH0 = 0xB8, TL0 = 0x00。


2 定時器模式1

2.1 定時器模式1原理分析

模式示意圖如下:

2.2 使用查詢的方式使用定時器

下面程序的主要功能是讓小燈以0.5Hz的頻率閃爍。

#include <reg52.h>sbit LED = P0 ^ 0; sbit ADDR0 = P1 ^ 0; sbit ADDR1 = P1 ^ 1; sbit ADDR2 = P1 ^ 2; sbit ADDR3 = P1 ^ 3; sbit ENLED = P1 ^ 4;void main() {unsigned char cnt = 0; //定義一個計數變量,記錄 T0 溢出次數ENLED = 0; //使能 U3,選擇獨立 LEDADDR3 = 1;ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;TMOD = 0x01; //設置 T0 為模式 1TH0 = 0xB8; //為 T0 賦初值 0xB800TL0 = 0x00;TR0 = 1; //啟動 T0while (1){if (TF0 == 1) //判斷 T0 是否溢出{TF0 = 0; //T0 溢出后,清零中斷標志TH0 = 0xB8; //并重新賦初值TL0 = 0x00;cnt++; //計數值自加 1if (cnt >= 50) //判斷 T0 溢出是否達到 50 次{cnt = 0; //達到 50 次后計數值清零LED = ~LED; //LED 取反: 0-->1、 1-->0}}} }

參考資料:

  • 手把手教你學51單片機:C語言版
  • 總結

    以上是生活随笔為你收集整理的51单片机中的定时器的全部內容,希望文章能夠幫你解決所遇到的問題。

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