51單片機-(中斷系統)

51單片機-(中斷系統)

了解51單片機中斷系統、中斷源、中斷響應條件和優先級等,通過外部中斷0實現按鍵控制LED亮滅為例理解中斷工作原理和編程實現過程。

1.中斷系統結構

89C51/52的中斷系統有5個中斷源 ,2個優先級,可實現二級中斷嵌套 。
在這里插入圖片描述

1.1.外部中斷0 (P3.2)

INT0: 通過TCOM中的IT0來選擇其為下降沿有效還是低電平有效。

1.2.定時計數器中斷T0

T0: 定時計數溢出中斷標志TF0置1

1.3.外部中斷1 INT1(P3.3)

INT1: 通過TCOM中的IT1來選擇其為下降沿有效還是低電平有效。

1.4.定時計數器中斷T1

T1: 定時計數溢出中斷標志TF1置1

1.5. RI(SCON.0)或TI(SCON.1)

串行口中斷請求標志。當串行口接收完一幀串行數據時置位RI或當串行口發送完一幀串行數據時置位TI,向CPU申請中斷。

2.中斷請求標志TCON

76543210
字節地址:88HTF1TR1TF0TR0IE1IT1IE0IT0
  • IT0 (TCON.0),外部中斷0觸發方式控制位。
    當IT0=0時,為電平觸發方式。
    當IT0=1時,為邊沿觸發方式(下降沿有效)。
  • IE0 (TCON.1) :外部中斷0中斷請求標志位。
  • IT1 (TCON.2):外部中斷1觸發方式控制位。
  • IE1 (TCON.3):外部中斷1中斷請求標志位。

  • TR0(TCON.4):T0運行控制位,其功能與TR1類同。
  • TF0 (TCON.5):定時/計數器T0溢出中斷請求標志位。
  • TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時/計數器的啟動與停止。
  • TF1 (TCON.7),定時/計數器T1溢出中斷請求標志位。

3.中斷允許控制(IE)

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

76543210
字節地址:A8HEAESET1EX1ET0EX0
  • EXO(IE.0),外部中斷0允許位;
  • ETO(IE.1),定時/計數器T0中斷允許位;
  • EX1(IE.2),外部中斷0允許位;
  • ETI(IE.3),定時/計數器T1中斷允許位;
  • ES(IE.4),串行口中斷允許位;
  • EA (IE.7),CPU中斷允許(總允許)位。

4.各中斷源響應

4.1.中斷優先級

有時同一優先級中的中斷申請不止一個,則有中斷優先權排隊問題。同一優先級的中斷優先權排隊,由中斷系統硬件確定的自然優先級形成,其排列如所示
在這里插入圖片描述
中斷優先級有三條原則:

  • CPU同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。
  • 正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷。
  • 正在進行的低優先級中斷服務,能被高優先級中斷請求所中斷。

為了實現上述后兩條原則,中斷系統內部設有兩個用戶不能尋址的優先級狀態觸發器。其中一個置1,表示正在響應高優先級的中斷,它將阻斷后來所有的中斷請求;另一個置1,表示正在響應低優先級中斷,它將阻斷后來所有的低優先級中斷請求。

4.2.中斷號

在這里插入圖片描述

4.3.中斷響應條件

  • 中斷源有中斷請求;
  • 此中斷源的中斷允許位為1;
  • CPU開中斷(即EA=1)。

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

4.4.開發中使用中斷

你想使用的中斷是哪個?選擇相應的中斷號;
你所希望的觸發條件是什么?
你希望在中斷之后干什么?

5.中斷樣例

5.1.外部中斷0為例

通過按鍵按下出發外部中斷0來控制LED反轉亮滅。
在這里插入圖片描述
(對照這張圖好理解)

使用外部中斷0的代碼:
默認按鍵為高電平,選擇用下降沿觸發中斷

#include "reg52.h"	
typedef unsigned int u16;
typedef unsigned char u8;sbit led=P2^0;
sbit key3=P3^2;//delay函數功能: 延時函數,i=1時,大約延時10us
void delay(u16 i)
{while(i--);	
}
//Int0Init函數功能:
void Int0Init()
{IT0=1//設置外部中斷的觸發方式下降沿觸發EX0=1//開外部中斷0允許位EA=1//打開總中斷開關
}
//
void main()
{Int0Init();while(1);
}//中斷服務函數int0:
void int0 ()  interrupt 0
{delay(1000);if(key3==0){led =~led;}
}

