關於郭天祥單片機書上第68頁中斷剖析
書上講述的中斷思路有些複雜,及整理了一份思維導圖。希望以最少的語言表達出最清晰的意思。
優先級概念及應用--中斷的嵌套發生處理及響應:
中斷實現流程:
第一步——優先級設置
第二步——工作方式設置
中斷工作方式設置分三種:定時器,外部中斷,串行口
總覽圖:
2.1定時器的工作方式設置:
2.2外部中斷工作方式設置
第三步——響應中斷
看完流程,我們就可以實際操作,實際操作之中有些小細節性的東西又能讓我更全面的理解中斷。
首先看一下定時器定時長度計算
51單片機採用向上計數法,即你給一個初值,定時器從這個初值向上加,一直加滿溢出。【12MHz情況下】
方式0:13位,則最大值爲8192【8.192ms】
方式1:16位,則最大值爲65536【65.536ms】
方式2: 8位,則最大值爲256【0.256ms】
方式3: 8位,則最大值爲256【0.256ms】
初值計算:
方式x下最大值爲max,要定時長度爲t,機器週期Tcy=12/晶振頻率;
初值大小爲 val = max - t/機器週期。
THx = val / 256;
TLx = val%256。
TMOD寄存器設置【定時器/計數器專用】
高四位設置定時器1
第四位設置定時器0
不能位尋址是說明這個字節地址不能進行特殊功能位單獨聲明,每次使用是8位一起使用。
TCON寄存器設置
TCON設置爲爲定時器設置和外部中斷設置
下圖爲使用定時器時的TCON設置
下圖是使用外部中斷時的TCON設置
寄存器設置完之後就可以寫中斷服務程序了
示例:
在中斷服務函數中必須做兩件事:
1.重裝初值[方式2除外]
2.中斷處理[確保準確的情況下,將能寫在中斷外的處理語句就寫在中斷外。]
第78頁一段繞口的話逐句解讀
1:若將判斷時間是否到達的語句寫在的主程序中
2:當主程序運行到數碼管顯示語句當中時,此時恰好定時器0進入中斷並且num1剛好加到4,當定時器再次進入時,主程序仍未退出數碼管顯示語句,那麼此時num1的值便成了5.
在這個過程中主程序一直在display(shi, ge)中顯示,而中斷髮生了兩次仍未退出這個顯示函數,導致第一次進入中斷函數使num1爲4,主函數還在display中,沒有判斷num1==4並將num1清零。結果中斷再次發生,num1的值變爲了5。結果你懂的。。。。。。。還是老郭那句話:寫程序搞研究一定要嚴格,絕對不能抱有僥倖的心理!!!