1. 程式人生 > >微控制器中斷原理及定時器詳解

微控制器中斷原理及定時器詳解

一、中斷系統

1.1.中斷的概念

什麼是中斷:CPU在處理某一事件A時,發生的另外某一事件B請求CPU去處理(產生了中斷),隨後CPU暫時中斷當前正在執行的任務,去對事件B進行處理,CPU處理完事件B後再返回之前中斷的位置繼續執行原來的事件A,這一過程總稱為中斷。

1.2.中斷流程示意圖


使CPU中斷的事件稱中斷源。中斷源向CPU發出中斷請求,CPU暫時中斷原來執行的事件A轉去做事件B。事件B處理完畢後繼續返回原先中斷的地方(該過程稱中斷返回,原先中斷的地方為斷點),繼續執行原先的事件。

1.3.中斷的優先順序


1.4 中斷的好處

(1):提高了CPU的效率

CPU是計算機的指揮中心,它與外圍裝置(如:按鍵,顯示器等)通訊的方法有查詢和中斷2種

1:查詢:無論外圍i/o是否需要服務,CPU每隔一段時間都要依次查詢一遍,這種查詢的方法,CPU需要花費一些時間在做查詢的服務工作

2:中斷:在外圍裝置需要通訊服務時主動告訴CPU,CPU停下當前工作去處理中斷程式,從而提高了CPU的工作效率。

(2):可以實現實時處理

外設任何時候都可能發出請求中斷的訊號,CPU接到請求後及時處理,以滿足實時系統的需要

(3):可以及時處理故障

計算機系統執行過程中難免會出現故障,eg:電源中斷,儲存器出錯,外圍裝置工作不正常等,這時可以通過中斷系統向中斷源的CPU發出請求,以便解決故障。

二、定時器的使用步驟

1.開啟總中斷:

EA(ENABLE ALL) = 1;

2.設定定時器工作方式:

TMOD暫存器:定時器/計數器模式控制暫存器  

其中M1和M0是定時器工作方式的設定位,共可設定4種工作方式。

方式0(M1M0 = 00):13位定時/計數器

方式1(M1M0 = 01):16位定時/計數器          //通常採用方式1

方式2(M1M0 = 10):8位自動重灌定時/計數器

方式3(M1M0 = 11):T0分為兩個獨立的8為定時/計數器;T1在此方式停止計數

3.定時器填裝初值

填裝初值要點:

①微控制器晶振頻率:12M,震盪週期為1/12us

②標準的51微控制器為12T,即12個時鐘週期, 12 x 1/12 us = 1us,即加一次1us。

例如:將定時器設定在工作方式1,初值設為10ms:

TMOD = 0x01;

TH0 = (65536 - 10000);//10000代表10000個1us

TL0 = (65536 - 10000);

4.開啟定時器中斷

ET0 = 1:ENABLE TIME0

ET1 = 1:  ENABLE TIME1

5.開啟定時器(開始計數)

TR0 = 1:開啟定時器0

TR1 = 1:開啟定時器1

6.寫中斷服務函式(ISR)

注意:中斷服務函式不能有引數和返回值

定時器使用程式


注意:

1:定時器和中斷都屬於微控制器的內部資源,在開發板上是沒有晶片的,同時定時器的初始化程式一旦溢位,會自動去執行定時器中斷子程式,而不需要我們自己去呼叫,這些都是由硬體直接控制的。

2:定時器計算的是固定脈衝,其定時時間是可以計算出來的。它比延時函式有更好的作用,能提高CPU 的效率,因為延時函式是需要耗費CPU去執行的,在此期間,CPU是不能執行其它功能的,而定時器是需要用到 的時候,CPU自動呼叫。

相關推薦

微控制器中斷原理定時

一、中斷系統1.1.中斷的概念什麼是中斷:CPU在處理某一事件A時,發生的另外某一事件B請求CPU去處理(產生了中斷),隨後CPU暫時中斷當前正在執行的任務,去對事件B進行處理,CPU處理完事件B後再返回之前中斷的位置繼續執行原來的事件A,這一過程總稱為中斷。1.2.中斷流程

使用LVS實現負載均衡原理安裝配置

配置 png 負載均衡 iptables .cn 詳解 文章 配置詳解 logs LVS是一個開源軟件,由章文嵩博士於1998年5月創立,可以實現Linux平臺下的簡單負載均衡。LVS是Linux Virtual Server的簡寫,是一個虛擬的服務器集群系統。LVS是基於

使用LVS負載均衡搭建web群集的原理安裝配置

chmod 特點 Go 內核空間 col rpc mac地址 網絡文件系統 IT 一、負載均衡LVS基本介紹 LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬服務器。這是一個由章文嵩博士發起的一個開源項目,它的官方網站是 http://www

Node 定時

來源:阮一峰的網路日誌,作者:阮一峰,微博@ruanyf 連結:ruanyifeng.com/blog/2018/02/node-event-loop.html(點選尾部閱讀原文前往) JavaScript 是單執行緒執行,非同步操作特別重要。 只要用到引擎之外的

jmeter 定時

