C51的中斷函數的格式為:
專業領域包括網站設計制作、網站設計、商城網站建設、微信營銷、系統平臺開發, 與其他網站設計及系統開發公司不同,創新互聯的整合解決方案結合了幫做網絡品牌建設經驗和互聯網整合營銷的理念,并將策略和執行緊密結合,為客戶提供全網互聯網整合方案。
void FuncIr(void) interrupt x [using y]
以下是夢游的一些分析:
一、中斷函數是一個特殊的函數,沒有參數,也沒有返回值;但是程序中允不允許使用return呢?答案是允許的,不過
只能用"return;",不能用"return(z);";用在一些需要快速返回的地方,對應的匯編會有多個ret語句,相對效率會高一
些。
二、using的用法,using可以修飾任何函數,不過個人建議只用來修飾中斷函數;簡單的說,“using”會指定工作寄存
器組,由于中斷函數一般都是比較緊急的事情,有時一條語句都會斤斤計較,所以使用using切換寄存器組可以省去一些壓棧
的動作,由于51只有兩級中斷,同級中斷不能被打斷,因此,我們可以同級中斷設成同樣的寄存器組,從某種意義上來說,
有一組寄存器是多余的。同時個人建議中斷函數應該使用using這個關鍵字。
三、中斷中調用函數,首先要討論中斷函數中調用函數的必要性,前天在論壇上我和別人爭論過這個問題,現在我還是
這個觀點:有些情況中斷中調用函數還是必要的,這個時候是不是該調用函數,其實和普通函數差不多,首先是這個函數如
果調用多次,或者要帶一些參數什么的就更加必要的;前天有人跟我叫勁,說假如只調用一次且無參數無返回的函數要直接
寫,因為如果用函數,至少會增加CALL和RET兩條語句,我不敢茍同,我是實際調試發現的,當你程序比較復雜時,你將那部
分單獨拉出來做成函數,可能代碼和時間都會更好
四、中斷中調用的函數最好不要被中斷外的其它函數調用,因為會出現“重復調用”的警告,有時這種調用是很致命
的,有人說這個函數可以用reentrant來修飾,是的,的確可以這樣解決,不過個人不建議這么做,也許這樣會跟你減少很多
堆棧空間,并且整個程序的優化要差很多,個人建議出現這種情況就把這個函數寫兩遍,分成兩個函數分別調用。
五,中斷調用了函數,會出現一些莫名其妙的問題,一些數據不對。其實一般是因為匯編中使用了絕對寄存器引起的,有人說中斷函數使用那個寄存器組,被中斷調用的
函數就使用哪個寄存器組,我認為這樣不好:
這樣會增加額外的消耗,使用using會增加一下語句:
PUSH PSW
MOV PSW, #XX
....
POP PSW
更重要的是,使用using的函數不能有返回值,這是致命傷
個人推薦的方法有兩種:
1、使用“#pragma NOAREGS”禁止使用絕對寄存器
2、使用“#pragme RB(x)”來指定本文件的工作寄存器組
六、一般說來,要求中斷函數盡可能的短,但也有特殊情況,有些前/后臺的系統中,就會把很多相對重要的事情放到定
時中斷(這個定時中斷類似實時操作系統中的時鐘節拍)去做,而且程序很長。我單獨提出來這點是想告訴大家,中斷函數
也是一個函數而已,只要系統有必要,可以做一些看似不合理的事情,該出手時就出手,就像goto語句一樣。
是指中斷處理函數不能有輸入參數也不能有函數返回。因為中斷都是些硬件自動調用,沒有程序去給他傳遞參數,也沒有硬件去接收參數。
不過x86計算機的軟中斷可以有參數傳遞,不過他是用寄存器傳遞的。
一、中斷函數的調用
中斷函數是硬件或者操作系統自動調用的,也就是說只要滿足觸發條件,就會自動調用中斷函數(此時主函數是停止的)。當中斷函數執行完畢,又返回主函數繼續執行主函數。然后這樣不斷的循環,反正只要是觸發中斷的條件一滿足。就會自動進入中斷(前提是你的中斷的配置是正確的)
二、中斷函數的定義
1、中斷函數定義的格式為:
函數類型 函數名 interrupt n using n
其中: Interrupt后面的n是中斷號。
關鍵字using后面的n是所選擇的寄存器組,取值范圍是0-3.
定義中斷函數時,using是一個選項,可以省略不用。如果不用則由編譯器選擇一個寄存器組作為絕對寄存器組。
2、8051的中斷過程通過使用interrupt關鍵字和中斷號來實現,中斷號告訴編譯器中斷程序的入口地址。中斷號對應著IE寄存器中的使能位,換句話說,IE寄存器中的0位對應著外部中斷0,相應的外部中斷0的中斷號是0. IE寄存器中的使能位與外部中斷對應關系:
中斷號 中斷源
0 外部中斷0
1 定時器0
2 外部中斷1
3 定時器1中斷
4 串行口中斷
5 定時器2中斷
新聞名稱:c51語言中斷函數 c51中斷函數的關鍵字是
本文地址:http://m.newbst.com/article22/doihecc.html
成都網站建設公司_創新互聯,為您提供網站營銷、App設計、網站收錄、企業建站、搜索引擎優化、
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