新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51中斷函數(shù)學(xué)習(xí)筆記

        51中斷函數(shù)學(xué)習(xí)筆記

        作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
        釋疑:void Timer0() interrupt 1 using 1

        Timer0 是函數(shù)名,隨便取的

        本文引用地址:http://www.104case.com/article/201611/315938.htm

        interrupt xx using y

        跟在interrupt 后面的xx 值得是中斷號(hào),就是說這個(gè)函數(shù)對(duì)應(yīng)第幾個(gè)中斷端口,一般在51

        0 外部中斷0

        1 定時(shí)器0

        2 外部中斷1

        3 定時(shí)器1

        4 串行中斷

        實(shí)際上編譯的時(shí)候就是把你這個(gè)函數(shù)的入口地址方到這個(gè)對(duì)應(yīng)中斷的跳轉(zhuǎn)地址

        using y 這個(gè)y是說這個(gè)中斷函數(shù)使用的那個(gè)寄存器組,51里面一般有4組 r0 -- r7寄存器,一共有32個(gè),如果你的終端函數(shù)和別的程序用的不是同一個(gè)寄存器組則進(jìn)入中斷的時(shí)候就不會(huì)將寄存器組壓入堆棧返回時(shí)也不會(huì)談出來節(jié)省代碼和時(shí)間

        MCS-數(shù)注意如下:
        (1)中斷函數(shù)不能進(jìn)行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。
        (2)中斷函數(shù)沒有返回值,如果企圖定義一個(gè)返回值將得不到正確的結(jié)果,建議在定義中斷函數(shù)時(shí)將其定義為void類型,以明確說明沒有返回值。
        (3)在任何情況下都不能直接調(diào)用中斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。因?yàn)橹袛嗪瘮?shù)的返回是由8051單片機(jī)的RETI指令完成的,RETI指令影響8051單片機(jī)的硬件中斷系統(tǒng)。如果在沒有實(shí)際中斷情況下直接調(diào)用中斷函數(shù),RETI指令的操作結(jié)果會(huì)產(chǎn)生一個(gè)致命的錯(cuò)誤。
        (4)如果在中斷函數(shù)中調(diào)用了其它函數(shù),則被調(diào)用函數(shù)所使用的寄存器必須與中斷函數(shù)相同。否則會(huì)產(chǎn)生不正確的結(jié)果。
        (5)C51編譯器對(duì)中斷函數(shù)編譯時(shí)會(huì)自動(dòng)在程序開始和結(jié)束處加上相應(yīng)的內(nèi)容,具體如下:在程序開始處對(duì)ACC、B、DPH、DPL和PSW入棧,結(jié)束時(shí)出棧。中斷函數(shù)未加using n修飾符的,開始時(shí)還要將R0~R1入棧,結(jié)束時(shí)出棧。如中斷函數(shù)加using n修飾符,則在開始將PSW入棧后還要修改PSW中的工作寄存器組選擇位。
        (6)C51編譯器從絕對(duì)地址8m+3處產(chǎn)生一個(gè)中斷向量,其中m為中斷號(hào),也即interrupt后面的數(shù)字。該向量包含一個(gè)到中斷函數(shù)入口地址的絕對(duì)跳轉(zhuǎn)。
        (7)中斷函數(shù)最好寫在文件的尾部,并且禁止使用extern存儲(chǔ)類型說明。防止其它程序調(diào)用。



        關(guān)鍵詞: 51中斷函

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 伊川县| 韶关市| 公主岭市| 益阳市| 昌图县| 泾阳县| 怀安县| 金门县| 邛崃市| 桐庐县| 梁山县| 江永县| 南郑县| 张家川| 客服| 西青区| 土默特左旗| 林州市| 榆树市| 高阳县| 巨鹿县| 紫阳县| 临武县| 曲阳县| 罗甸县| 万源市| 长汀县| 锦屏县| 麻城市| 明水县| 宾阳县| 乌兰浩特市| 曲水县| 信丰县| 新民市| 顺昌县| 河池市| 肃南| 诸城市| 来宾市| 永兴县|