meter提供了很多元件,幫助我們更好的完成各種場景的效能測試,其中,定時器(timer)是很重要的一個元件,最新的3.0版本jemter提供了9種定時器(之前6種),下面一一介紹: 一、定時器的作用域 1、定時器是在每個sampler(取樣器)之前執行的,而不是之後(無論定時器位置在

javascript定時

JS定時器 定時器是javascript的重點部分,在以後的很多實戰專案裡都會用到。 在javascript中,與定時器有關的方法是: setInterval、clearInterval 以及 setTimeout、clearTimeout 這些方法都是定義在window物件上面的,因此我們寫wi

Node定時

//次輪迴圈執行 setTimeout(() => console.log(1)); setImmediate(() => console.log(2)); //本輪迴圈執行 process.nextTick(() => console.log(3)); Promise.r

從手機瀏覽器或者 APP 中跳轉到微信並跳轉到指定頁原理行業內幕

相信很多朋友遇到過有些網站,可以直接通過一個連線就能讓你的手機開啟微信且跳轉到某個指定的頁面,許多程式設計師很好奇到底是怎麼實現的,到處求這種方法的原始碼,在文字中我會介紹及剖析這種跳轉實現的原理。     微信是個比較封閉的環境,至於為什麼封閉,相信大家都瞭解,在一些應用場景中

Linux定時

今天在看linux的定時任務,瞭解了一下crontab命令,下面我們來一起學習一下。 首先要知道 crontab 檔案的格式: {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} o m

使用 LVS 實現負載均衡原理安裝配置

負載均衡叢集是 load balance 叢集的簡寫,翻譯成中文就是負載均衡叢集。常用的負載均衡開源軟體有nginx、lvs、haproxy,商業的硬體負載均衡裝置F5、Netscale。這裡主要是學習 LVS 並對其進行了詳細的總結記錄。 一、負載均衡LVS基本介

JVM 垃圾回收演算法回收

本文主要講述JVM中幾種常見的垃圾回收演算法和相關的垃圾回收器,以及常見的和GC相關的效能調優引數。 GC Roots 我們先來了解一下在Java中是如何判斷一個物件的生死的,有些語言比如Python是採用引用計數來統計的,但是這種做法可能會遇見迴圈引用的問題,在Java以及C#

STM32F103定時

STM32F103系列的微控制器一共有11個定時器,其中: 2個高階定時器 4個普通定時器 2個基本定時器 2個看門狗定時器1個系統嘀嗒定時器 除去看門狗定時器和系統滴答定時器的八個定時器列表; 8個定時器分成3個組;TIM1和TIM8是高階定時器 TIM2-TIM5

51微控制器中斷系統(定時、計數器)

*部分內容來源於網路 一、中斷 中斷是指計算機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。 (*以上解釋來自於百度百科-中斷) 二、51微控制器中斷級別 中斷號 優先順

OAuth2.0授權原理開發流程

OAuth2.0在認證和授權的過程中參與的幾個角色如下: Client - 第三方應用, 下面以小明使用qq登陸本站為例來講解OAuth2.0授權原理(小明為Resource Owner,本站36nu.com為Client,qq授權伺服器為Authorization Server,提供小明qq基本資訊

[轉載]linux 核心定時

Linux核心2.4版中去掉了老版本核心中的靜態定時器機制,而只留下動態定時器。相應地在timer_bh()函式中也不再通過run_old_timers()函式來執行老式的靜態定時器。動態定時器與靜態定時器這二個概念是相對於Linux核心定時器機制的可擴充套件功能而言的,動態定時器是指核心的定時器佇列

普通型母函式原理模板程式碼

母函式有很多種,最常用的有普通型母函式和指數型母函式。兩者區別是:普通型母函式主要是來求組合的方案數,而指數型母函式是求多重排列數。下面只講解普通型母函式的相關知識。定義:若函式G(x)=a0+a1*x

Node定時----深入node

javascript是單執行緒執行,非同步操作特別重要 libuv庫可以與核心對話 node提供四個定時器,讓任務可以在指定的時間執行 setTimeout() setInterval() setImmediate() process.nextTick(

Linux核心之定時

static struct pin_desc *irq_pd; /* 鍵值: 按下時, 0x01, 0x02, 0x03, 0x04 */ /* 鍵值: 鬆開時, 0x81, 0x82, 0x83, 0x84 */ static unsigned char key_val; struct pin_desc{u

[Android系統原理開發要點

第1章 Android系統概述 1 1.1 基礎知識 1 1.1.1 Android開發系統的由來 1 1.1.2 行動電話系統開發模式 2 1.1.3 未來行動電話的功能及Android的優勢 4 1.2 Android的開發工作 6 1.2.1 Android移植

STM32:基本定時

一、基本定時器介紹 在STM32中,基本定時器有TIM6、TIM7等。基本定時器主要包含時基單元,提供16位的計數,能計數0~65535。基本定時器除了計數功能以外,還能輸出給DAC模組一個TRGO訊號。基本定時器框圖如下: 二、時基單元介紹 STM32的所有定時器都具備