久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

關于單片機 C中斷函數

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年06月09日   【字體:
定義中斷服務函數

 

 
函數類型 函數名 (形式參數) interrupt n [using n]
中斷號    中斷源         中斷向量
  0     外部中斷0           0003H
  1     定時器/計數器0      000BH
  2     外部中斷1           0013H
  3     定時器/計數器1      001BH
  4     串行口              0023H
interrupt 關鍵字是不可缺少的,由它告訴編譯器該函數是中斷服務函數,并由后面的
n 指明所使用的中斷號。n 的取值范圍為0-31,但具體的中斷號要取決于芯片的型號,像
AT89C51 實際上就使用0-4 號中斷。每個中斷號都對應一個中斷向量,具體地址為8n+3,
中斷源響應后處理器會跳轉到中斷向量所處的地址執行程序,編譯器會在這地址上產生一個
無條件跳轉語句,轉到中斷服務函數所在的地址執行程序。下表是51 芯片的中斷向量和中
斷號。

 
 

 
樓上qmt已經大致給你介紹清楚了中斷函數的定義,值得提出的是,中斷函數類型void,說明中斷函數是不能有返回值的,這點要明確,所以不要企圖讓中斷函數給你個返回值。還有,函數名后面括弧內是沒有參數的。。。這點也需要注意,中斷函數不能傳遞參數。

 
interrupt 后面的點是中斷號。重點我給你解釋下using。

 
這是C51編譯器擴展的關鍵字。用來選擇80c51單片機中不同的寄存器組,你也知道R0-R7總共有4組,那么using 后面的數字也就是0-3范圍里的一個數了。如果不需要using的話,編譯器會自動選擇一組寄存器作為絕對寄存器訪問的。
using對代碼是有一定的影響的。
給你說個簡單的例子,你可以想下,
如果定義 
void time0() interrupt 1 using 1
假設,我們又在中斷里調用了一個delay();這個delay是起延時作用。
那么,我們就需要確保我們使用的寄存器組是同一組,否則,就會出現混亂。
這樣說你能明白么?

 
所以,我建議你,不必要時不要使用using。不過,你可以試下這個關鍵字。

 
祝你學習順利。

 
LX efenwu:
簡單來說,51有4組通用寄存器,R0~R7,我們在使用的時候,從來就沒有指明用的是哪個R0,編譯器就會自動選一組通用寄存器作為絕對地址訪問。在c語言中,我們寫一個函數,例如延時函數,里面用的變量,反匯編之后就是在使用R0-R7,那么你能確定你使用的是哪一組寄存器嗎?
所以說,使用using能選擇使用的寄存器組,但同時在“切換”時要特別小心。你在中斷程序里調用別的程序就會出現寄存器組切換問題。。
其實using還有其他的注意地方,因為使用麻煩,我從來不用這個關鍵字。這也就是我為什么不推薦樓主用using。編譯器會自己選擇一組嘛。

 
所以只要這樣定義一個中斷函數就行了:
void FuncName() interrupt lvl
其中lvl就是中斷的優先級序號。

 
關閉窗口

相關文章

主站蜘蛛池模板: 日操夜操 | 久久精品国产一区 | 特级生活片 | 成年人的视频免费观看 | 久久久精品一区 | 超碰97免费在线 | 日韩成人精品在线观看 | 国产wwwcom| 91在线网| 精品视频一二区 | 成人免费在线播放视频 | 久久91av | 亚洲视频在线播放 | 成人毛片视频免费 | 久久99精品久久久97夜夜嗨 | 亚洲一区欧美一区 | 欧美在线日韩 | 久久久久9999亚洲精品 | 欧美一级欧美三级在线观看 | 欧美色综合一区二区三区 | 久久美国 | 国产精品久久一区二区三区 | 精品免费| 亚洲成人三级 | 亚洲欧美国产精品久久 | 一区二区三区四区免费观看 | 中国美女撒尿txxxxx视频 | 日韩免费福利视频 | 亚洲精品乱码久久久久久按摩 | 伊人中文网 | 午夜精品久久久久久久星辰影院 | 日日骚网 | 鲁大师一区影视 | 欧美日韩免费在线 | 毛片入口 | 欧美乱做爰xxxⅹ久久久 | 91精品国产91久久久久久最新 | av毛片| 免费成人av | 久草视频网站 | 国产精品久久久久久久免费观看 |