新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機——中斷

        51單片機——中斷

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

        四、定時器/計數器

        1.計數的定義:

        計數是指對外部事件進行計數,外部事件的發生以輸入脈沖的形式表示,因此計數功能的實質就是對外來的脈沖進行計數,在單片機中對應引腳T0和T1,兩個脈沖輸入端。

        外部輸入的脈沖在負跳變時有效(即外部脈沖由1變化到0),計數器加1.

        2.定時器:

        定時器是通過計數器的計數來實現的,不過此時的計數脈沖來自單片機的內部,因此定時器的實質是對內部脈沖的計數,在單片機中,每個機器周期產生一次計數脈沖,計數器加1.

        3.工作方式控制寄存器TMOD:

        ?工作方式控制寄存器TMOD

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

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

        ?計數器工作方式

        ?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次中斷即可。

        五、附加?

        ?中斷函數
        ?中斷修飾符

         

        參考鏈接:

        http://blog.sina.com.cn/s/blog_a05b986d010152h3.html?

        http://wenku.baidu.com/view/946e11949ec3d5bbfd0a74b8.html

        http://wenku.baidu.com/view/25971fbefd0a79563c1e725f.html

        ?http://bbs.elecfans.com/jishu_210382_1_1.html

        http://wenku.baidu.com/view/3e770240a8956bec0975e395.html?


        上一頁 1 2 下一頁

        關鍵詞: 51單片機中

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 霞浦县| 浦北县| 卓资县| 陕西省| 麻阳| 云安县| 图木舒克市| 沙田区| 仙桃市| 合江县| 佛山市| 永昌县| 佛坪县| 周至县| 千阳县| 曲水县| 汕尾市| 商河县| 巴林右旗| 江源县| 科尔| 福泉市| 繁昌县| 中西区| 鄂州市| 兰西县| 巧家县| 松滋市| 永吉县| 康乐县| 金华市| 马龙县| 山西省| 获嘉县| 塔河县| 永春县| 青阳县| 九江县| 江陵县| 安徽省| 盘锦市|