新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機定時器設置入門 (STC89C52RC)

        51單片機定時器設置入門 (STC89C52RC)

        作者: 時間:2016-11-19 來源:網絡 收藏
        51單片機定時器設置入門(STC89C52RC)

        STC單片機定時器設置

        STC單片機定時器的使用可以說非常簡單,只要掌握原理,有一點的C語言基礎就行了。要點有以下幾個:

        1. 一定要知道英文縮寫的原形,這樣寄存器的名字就不用記了。

        本文引用地址:http://www.104case.com/article/201611/318396.htm

        理解是最好的記憶方法。好的教材一定會給出所有英文縮寫的原形。

        2.盡量用形像的方法記憶

        比如TCON和TMOD兩個寄存器各位上的功能,教程一般有個圖表,你就在學習中不斷回憶那個圖表的形像


        TMOD:定時器/計數器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)
          
        定時器/計數器模式控制寄存器TMOD是一個逐位定義的8位寄存器,但只能使用字節尋址,其字節地址為89H。
        其格式為:

        其中低四位定義定時器/計數器C/T0,高四位定義定時器/計數器C/T1,各位的說明:

        GATE——門控制。
        GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。
        當INT0引腳為高電平時TR0置位,啟動定時器T0;
        當INT1引腳為高電平時TR1置位,啟動定時器T1。
        GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。

        C/T——功能選擇位
        C/T=0時為定時功能,C/T=1時為計數功能。
        置位時選擇計數功能,清零時選擇定時功能。

        M0、M1——方式選擇功能
        由于有2位,因此有4種工作方式:
        M1M0 工作方式 計數器模式 TMOD(設置定時器模式)
        0 0 方式0 13位計數器TMOD=0x00
        0 1 方式1 16位計數器TMOD=0x01
        1 0 方式2 自動重裝8位計數器 TMOD=0x02
        1 1 方式3 T0分為2個8位獨立計數器,T1為無中斷重裝8位計數器 TMOD=0x03
        單片機定時器0設置為工作方式1為TMOD=0x01

        這里我們一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要記住圖表,并知道每個英文縮寫的原型就可以了。
        在程序中用到TMOD時,先立即回憶圖表,并根據縮寫的單詞原形理出每位的意義,如果意義不是很清楚,就查下手冊,幾次下來,TMOD的圖表就已經在腦子里了。

        8位 GATE位,本身是門的意思。
        7位 C/TCounter/Timer
        6位 M1Mode 1
        5位 M0Mode 0


        TCON: 定時器/計數器控制寄存器(TIMER/COUNTER CONTROL REGISTER)

        TMOD分成2段,TCON控制更加精細,分成四段,在本文中只要用到高四段。

        TF0(TF1)——計數溢出標志位,當計數器計數溢出時,該位置1。
        TR0(TR1)——定時器運行控制位
        當TR0(TR1)=0 停止定時器/計數器工作
        當TR0(TR1)=1 啟動定時器/計數器工作
        IE0(IE1)——外中斷請求標志位

        當CPU采樣到P3.2(P3.3)出現有效中斷請求時,此位由硬件置1。在中斷響應完成后轉向中斷服務時,再由硬件自動清0。

        IT0(IT1)——外中斷請求信號方式控制位
        當IT0(IT1)=1 脈沖方式(后沿負跳有效)
        當IT0(IT1)=0 電平方式(低電平有效)此位由軟件置1或清0。
        TF0(TF1)——計數溢出標志位

        當計數器產生計數溢出時,此位由硬件置1。當轉向中斷服務時,再有硬件自動清0。計數溢出的標志位的使用有兩種情況:采用中斷方式時,作中斷請求標志位來使用;采用查詢方式時,作查詢狀態位來使用。

        注意記憶方法,理解單詞原形,就絕對不會把TF和TR搞混。TF的F也就是溢出OverFlow的F。國外有個著名的IT知識問答社區,網址就http://stackoverflow.com/
        TR的R就是運行Run。默認是0不運行,當然要置1才運行。


        STC單片機STC89C52RC定時器延時時間的計算

        延時時間要根據晶振頻率計算,不同板子可能有所不同。

        時鐘周期:
        1/時鐘源,在我現在這塊板子上,晶振頻率是11.0592M,也就是時鐘周期是1/11059200秒

        機器周期:
        一般51單片機是12個時鐘周期,我的板子也就是 12/11059200秒

        單次定時最長時間:
        如果是16位的計數器,16位最大值是65535,共可計數65536次。基本的常數一定要記住,還要記住8位最大值是255,共可計數256次,還要記住8位上每位代表的數值。
        12 * 65536/11059200 = 0.0711 s,也就是,71 ms內的定時可以單次定時就完成。如果定時時間超過71 ms,就要循環了。

        一次定時需要幾次機器周期:
        計算公式:定時秒數/機器周期
        比如我要定時1秒, 1/(12/11059200)= 921600次,16位計數器最大可計數65536次,921600次早就益出了。我們可以每次定時10 ms,循環100次就可以定時1秒了,1 s縮小100百倍就是10 ms, 也就是每次需要計數9216次。

        確實計數器初始值:
        定時10 ms時,如果計數器從0開始計數,我們就不知道什么時候到了9216次。所以應該計數了9216次,16位計數器最多計數95536次,然后就溢出,一溢出TCON的TF位就會置1,我們只要經常檢測TF位就可以知道什么時候完成10ms的定時了。
        計算公式:計數器初始值=最大計數次數 - 需要計數次數
        如果定時10 ms,計數器的初始值就是65536 - 9216

        計算計數器的高位和低位:
        16位的計數器,也就是兩個8位組成,8位的最大計數次數是256。所以:
        計數器高位 = 初始值/256
        計數器低位 = 初始值%256



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 昭平县| 稷山县| 白城市| 新干县| 凤台县| 保亭| 襄樊市| 哈巴河县| 海阳市| 剑阁县| 武定县| 宣汉县| 隆德县| 湾仔区| 康乐县| 天峨县| 眉山市| 揭西县| 广水市| 驻马店市| 宝山区| 闻喜县| 砚山县| 恩平市| 阿拉善盟| 香港| 中西区| 星子县| 昌黎县| 信阳市| 南皮县| 万盛区| 阜康市| 济宁市| 大港区| 霸州市| 出国| 常熟市| 鹤岗市| 溧水县| 南京市|