国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網 會員登陸 & 注冊

STC15系列MCU —— IAP15W4K58S4 外部中斷 編程筆記

2023-07-24 22:24 作者:荒謬_RD  | 我要投稿

假如需要檢測一個按鍵是否按下,如果用查詢方式在主循環(huán)中檢測按鍵所在IO口的狀態(tài)會消耗很多CPU的資源,而且當程序很大的時候可能會丟失持續(xù)時間短的事件,因此就有了中斷,CPU不用時刻去查詢引腳的電平狀態(tài),只有當引腳電平發(fā)生跳變的時候才會觸發(fā)中斷,此時CPU跳轉到中斷服務函數(shù),去執(zhí)行特定的業(yè)務代碼。


下面分享STC15系列 MCU —— IAP15W4K58S4 外部中斷的代碼編寫筆記

1.外部中斷初始化

這個型號的單片機有 5 路外部中斷,前 2 路—— INT0 ~ INT1 可以選擇中斷源類型,可以設置中斷優(yōu)先級,還有中斷請求標志位,比較“高級”,后 3 路—— INT2 ~ INT4 則沒有這 3 個功能,比較“低級”。

1.1 對于“高級外部中斷”的初始化 —— INT0 和 INT1

  • 配置“高級外部中斷”需要操作的寄存器都可位尋址,所以可以直接對某個位操作,編程時不需要查詢各 bit 的定義

  1. 清除中斷請求標志位(IE —— Interrupt Enquiry ——位于 定時器&計數(shù)器中斷控制寄存器(TCON))

    1. 程序運行過程中不需要用戶管理:該位在有中斷請求時會硬件置 1,中斷響應完成后會硬件清 0

    2. 初始化時讓 IE0 = 0 / IE1 = 0 (穩(wěn)妥起見手動賦值,不進行該操作也不會有啥問題——上電復位默認為0)

  2. 選擇中斷源類型(IT —— Interrupt Type ——位于定時器&計數(shù)器中斷控制寄存器(TCON))

    1. IT0 = 1 / IT1 = 1 時,外部中斷引腳檢測到 下降沿電平?觸發(fā)外部中斷

    2. IT0 = 0 / IT1 = 0 時,外部中斷引腳檢測到 上升沿電平或者下降沿電平?都能觸發(fā)外部中斷

  3. 設置中斷優(yōu)先級(PX —— Priority Of External Interrupt ——位于中斷優(yōu)先級控制寄存器(IP))????????

    1. PX0 = 0 / PX1 = 0,配置 INT0 /?INT1 為最低優(yōu)先級

    2. PX0 = 1 / PX1 = 1,配置 INT0 /?INT1 為最高優(yōu)先級

  4. 使能外部中斷(EX —— External ——位于中斷允許寄存器(IE))

    1. 讓 EX0 = 1 / EX1 = 1 以使能 外部中斷0(EXINT0)/ 外部中斷1(EXINT1)

  5. 使能總中斷(EA —— Enable All ——位于中斷允許寄存器(IE))

    1. 讓 EA = 1 以開啟總中斷

    2. 總中斷相當于中斷的總開關

1.2 對于“低級的外部中斷”—— INT2 和 INT3 和 INT4

  • 由于“低級的外部中斷”的寄存器有的不支持位尋址,因此編程時要查詢寄存器各 bit 的定義

  • 沒有中斷請求標志位,不能選擇中斷類型,不能配置中斷優(yōu)先級(datasheet上這么說,但 EXINT4 有點特殊)

  1. 使能外部中斷(EX——External——位于外部中斷允許和時鐘輸出寄存器(INT_CLKO)(AUXR2))

    1. 該寄存器不可位尋址,需要對整個寄存器進行操作

    2. 讓 EX2 = 1 / EX3 = 1 / EX4 = 1 以使能 外部中斷2(EXINT2)/外部中斷3(EXINT3)/ 外部中斷4(EXINT4)

  2. 使能總中斷(EA —— Enable All ——位于中斷允許寄存器(IE))

    1. 讓 EA = 1 以開啟總中斷(該步驟與操作“高級的外部中斷”時一致)

外部中斷允許和時鐘輸出寄存器(INT_CLKO)(AUXR2)各 bit 定義

2.?中斷服務函數(shù)的編寫

  • 格式:void (函數(shù)名)(void) interrupt (中斷服務號定義)

    • 函數(shù)名可以任寫

    • 中斷服務號參考 STC15 各中斷服務號定義,從中選擇對應的中斷,中斷服務號可以在頭文件中找到

頭文件中的中斷服務號宏定義

3.對于 EXINT4 優(yōu)先級的碎碎念

datasheet中提到 EXINT4 的優(yōu)先級固定為最低,但是 IP2 寄存器中存在控制 EXINT4 中斷優(yōu)先級的位,兩者矛盾。


IP2寄存器各bit定義
  • 進行了實驗得出了如下結果

    • EXINT0 設置為最低優(yōu)先級, EXINT4 設置為最高優(yōu)先級時:雙方都無法打斷對方的中斷服務函數(shù)

    • 兩個都設置為最高優(yōu)先級時:雙方都無法打斷對方中斷服務函數(shù)

    • EXINT0 設置為最高優(yōu)先級,EXINT4 設置為最低優(yōu)先級時:EXINT0 的中斷服務函數(shù)可以打斷?EXINT4的中斷服務函數(shù),但是 EXINT4 的中斷服務函數(shù)無法打斷 EXINT0?的中斷服務函數(shù)

  • 結論:

    • EXINT4 配置為最低優(yōu)先級時,與其他“低級外部中斷”的效果一致

    • EXINT4 配置為最高優(yōu)先級時,可以不被任何外部中斷打斷,但是也無法打斷 EXINT0 和 EXINT1 的中斷服務函數(shù),


STC15系列MCU —— IAP15W4K58S4 外部中斷 編程筆記的評論 (共 條)

分享到微博請遵守國家法律
石门县| 海门市| 阿坝| 咸宁市| 尚志市| 休宁县| 蓝山县| 汉沽区| 海兴县| 娱乐| 南投市| 柯坪县| 白水县| 北流市| 尉犁县| 长寿区| 石首市| 莱州市| 天台县| 九台市| 东乌| 文昌市| 白朗县| 增城市| 蓬安县| 修水县| 突泉县| 湟中县| 西昌市| 井冈山市| 同江市| 堆龙德庆县| 华坪县| 汤阴县| 渑池县| 舒城县| 礼泉县| 延吉市| 普安县| 扬州市| 甘孜县|