中斷函數不能進行參數傳遞 中斷函數沒有返回值 在任何情況下都不能直接調用中斷函數 中斷函數使用浮點運算要保存浮點寄存器的狀態。 如果在中斷函數中調用了其它函數,則被調用函數所使用的寄存器必須與中斷函數相同,被調函數最好設置為可重入的。 C51編譯器對中斷函數編譯時會自動在程序開始和結束處加上相應的內容,具體如下: ○ 在程序開始處對ACC、B、DPH、DPL和PSW入棧,結束時出棧。 ○ 中斷函數未加using n修飾符的,開始時還要將R0~R1入棧,結束時出棧。 ○ 如中斷函數加using n修飾符,則在開始將PSW入棧后還要修改PSW中的工作寄存器組選擇位。 C51編譯器從絕對地址8m+3處產生一個中斷向量,其中m為中斷號,也即interrupt后面的數字。該向量包含一個到中斷函數入口地址的絕對跳轉。 中斷函數最好寫在文件的尾部,并且禁止使用extern存儲類型說明。防止其它程序調用。 在設計中斷時,要注意的是哪些功能應該放在中斷程序中,哪些功能應該放在主程序中。一般來說中斷服務程序應該做最少量的工作,這樣做有很多好處。 首先系統對中斷的反應面更寬了,有些系統如果丟失中斷或對中斷反應太慢將產生十分嚴重的后果,這時有充足的時間等待中斷是十分重要的。 其次它可使中斷服務程序的結構簡單,不容易出錯。中斷程序中放入的東西越多,他們之間越容易起沖突。簡化中斷服務程序意味著軟件中將有更多的代碼段,但可把這些都放入主程序中。 中斷服務程序的設計對系統的成敗有至關重要的作用,要仔細考慮各中斷之間的關系和每個中斷執行的時間,特別要注意那些對同一個數據進行操作的ISR。、 以下課程可免費試聽C語言、電子、PCB、STM32、Linux、FPGA、Python、安卓等。 想學習的你和我聯系預約就可以免費聽課了。宋工Q35--24-65--90-88 Tel/WX:173--17--95--19--08 |