找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 KEIL_C51匯編模塊舉例.rar

        KEIL_C51匯編模塊舉例.rar

         

        介紹一下KEIL C51所支持的C語言和匯編語言混合編程的方法!:
        51單片機是最早的單片機,也是在國內應用最廣泛的單片機,為大家所喜愛!但執行速度較其它單片機較慢。因此在編程時更加要注重程序的執行效率及編程上的技巧處理,最大限度的發揮其性能,滿足項目開發的實際需要。在嵌入式開發中,C語言具有可移植性強和可讀性好等優點,而匯編語言的高效、快速及可直接對硬件進行操作等優點又是C語言所難以達到的,本帖就為大家介紹一下KEIL C51所支持C和匯編混合編程的方法,將這兩種語言的優點完美的結合,更大限度的發揮51單片機的性能,加快我們的產品開發周期!

        如用此方法實現6時鐘(6T)的51單片機對320kbps mp3文件的流暢播放,就是這種混合編程的方法的一個很好的應用實例!下面就為大家介紹一下混合編程的方法。

        所謂混合編程,就是在一個項目中,同時使用C和匯編兩種語言。 C語言和匯編語言混合編程的方法形式多樣,可以是以匯編語言為主體,在其中內嵌部分C語言;也可以是以C語言為主體在其中加入部分匯編語言(此方法實用價值較高,而被工程師們廣泛的采用)。在此方法中,用匯編語言編寫對有關硬件的驅動和處理、復雜的算法、實時性要求較高等底層的東西,來滿足單片機對某些硬件高效、快速、精確的處理等性能上的要求。用C語言來編寫程序的主體部分。這樣就將C語言的可移植性強和可讀性好與匯編語言的高效、快速及可直接對硬件進行操作等優點相結合。兩者優劣互補、相得益彰,加快我們產品的開發周期,具有極高的現實意義和實用價值!

        在KEIL C51中加入的匯編代碼需按照其編譯器中約定的規則才可以實現C語言程序對匯編代碼的調用。即KEIL C51的命名規則和參數傳遞規則。

        一. KEIL C51的命名規則

        在KEIL C51中,編譯器對C語言程序中的函數會自動的進行轉換,轉換規則如下表:

        函數屬性 函數舉例 段中的函數名

        無參數或無寄存器參數傳遞的函數 void func1(void) func1

        含通過寄存器傳遞的參數 void func2(int) _func2

        可重入函數 void func3(char)reentrant _?func3

        二. KEIL C51函數的參數傳遞規則

        (一)通過寄存器傳遞的函數參數表

        參數長度 第1個形參 第2個形參 第3個形參

        1字節(char) R7 R5 R3

        2字節(int) R6(H) R7 R4(H) R5 R2(H) R3

        3字節(通用指針) R1(H)~R3

        4字節(long) R4(H)~R7

        (二)函數返回值使用的寄存器列表

        返回類 使用的寄存器

        位數據(bit) 位累加器CY

        1字節(char) R7

        2字節(int) R6(H) R7

        3字節(通用指針) R3(類型)R2(H) R1

        4字節(long) R4(H)~R7

        4字節(float) R4(H)~R7,32位IEEE格式,指數和符號位在R7



        在混合編程中,最常用也是最實用的方法是在C語言中加入部分匯編語言的代碼,分為兩種方法。

        方法1)在Keil C51的函數中直接插入匯編語句

        方法2)按照Keil C51接口規則,編寫匯編模塊

        方法1是利用編譯控制命令#pragma asm(用來標識所插入的匯編語句的起始位置) 和 #pragma endasm (用來標識所插入的匯編語句的結束位置) ,這兩條命令必須成對出現,并可以多次出現。在Keil C51中不對插入的匯編代碼做任何的處理。

        方法2編寫匯編模塊,需對KEIL編譯器的編譯過程做些了解。Keil編譯器的編譯過程是首先將項目中的一個個源文件編譯為目標代碼(obj文件),然在再通過連接器產生為最終可執行的hex文件。

        目標代碼將其中的代碼、數據、常量放在不同的“段”中,保存程序的段稱為“代碼段”,保存數據的段稱為“數據段”,最終目標代碼經過Keil的連接器按照“段”的要求轉換為程序和數據地址固定的可執行文件。

        在Keil軟件中,“段”按定位屬性分為:“可重定位段”和“絕對段”。

        “可重定位段”:程序和數據在其分別所對應的存儲單元(FLASH和RAM)中的存儲地址是浮動的、可重定義的、相對可變的。

        “絕對段”:其地址在連接前就已確定不變,連接器據此為它分配地址。


        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-2 12:22 , Processed in 0.040440 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        免费人欧美日韩在线精品| 欧美午夜精品久久久久免费视| 亚洲AV乱码久久精品蜜桃| 亚洲国产精品福利片在线观看| 国产成人亚洲精品青草天美| 亚洲精品综合一二三区在线| 亚洲国产精品成人一区| 欧美精品v国产精品v日韩精品| 日韩精品成人一区二区三区| 热RE99久久精品国产66热| 日韩精品真人荷官无码| 永久免费精品视频| 亚洲欧美日韩久久精品| 3D动漫精品一区二区三区| 精品人妻伦一二三区久久| 无码日韩人妻精品久久蜜桃| 日韩精品免费在线视频| 亚洲欧美国产∧v精品综合网| japanese乱人伦精品| 韩国三级中文字幕hd久久精品 | 国产午夜精品一区二区| 亚洲人精品午夜射精日韩| 青青青青久久精品国产h| 无码国产亚洲日韩国精品视频一区二区三区 | 中文字幕精品无码一区二区 | 久久国产美女免费观看精品| 婷婷国产成人精品视频| 刺激无码在线观看精品视频| 美女扒开粉嫩的尿口| 久久精品男人影院| 欧美日韩免费一区二区三区| 极品精品国产超清自在线观看| 亚洲精品WWW久久久久久| 国产午夜精品一区理论片| 台湾中文综合娱乐网| 91久久精品国产91性色也| 亚洲一区爱区精品无码 | 麻豆亚洲AV永久无码精品久久| 国产精品夜色视频一级区| 日韩av无码久久精品免费| 精品国产香蕉伊思人在线在线亚洲一区二区 |