不使用中斷的代碼:

//實現現象:下載程序后按下K1按鍵可以對D11小燈狀態取反。
#include "reg52.h"//此文件中定義了單片機的特殊功能寄存器
typedef unsigned int u16;//對數據類型進行聲明定義
typedef unsigned char u8;sbit k1=P1^0;	 //定義P10口是k1
sbit led=P0^0;	 //定義P00口是led//函數名 : delay
//函數功能: 延時函數,i=1時,大約延時10us,用定時器延時更精確
void delay(u16 i)
{while(i--);	
}//函數名 : keypros
//函數功能: 按鍵處理函數,判斷按鍵K1是否按下
void keypros()
{if(k1==0)		  	//檢測按鍵K1是否按下{	delay(1000);   	//消除抖動 一般大約10msif(k1==0)	 	//再次判斷按鍵是否按下{led=~led;	//led狀態取反}while(!k1);	 	//檢測按鍵是否松開}		
}//主函數: main
void main()
{	led=0;while(1)       {	keypros();  //按鍵處理函數	}		
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WiFi模塊引領智能家居革命:連接未來的生活

隨著科技的快速發展,智能家居正成為現代生活的一部分,極大地改變了我們與家庭環境互動的方式。其中,WiFi模塊作為關鍵的連接技術,在推動智能家居革命中發揮著不可忽視的作用。本文將深入探討WiFi模塊如何驅動智能家居革命。 設備互…

1027 打印沙漏

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印 ***** *** * *** ***** 所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到…

多線程:線程通信

線程通信 什么是線程通信 當多個線程共同操作共享的資源時,線程間通過某種方式互相告知自己的的狀態,以相互協調,并避免無效的資源爭奪。 線程通信的常見模型(生產者與消費者模型) 生產者線程負責生產數據消費者線…

對抽象工廠模式的理解

目錄 1 背景1.1 題目描述1.2 輸入描述1.3 輸出描述1.4 輸入示例1.5 輸出示例 2 抽象工廠模式3 思考3.1 我的實現3.2 什么時候用抽象工廠模式?(怎么用才是合適的?)3.3 [更好的例子](https://refactoringguru.cn/design-patterns/ab…

【探索Linux】—— 強大的命令行工具 P.24(網絡基礎)

閱讀導航 引言一、計算機網絡背景1. 網絡發展歷史 二、認識 "協議"1. 網絡協議概念2. 網絡協議初識(1)協議分層(2)OSI參考模型(Open Systems Interconnection Reference Model)(3&…

NoSQL--1.虛擬機網絡配置

目錄 1.初識NoSQL 1.1 NoSQL之虛擬機網絡配置 1.1.1 首先,導入預先配置好的NoSQL版本到VMware Workstation中 1.1.2 開啟虛擬機操作: 1.1.2.1 點擊開啟虛擬機: 1.1.2.2 默認選擇回車CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

cobalt strike釣魚lnk報錯:無法連接到遠程服務器

筆者在學習 cobalt strike 制作釣魚文件時發現多次失敗,在 win10 虛擬機的 powershell 的多次排查后發現這樣一個報錯: 使用“1”個參數調用“DownloadString”時發生異常:“無法連接到遠程服務器“ 經過多次排查后發現問題出在 cs 的 team server上&…

解決:Glide 在回調中再次加載圖片報錯

一、問題說明 Glide 加載圖片時監聽了回調&#xff0c;并在失敗時再次加載其它圖片后報錯。 代碼&#xff1a; Glide.with(mContext).load(imgTeacher).listener(new RequestListener<Drawable>() {Overridepublic boolean onLoadFailed(Nullable GlideException e, O…

MCU 串口接收環形緩沖區的實現

環形緩沖區 1. 環形緩沖區的特性 1.先進先出 2. 當緩沖區被使用完&#xff0c;且又有新的數據需要存儲時&#xff0c;丟掉歷史最久的數據&#xff0c;保存最新的數據 現實中的存儲介質都是線性的&#xff0c;因此我們需要做一下處理&#xff0c;才能在功能上實現環形緩沖區 …

[計算機網絡]--I/O多路轉接之poll和epoll

前言 作者&#xff1a;小蝸牛向前沖 名言&#xff1a;我可以接受失敗&#xff0c;但我不能接受放棄 如果覺的博主的文章還不錯的話&#xff0c;還請點贊&#xff0c;收藏&#xff0c;關注&#x1f440;支持博主。如果發現有問題的地方歡迎?大家在評論區指正 目錄 一、poll函…

web漏洞與規避

文章目錄 一、XSS 跨站腳本攻擊1.1 XSS攻擊的主要類型反射型XSS存儲型XSSDOM型XSS 1.2 前端開發如何應對XSS 二、CSRF 跨站請求偽造2.1 CSRF例子2.2 前端開發如何應對CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站腳本攻擊 攻擊者通過在受害者的…

stm32學習筆記:IIC通信(未完)

概述 第一塊&#xff1a;介紹協議規則&#xff0c;然后用軟件模擬的形式來實現協議。 第二塊&#xff1a;介紹STM32的iic外設&#xff0c;然后用硬件來實現協議。 程序一現象&#xff1a;通過軟件I2C通信&#xff0c;對MPU6050芯片內部的寄存器進行讀寫&#xff0c;寫入到配…

【Synchronized同步原理】

Synchronized同步原理 1. synchronized的使用&#xff1f;2. 如何保證線程安全的&#xff1f;3.可重入原理&#xff08;加鎖次數計數器&#xff09;4. 原子性和可見性(順序性) 1. synchronized的使用&#xff1f; 對象鎖方法鎖類鎖 2. 如何保證線程安全的&#xff1f; publi…

關于數據提交上傳服務端的數據類型以及項目打包上線的流程

1 請求頭的類型&#xff1a; content-type&#xff1b; 01: application/json 數據以json格式請求&#xff1a;{"key":"value"} 02: application/x-www.form-urlencoded from表單的數據格式 name"zs"&age12 03 mutipart/form-data…

重學SpringBoot3-自動配置機制

重學SpringBoot3-自動配置機制 引言Spring Boot 自動配置原理示例&#xff1a;Spring Boot Web 自動配置深入理解總結相關閱讀 引言 Spring Boot 的自動配置是其最強大的特性之一&#xff0c;它允許開發者通過最少的配置實現應用程序的快速開發和部署。這一切都得益于 Spring …

飛槳(PaddlePaddle)模型保存與加載教程

文章目錄 飛槳&#xff08;PaddlePaddle&#xff09;模型保存與加載教程1. 概述2. 訓練調優場景2.1 保存動態圖模型2.2 加載動態圖模型 3. 推理部署場景3.1 使用基礎API 4. 其他場景4.1 舊版本格式兼容載入4.2 靜態圖模型的保存與加載 5. 總結 飛槳&#xff08;PaddlePaddle&am…

OmniPlan Pro mac版:簡單、智能,項目管理新選擇!

OmniPlan Pro是一款功能強大的項目管理軟件&#xff0c;它以其直觀的用戶界面和豐富的功能&#xff0c;幫助用戶輕松管理各種復雜的項目。無論是個人任務還是團隊協作&#xff0c;OmniPlan Pro都能提供全面的解決方案&#xff0c;讓項目管理變得更加簡單高效。 OmniPlan Pro軟…

從0開始回顧Mysql --- MySQL初體驗

大白話從0開始回顧MySQL&#xff0c;去除了一些繁瑣的操作的演示以及內容&#xff0c;如MySQL安裝等&#xff0c;本篇文章適合復習MySQL語法&#xff0c;學習MySQL語句&#xff0c;對MySQL不太熟練的同學&#xff0c;希望對大家有一些幫助。 MySQL初體驗 首先&#xff0c;我將…

如何在Window系統部署VisualSVN服務并結合cpolar實現無公網ip遠程訪問

文章目錄 前言1. VisualSVN安裝與配置2. VisualSVN Server管理界面配置3. 安裝cpolar內網穿透3.1 注冊賬號3.2 下載cpolar客戶端3.3 登錄cpolar web ui管理界面3.4 創建公網地址 4. 固定公網地址訪問 前言 SVN 是 subversion 的縮寫&#xff0c;是一個開放源代碼的版本控制系統…

數字孿生與智慧交通的融合發展:推動交通行業數字化轉型,構建智慧城市新生態

隨著信息技術的快速發展和城市化進程的深入推進&#xff0c;交通行業正面臨著前所未有的機遇與挑戰。傳統的交通管理模式已難以滿足日益增長的交通需求&#xff0c;而數字化轉型則成為了推動交通行業創新發展的必由之路。數字孿生技術作為一種前沿的信息技術手段&#xff0c;為…