新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機——定時/計數器

        51單片機——定時/計數器

        作者: 時間:2016-11-26 來源:網絡 收藏

        一.定時器操作步驟

        ?定時器操作步驟

        二.工作方式控制寄存器TMOD

        ?工作方式控制寄存器TMOD

        TMOD的低半字節(D0,D1,D2,D3)用來控制定時器/計數器0

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

        TMOD的高半字節(D4,D5,D6,D7)用來控制定時器/計數器1

        對TMOD中的內容說明:

        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種工作方式:

        ?定時/計數器工作方式

        三.根據單片機晶振,所選TMOD的的工作方式,所要定的時間,來確定THO和TLO所要賦予的初值:

        (以12M晶振,工作方式1即16位計數器為例,設所定時間為Xus(16為計數器最大數65536,即65536us,若所?定時間大于65535,則要用if語句控制,現假設X<65535))

        1.時鐘周期的時間t=1/12M=1/12 us

        2.機器周期的時間T=12*1/12=1 us

        3.因為每經過一個機器周期計數器+1,所以,計數器+1,經過的時間為 1 us。

        若所定時間為X,則要求經過Xus,中斷響應,又因為16位計數器要全部置1(即達到65535)+1后,中斷才會響應,所以,初值=(65536-X)

        4.將初值轉化為16進制碼,分別付給TH0和TL0

        eg:所定時間5ms

        初值=(65536-5000)=60536=EC78

        TH0=0xEC;TL0=0x78;

        (當工作方式不同時,TH0/TL0的賦值也不同,個人覺得有了16位計數器了,其余的沒什么用,不介紹了)

        5.寫程序時另一種THO/TLO賦值方法

        TH0=(65536-20000)/256;

        TL0=(65536-20000)%6;

        這樣設置,每經過20ms,發生一次中斷,中斷時間一般以秒為單位,所以經過n次中斷即可。

        四.中斷開啟

        注:在用到中斷時,必須要開總中斷EA,即EA=1。 //開總中斷

        1.中斷允許控制寄存器IE

        ?中斷允許寄存器

        EX0(EX1):外部中斷允許控制位

        EX0=1 外部中斷0開關閉合 //開外部中斷0

        EX0=0 外部中斷0開關斷開

        ET0(ET1):定時中斷允許控制位

        ET0=1 定時器中斷0開關閉合 //開內部中斷0

        ET0=0 定時器中斷0開關斷開

        ES: 串口中斷允許控制位

        ES=1 串口中斷開關閉合 //開串口中斷

        ES=0 串口中斷開關斷開

        ?2.定時器控制寄存器 TCON //控制外部中斷和定時器中斷

        ?定時器/計數器控制寄存器

        外部中斷:

        IE0(IE1):外部中斷請求標志位

        當INT0(INT1)引腳出現有效的請求信號,此位由單片機自動置1,cpu開始響應,處理終端,而當入中斷程序后由單片機自動置0.

        //外部中斷,即外部中斷相應的引腳接入低電平或下降沿信號時,中斷開始響應。

        IT0(IT1):外部中斷觸發方式控制位 //選擇有效信號

        IT0(IT1)=1:脈沖觸發方式,下降沿有效。

        IT0(IT1)=0:電平觸發方式,低電平有效。

        內部中斷:

        TF0(TF1):內部定時器/計數器溢出中斷標志位

        當定時器、計數器計數溢出的時候,此位由單片機自動置1,cup開始響應,處理中斷,而當進入中斷程序后由單片機自動置0.

        //內部中斷實際上就是利用內部的計數器,只不過提供計數的脈沖來自單片機自身。

        TR0(TR1):定時器/計數器啟動位 //啟動定時器

        TR0(TR1)=1;啟動定時器/計數器0

        TR0(TR1)=0; 關閉定時器/計數器0



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 巧家县| 沅江市| 济阳县| 蕉岭县| 南部县| 鄂温| 蓬溪县| 开封市| 吉木萨尔县| 林州市| 石泉县| 江口县| 永修县| 石屏县| 武威市| 宁强县| 石阡县| 那坡县| 全州县| 巴东县| 顺昌县| 鄂托克前旗| 乐昌市| 锦州市| 贡山| 商丘市| 晋州市| 万宁市| 库伦旗| 贵州省| 松阳县| 定西市| 新巴尔虎左旗| 五常市| 射阳县| 邵阳县| 阿坝| 彰化县| 惠安县| 高邮市| 崇明县|