在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 關于單片機 C中斷函數(shù)

    關于單片機 C中斷函數(shù)

    作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏
    定義中斷服務函數(shù)
    函數(shù)類型 函數(shù)名 (形式參數(shù)) interrupt n [using n]
    中斷號 中斷源 中斷向量
    0 外部中斷0 0003H
    1 定時器/計數(shù)器0 000BH
    2 外部中斷1 0013H
    3 定時器/計數(shù)器1 001BH
    4 串行口 0023H
    interrupt 關鍵字是不可缺少的,由它告訴編譯器該函數(shù)是中斷服務函數(shù),并由后面的
    n 指明所使用的中斷號。n 的取值范圍為0-31,但具體的中斷號要取決于芯片的型號,像
    AT89C51 實際上就使用0-4 號中斷。每個中斷號都對應一個中斷向量,具體地址為8n+3,
    中斷源響應后處理器會跳轉到中斷向量所處的地址執(zhí)行程序,編譯器會在這地址上產(chǎn)生一個
    無條件跳轉語句,轉到中斷服務函數(shù)所在的地址執(zhí)行程序。下表是51 芯片的中斷向量和中
    斷號。
    樓上qmt已經(jīng)大致給你介紹清楚了中斷函數(shù)的定義,值得提出的是,中斷函數(shù)類型void,說明中斷函數(shù)是不能有返回值的,這點要明確,所以不要企圖讓中斷函數(shù)給你個返回值。還有,函數(shù)名后面括弧內(nèi)是沒有參數(shù)的。。。這點也需要注意,中斷函數(shù)不能傳遞參數(shù)。
    interrupt 后面的點是中斷號。重點我給你解釋下using。
    這是C51編譯器擴展的關鍵字。用來選擇80c51單片機中不同的寄存器組,你也知道R0-R7總共有4組,那么using 后面的數(shù)字也就是0-3范圍里的一個數(shù)了。如果不需要using的話,編譯器會自動選擇一組寄存器作為絕對寄存器訪問的。
    using對代碼是有一定的影響的。
    給你說個簡單的例子,你可以想下,
    如果定義
    void time0() interrupt 1 using 1
    假設,我們又在中斷里調(diào)用了一個delay();這個delay是起延時作用。
    那么,我們就需要確保我們使用的寄存器組是同一組,否則,就會出現(xiàn)混亂。
    這樣說你能明白么?
    所以,我建議你,不必要時不要使用using。不過,你可以試下這個關鍵字。
    祝你學習順利。
    LX efenwu:
    簡單來說,51有4組通用寄存器,R0~R7,我們在使用的時候,從來就沒有指明用的是哪個R0,編譯器就會自動選一組通用寄存器作為絕對地址訪問。在c語言中,我們寫一個函數(shù),例如延時函數(shù),里面用的變量,反匯編之后就是在使用R0-R7,那么你能確定你使用的是哪一組寄存器嗎?
    所以說,使用using能選擇使用的寄存器組,但同時在“切換”時要特別小心。你在中斷程序里調(diào)用別的程序就會出現(xiàn)寄存器組切換問題。。
    其實using還有其他的注意地方,因為使用麻煩,我從來不用這個關鍵字。這也就是我為什么不推薦樓主用using。編譯器會自己選擇一組嘛。
    所以只要這樣定義一個中斷函數(shù)就行了:
    void FuncName() interrupt lvl
    其中l(wèi)vl就是中斷的優(yōu)先級序號。


    關鍵詞: 單片機C中斷函

    評論


    技術專區(qū)

    關閉
    ×

    “芯”朋友见面大会
    珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>