<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                【84.1 中斷。】 單片機的“中斷”跟日常生活的“中斷”差不多,我正在做“常事”的時候,突然遇到優先級更高的“急事”,這時我必須先暫停手上的“常事”,馬上去處理突如其來的“急事”,處理完“急事”再返回來繼續做“常事”。要理解單片機的“中斷”,有六個關鍵點,第一點是“配置中斷”,第二點是“做常事”,第三點是“中斷請求”,第四點是“保護中斷現場”,第五點是“處理急事”,第六點是“返回中斷現場”。舉一個我生活的例子如下: 第一點:我老婆隨時都會打電話給我,所以我的手機24小時都打開處于待機的狀態。(配置中斷) 第二點:我正在讀一本書《道德經》(做常事)。 第三點:當我讀到第18頁的時候,老婆突然給我打電話,讓我去幼兒園幫接一下小孩(中斷請求)。 第四點:我在第18頁里夾了一張書簽做標記(保護中斷現場)。 第五點:我放下手上的書去幼兒園接小孩(處理急事)。 第六點:接了小孩,我回來繼續打開《道德經》,找到書簽標記的第18頁(返回中斷現場),繼續閱讀。 上述六點,在單片機的C語言里,“配置中斷”放在主函數的初始化那里,“做常事”放在主函數的主循環里(main函數內部的while(1)循環),“中斷請求”單片機內部硬件檢測到符合發生中斷的條件,“保護中斷現場”是單片機內部硬件電路自動處理的(不需要我們軟件干涉),“處理急事”是單片機自動跳轉到另外開辟的一個特殊中斷函數處理(自動跳轉是單片機的硬件自動完成不需要我們軟件干涉),執行完一次中斷函數后單片機再自動跳轉到主函數的主循環的現場點繼續從現場點開始繼續做常事(返回中斷現場)。在這六點中,其中第四點的“保護中斷現場”與第六點的“返回中斷現場”是要特別強調的,單片機從main函數的主循環while(1)準備跳轉到中斷函數之前,它會自動記錄當前的位置(做好路標),以便處理完中斷函數后再返回main函數的主循環while(1)時,能找到之前的被中斷跳轉前的位置,這樣就可以接上原來的步驟去處理原來的“常事”,在步驟上既不提前也不滯后恰到好處,中斷就不會影響到常事的完整性。代碼分布圖的模板描述如下: void main() { 配置中斷; while(1) { 處理常事; } } void 中斷函數() interrupt 序號 //中斷函數后綴帶“interrupt 序號”特別修飾 { 急事; } 奇怪!上述代碼,為什么“main函數”與“中斷函數”在軟件上看不到任何關聯,既不存在“main函數”調用“中斷函數”,也不存在“中斷函數”調用“main函數”的情況,在觀感上,“main函數”與“中斷函數”仿佛是隔離的毫無“物理連接”的,為什么單片機還能在“main函數”與“中斷函數”兩者中切換自如?沒錯,確實,“main函數”與“中斷函數”在書寫上是隔離的毫無關聯的,但是它們之間之所以能相互切換,是因為背后有一只無形的手在自動操控這一切,這只手就是單片機硬件自身,這是一種特殊機制,也可以理解成一種特殊的游戲規則,我們只要遵守就好了,除了普通函數,其它凡是中斷函數的,都不用跟main函數發生軟件上的關聯調用,它們之間的切換都是硬件自動完成的,這就是main函數與中斷函數的特殊跳轉機制(或者稱為游戲規則也可以)。 【84.2 常用的中斷函數有哪三類?】 單片機的中斷有很多,但常用在項目上的有三類: 第一類是定時中斷。配置中斷后,使其每隔一段時間就產生一次中斷,比如“1ms一次的定時中斷”幾乎是所有的系統里的標配,因為它對程序框架起到一個時間節拍的作用。 第二類是通訊中斷。比如串口每接收完一個字節就會產生一個中斷通知我們去處理。 第三類是電平變化的中斷。下降沿或者上升沿的中斷,常常用在采集高速的脈沖信號。 【84.3 我們如何操控中斷?】 剛才84.1提到“單片機硬件自動”這個概念,但是說它“硬件自動”并不意味著它不可控。單片機本身出廠的時候內部就攜帶了很多種類的中斷,這些中斷是否開啟取決于你的“配置中斷”代碼,你要開啟或者關閉某類中斷,只需編寫對應的“配置中斷”代碼就可以,而“配置中斷”的代碼本質就是填寫某些寄存器數值。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看