51單片機0號與1號外部中斷實例

来源:https://www.cnblogs.com/ghostwu/archive/2018/06/10/9162129.html
-Advertisement-
Play Games

中斷的概念 CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生); CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務); 待CPU將事件B處理完畢後, 再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷。 我第一眼看見這東西,感覺跟函數嵌套調用 ...


中斷的概念

CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生); CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務); 待CPU將事件B處理完畢後,

再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷。

我第一眼看見這東西,感覺跟函數嵌套調用的過程特別像。

中斷允許控制

CPU對中斷系統所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的

EX0(IE.0),外部中斷0允許位;

ET0(IE.1),定時/計數器T0中斷允許位;

EX1(IE.2),外部中斷1允許位;

ET1(IE.3),定時/計數器T1中斷允許位;

ES(IE.4),串列口中斷允許位;

EA (IE.7), CPU中斷允許(總允許)位

中斷請求標誌

IT0(TCON.0),外部中斷0觸發方式控制位。

當IT0=0時,為電平觸發方式。

當IT0=1時,為邊沿觸發方式(下降沿有效)。

IE0(TCON.1),外部中斷0中斷請求標誌位。

IT1(TCON.2),外部中斷1觸發方式控制位。

IE1(TCON.3),外部中斷1中斷請求標誌位。

TF0(TCON.5),定時/計數器T0溢出中斷請求標誌位。

TF1(TCON.7),定時/計數器T1溢出中斷請求標誌位。

中斷優先順序原則

CPU同時接收到幾個中斷時,首先響應優先順序別最高的中斷請求。

正在進行的中斷過程不能被新的同級或低優先順序的中斷請求所中斷。

正在進行的低優先順序中斷服務,能被高優先順序中斷請求所中斷

中斷響應條件

中斷源有中斷請求;

此中斷源的中斷允許位為1;

CPU開中斷(即EA=1)。

以上三條同時滿足時,CPU才有可能響應中斷

以外部中斷0為例

 主程式中需要有以下代碼:

EA=1;//打開總中斷開關

EX0=1;//開外部中斷0

IT0=0/1;//設置外部中斷的觸發方式(  0為低電平, 1為下降沿 )

 

接下來。我們用K3獨立按鍵,控制led的狀態翻轉

#include <reg52.h>
/************ 0號中斷控制led燈狀態翻轉 ***********/

sbit LED = P0^0;
sbit k3 = P3^2; //0號中斷

typedef unsigned int u16;
typedef unsigned char u8;

void delay( u16 i ){
    while( i-- );
}

void int0_init(){  //開啟0號外部中斷的條件
    EA = 1;  //總中斷開關
    EX0 = 1;    //允許外部中斷0
    IT0 = 1;    //外部中斷0的觸發方式
}

void trigger_int0() interrupt 0{
    delay( 1100 );
    if( k3 == 0 ) { //k3按下
        LED = ~LED;        
    }
}

void main(){
    int0_init();
    while( 1 );
}

 

接線: 用杜邦線連接K3與P3的2腳。P0的0腳連接LED的排針。interrupt 0 這個0指的是中斷號

 

下例用k4按鍵,處理1號外部中斷。相應的連線也要做出調整:

 

#include <reg52.h>
/************ 1號中斷控制led燈狀態翻轉 ***********/

sbit LED = P0^0;
sbit k4 = P3^3; //1號中斷

typedef unsigned int u16;
typedef unsigned char u8;

void delay( u16 i ){
    while( i-- );
}

void int1_init(){  //開啟1號外部中斷的條件
    EA = 1;  //總中斷開關
    EX1 = 1;    //允許外部中斷1
    IT1 = 1;    //外部中斷1的觸發方式
}

void trigger_int1() interrupt 2{
    delay( 1100 );
    if( k4 == 0 ) { //k3按下
        LED = ~LED;        
    }
}

void main(){
    int1_init();
    while( 1 );
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 公司用了一臺發卡機,usb介面,半雙工,給了個dll,不支持線程操作,使得UI線程老卡。 懊惱了,想自己直接通過usb讀寫,各種百度,然後是無數的坑,最終搞定。 現將各種坑和我自己的某些猜想記錄一下,也供各位參考。 一、常量定義 主要用於CreateFile時用。 二、結構、枚舉、類定義 都是從各種 ...
  • 使用.Net Core 2.1開發Captcha驗證碼服務 開發工具:Visual Studio 2017 15.7.3 開發平臺:64位 Windows 10 目標框架:.NET Core 2.1 完成度:已實現 Github地址: "https://github.com/PuzzledAlien ...
  • 哪些因素可能會導致損壞? 損壞的原因也各不相同,包括但不限於 無法讀取/寫入存儲介質 程式發生崩潰(特別是在數據寫入 RVT 模型時) 附加模塊以通過正常 UI 無法或意外的方式修改圖元 未經測試的多項操作或一系列操作(例如,取消同步或在同步後使用“撤消”命令) 解決方案: 要最大程度地減少數據損壞 ...
  • 新手上路,老司機請多多包含!Ocelot 在博園裡文章特別多,但是按照其中一篇文章教程,如果經驗很少或者小白,是沒法將程式跑向博主的結果. 因此總結下 參考多篇文章,終於達到預期效果。 Ocelot 目標是使用.NET運行微服務/面向服務架構,我們需要一個統一的入口進入我們的服務,提供監控、鑒權、負 ...
  • Python3 與 C# 基礎語法對比(基礎知識場):https://www.cnblogs.com/dunitian/p/9103673.html Python3 與 C# 基礎語法對比(String專欄):https://www.cnblogs.com/dunitian/p/9119986.ht ...
  • 需求:當選擇工序時,帶出對應的作業內容 步驟一:使用SqlDataSource設定從資料庫撈取要填入下拉式選單的值 步驟二:設定下拉式選單的項目 步驟三:再拉一個SqlDatasource 步驟四:設定第二個SqlDataSource變數 步驟五:再拉一個下拉式選單設定數據源 , 但不打勾AutoP ...
  • 問題描述: “System.InvalidOperationException”類型的異常在 System.Data.OracleClient.dll 中發生,但未在用戶代碼中進行處理 其他信息: 嘗試載入 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 3 ...
  • Filter是延續ASP.NET MVC的產物,同樣保留了五種的Filter,分別是Authorization Filter、Resource Filter、Action Filter、Exception Filter及Result Filter。通過不同的Filter可以有效處理封包進出的加工,本 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...