<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        52單片機中斷

        作者:程序那些事   來源:程序那些事   點擊數:  更新時間:2014年08月03日   【字體:

        52單片機一共有6個中斷源:

         INTO0--外部中斷0,由P3.2端口線引入,低電平或下降沿引起。
         INTO1--外部中斷1,有P3.3端口線引入,低電平或下降沿引起。
         T0--定時器/計數器0中斷,由T0計數器計滿回零引起。
         T1--定時器/計數器1中斷,由T1計數器計滿回零引起。
         T2--定時器/計數器2中斷,由T2計數器計滿回零引起。
         TI/RI--串口中斷,串行端口完成一幀字符發送/接收后引起。
         
        52單片機的中斷級別
         
        單片機在使用中斷功能時,通常需要設置兩個與中斷有關的寄存器:
        ①中斷允許寄存器IE
        ②中斷優先級寄存器IP
        一,中斷允許寄存器 IE

        功能:

        EA-- 全局中斷允許位
        EA=1 打開全局中斷控制,在此條件下,有各個中斷控制位確定相應中斷的打開或關閉
        EA=0 關閉全部中斷
        ET2  定時器/計數器2中斷允許位
        ET2=1   打開T2中斷
        ET2=0 關閉T2中斷
         
        ES 串行中斷允許位
        ET1 定時器1中斷允許位
        EX1 外部中斷1允許位
        ET0 定時器/計數器0中斷允許位
        EX0 外部中斷允許位
         
        二,中斷優先級寄存器IP

        PS 串行優先級控制位
        PS=1 串行口中斷定義為高優先級中斷
        PS=0 串行口中斷定義為低優先級中斷
        PT1 定時器/計數器1優先級控制位
        PX1 外部中斷1中斷優先級控制位
        PT0 定時器/計數器0優先級控制位
        PX0 外部中斷0中斷優先級控制位
         
        注意:定時器系統是單片機內部一個獨立的硬件部分,它與CPU和晶振通過內部某些控制線連接并相互作用,CPU一旦設置開始啟動定時功能后,定時器便在晶振的作用下自動開始計時,當定時器計數計滿后,會產生中斷,即通知CPU該如處理。
         
        單片機在使用定時器/計數器功能時,通常需要設置兩個與定時器有關的寄存器:
        ①工作方式寄存器TMOD
        ②控制計數器TCON
        一,工作方式寄存器TMOD
         
        GATE 門控位
        GATE=0 定時器/計數器啟動與停止僅受TCON寄存器中TRX(X=0,1)來控制
        GATE=1 定時器/計數器啟動與停止由TCON寄存器中TRX(X=0,1)和外部中斷引腳(INT0或INT1)上的電平狀態來共同控制
        C/T 定時器模式和計數器模式選擇位(1為計數器模式,0為定時器模式)
        M1M0 工作方式選擇位
         
        每個定時器有4個工作方式,他們由M1M0設定
         
        二,定時器/計數器控制寄存器TCON

         

        IF1   定時器1溢出標志位
        TR1  定時器1運行控制位
        由軟件清零關閉定時器1,當GATE=1,且INT1為高電平時,TR1置1啟動定時器1;當GATE=0時,TR1置1啟動定時器1
        IE1  外部中斷1請求標志
        當IT0=1時為電平觸發方式,每個機器周期的S5P2采樣INT1引腳,若INT1腳為低電平。則置1,否則IE1清0.
        當IT1=0時,INT1為跳變沿觸發,當第一個機器周期采樣到INT1為低電平時,則IE1置1,便是外部中斷1正向CPU申請中斷,當CPU響應中斷,轉向中斷服務程序時,該位由硬件清0.
        IT1   外部中斷1觸發方式選擇位
        IT1=0  為電平觸發模式,引腳INT1上低電平有效
        IT1=1 為跳變沿觸發模式,引腳INT1上下降沿有效
        IE0 同上
        IT0 同上
         
        計算定時器的初值問題
        52單片機內部有12倍的分頻,假設采用的是12MHZ的晶振,那么12個時鐘周期為一個機器周期,那么此時機器周期就是1us。以定時器1,工作方式1為例。16位的計數器
        溢出一次需要計數2^16-1個數=65536。約為65.5ms
        如果要定時50ms的話,(65536-50000)/256 轉載到THX
             (65536-50000)/256 轉載到TLX
        公式:
        THX=(65536-50000)/256
        LTX =(65536-50000)/256
         
        中斷服務函數的寫法:
        void 函數名() interrupt 中斷號 using 工作組
        {
        中斷服務程序內容
        }
         
        定時器的初始化過程如下
        ①對TMOD賦值,以確定T0和T1的工作方式
        ②計算初值,并將初值寫入TH0,TL0,或TH1,TL1
        ③中斷方式,則對IE賦值,開放中斷
        ④使TR0或TR1置位,啟動定時器/計數器定時或計數
         
        程序實例
        #include<reg52.h>
        #define uchar unsigned char
        #define uint unsigned int 
        sbit led1=P1^0;
        uchar num;
        void main()
        {
        TMOD=0X01; //設置定時器工作方式1(M1M0為01)
        TH0(65536-45872)/256; //裝初值11.0592M晶振時為50ms數為45872
        HL0=(65536-45872)%6;
        EA=1; //開總中斷
        ET0=1; //開定時器0中斷
        TR0=1; //啟動定時器0
        while(1); //程序停止在這等待中斷發生
        }
        void T0_time() interrupt 1
        {
        TH0(65536-45872)/256; //裝初值11.0592M晶振時為50ms數為45872
        HL0=(65536-45872)%6;
        num++;
        if(num==20)
        {
        num=0;
        led1=~led1;
        }
        }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