找回密碼
         注冊會員
        搜索附件  
        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 13:18 , Processed in 0.039400 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        日韩一区精品视频一区二区| 成人精品综合免费视频| 老司机性色福利精品视频| 国内精品久久人妻互换| 久久精品国产免费| 久久国产精品视频| 无码人妻精品一区二区三 | 5566成人免费视频观看| avtt天堂网久久精品| 色猫咪av在线网址| 国产精品视频一区二区噜噜| 国产精品第1页| 3级黄性日本午夜精品| 久久精品三级视频| 欧美精品VIDEOSSEX少妇| 88国产精品无码一区二区三区 | 国产中老年妇女精品| 国产成人99久久亚洲综合精品| 亚洲国产精品一区二区第四页| 国产精品人成在线播放新网站 | 亚洲欧美日韩国产成人精品影院| 国产精品美女久久久久| 国产亚洲精品资在线| 嫩草伊人久久精品少妇AV| 国产精品片在线观看手机版| 亚洲av永久无码精品国产精品| 国产精品99精品视频网站| 无码精品视频一区二区三区| 国产精品V亚洲精品V日韩精品| 亚洲色精品vr一区二区三区| 91精品国产自产在线观看| 三级在线免费观看| 91精品国产高清久久久久久91| 亚洲永久精品ww47| 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 欧美精品VIDEOSSEX少妇| 国内精品伊人久久久久影院对白| 久久亚洲精品无码AV红樱桃| 国产香蕉国产精品偷在线 | 国产精品美女久久久免费| 日韩精品真人荷官无码|