新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 深入C51中斷向量表

        深入C51中斷向量表

        作者: 時間:2016-11-09 來源:網絡 收藏
        在FLASH中有一組特殊的保留單元000H~00ABH

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

        0000H-0002H 這三個單元包含一個無條件跳轉指令(LJMP),當系統復位后,PC=0000H,跳轉到main函數(不確切)


        LJMP 是三字節指令。就是由 指令碼02H(一個字節) + 16位地址(2個字節) 組成


        16位地址就是Main()函數的地址,其實也不然,由于main()函數在調用之前,要進行堆棧的初始化之類的工作,在KEIL中,這部分代碼是自動生成的(對于C程序來說),跳轉地址實際就是這個堆棧匯編的代碼開頭處!

        以下是一個C程序轉換成匯編的部分代碼

        C:0x0000 020410 LJMP C:0410 ;跳轉到堆棧初始化的開頭處
        .......................................................... ;中斷向量表
        C:0x0023 020527 LJMP UART0_ISR(C:0527) ;跳轉到串口中斷函數地址

        C:0x0410 787F MOV R0,#0x7F ;堆棧初始化程序
        C:0x0412 E4 CLR A
        C:0x0413 F6 MOV @R0,A
        C:0x0414 D8FD DJNZ R0,C:0413
        C:0x0416 75814F MOV SP(0x81),#0x4F
        C:0x0419 020457 LJMP C:0457
        C:0x041C 02049C LJMP main(C:049C) ;跳轉到main

        void UART0_ISR (void) interrupt 4 using 3 ;串口中斷函數

        C:0x0527 C0E0 PUSH ACC(0xE0)
        C:0x0529 C083 PUSH DPH(0x83)
        C:0x052B C082 PUSH DPL(0x82)
        。。。。。。。。。。。。。。。。。。。。。。。

        顯然當我們編寫C程序代碼的時候 ,000H~00ABH的內容KEIL編譯轉換成匯編后,會自動幫我們添加。



        關鍵詞: C51中斷向量

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 漳州市| 长治县| 平定县| 洛隆县| 广元市| 讷河市| 哈巴河县| 晋宁县| 乐陵市| 城步| 宝清县| 枞阳县| 阿尔山市| 浏阳市| 永平县| 庆城县| 沽源县| 和田县| 阿合奇县| 安泽县| 福鼎市| 日照市| 鲁山县| 北京市| 寿阳县| 张掖市| 建始县| 登封市| 右玉县| 天祝| 太和县| 嘉峪关市| 中山市| 于田县| 绥棱县| 上饶县| 开平市| 久治县| 新巴尔虎左旗| 定边县| 岫岩|