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

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

關(guān)于單片機(jī) C中斷函數(shù)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年06月09日   【字體:
定義中斷服務(wù)函數(shù)

 

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

 
 

 
樓上qmt已經(jīng)大致給你介紹清楚了中斷函數(shù)的定義,值得提出的是,中斷函數(shù)類(lèi)型void,說(shuō)明中斷函數(shù)是不能有返回值的,這點(diǎn)要明確,所以不要企圖讓中斷函數(shù)給你個(gè)返回值。還有,函數(shù)名后面括弧內(nèi)是沒(méi)有參數(shù)的。。。這點(diǎn)也需要注意,中斷函數(shù)不能傳遞參數(shù)。

 
interrupt 后面的點(diǎn)是中斷號(hào)。重點(diǎn)我給你解釋下using。

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

 
所以,我建議你,不必要時(shí)不要使用using。不過(guò),你可以試下這個(gè)關(guān)鍵字。

 
祝你學(xué)習(xí)順利。

 
LX efenwu:
簡(jiǎn)單來(lái)說(shuō),51有4組通用寄存器,R0~R7,我們?cè)谑褂玫臅r(shí)候,從來(lái)就沒(méi)有指明用的是哪個(gè)R0,編譯器就會(huì)自動(dòng)選一組通用寄存器作為絕對(duì)地址訪問(wèn)。在c語(yǔ)言中,我們寫(xiě)一個(gè)函數(shù),例如延時(shí)函數(shù),里面用的變量,反匯編之后就是在使用R0-R7,那么你能確定你使用的是哪一組寄存器嗎?
所以說(shuō),使用using能選擇使用的寄存器組,但同時(shí)在“切換”時(shí)要特別小心。你在中斷程序里調(diào)用別的程序就會(huì)出現(xiàn)寄存器組切換問(wèn)題。。
其實(shí)using還有其他的注意地方,因?yàn)槭褂寐闊覐膩?lái)不用這個(gè)關(guān)鍵字。這也就是我為什么不推薦樓主用using。編譯器會(huì)自己選擇一組嘛。

 
所以只要這樣定義一個(gè)中斷函數(shù)就行了:
void FuncName() interrupt lvl
其中l(wèi)vl就是中斷的優(yōu)先級(jí)序號(hào)。

 
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 四虎永久免费黄色影片 | 亚洲精品乱码久久久久久9色 | 人人做人人澡人人爽欧美 | 日韩成人av在线播放 | 三区在线观看 | 亚洲综合在线网 | 一级毛片免费 | 欧美黄色性生活视频 | 欧美成年人视频在线观看 | 免费在线一区二区 | 日日骚av| 91av在线影院| 一区二区视频在线观看 | 日韩一级欧美一级 | 欧美日韩一区二区视频在线观看 | 亚洲综合成人网 | 91久久电影 | 色综合天天天天做夜夜夜夜做 | 久久蜜桃av | 精品国产区 | 日韩高清中文字幕 | 欧美一区二区激情三区 | 国产精品久久av | 九九综合| 国产精品毛片一区二区在线看 | 成人精品鲁一区一区二区 | 久久九 | 韩日一区二区三区 | 国产日韩免费观看 | 国产一级一级国产 | av一级一片 | 人人干人人干人人干 | 日本不卡一区 | 国产精品a免费一区久久电影 | 久久高清精品 | 精品视频在线免费观看 | 国产激情一区二区三区 | 午夜在线精品 | 色www精品视频在线观看 | 天天干狠狠操 | 亚洲精品视频一区 |