資源描述:
《單片機原理與應用-基于匯編、C51及混合編程第6章C51與匯編語言混合編程ppt課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、本書例題的介紹與實際應用相結(jié)合,原理圖中給出了各元器件的實際應用參數(shù)。1第6章C51與匯編語言混合編程6.1、C51與匯編語言混合編程概述6.2、C51和A51程序接口基礎(chǔ)6.3、混合編程的實現(xiàn)26.1C51與匯編語言混合編程概述在一個應用程序中,根據(jù)每個任務的具體特點和要求,用不同的編程語言編寫源程序,最后通過編譯/連接器生成一個可執(zhí)行的完整程序,這種編程方式稱為混合編程。匯編語言特點:優(yōu)點:執(zhí)行速度快、效率高、實時性強、與硬件結(jié)合緊密。缺點:編程難度大、可讀性差,不便于移植、開發(fā)時間長。C語言特點:優(yōu)點:編程容易、可移植性強、支持多種數(shù)據(jù)類型,能直
2、接對硬件進行操作,效率高。缺點:實時處理弱于匯編語言,無法準確定時?;旌暇幊烫攸c:效率高、速度快、易于編程、可讀性、可移植性好,使用范圍廣3單片機程序的編譯過程:無論是C語言還是匯編語言,源程序都要被轉(zhuǎn)換成目標代碼(機器語言),單片機才能識別。在Keil中程序的編譯過程如圖6-1所示。圖6-1程序編譯連接過程在單片機混合編程中,C模塊與匯編模塊的接口簡單,分別用C51和A51對源文件進行編譯,然后經(jīng)連接定位器L51產(chǎn)生可下載到程序存儲器的十六進制可執(zhí)行文件。46.2C51和A51程序接口基礎(chǔ)C語言與匯編語言程序的連接,在技術(shù)上有兩個問題:一個是C語言程
3、序與匯編語言程序如何相互調(diào)用;另一個是C語言程序和匯編語言程序如何實現(xiàn)相互之間的數(shù)據(jù)傳遞。混合編程中,必須約定兩個規(guī)則,即命名規(guī)則和參數(shù)傳遞規(guī)則。6.2.1C51函數(shù)名的轉(zhuǎn)換及其命名規(guī)則C51程序模塊編譯成目標文件后,其中的函數(shù)名要依據(jù)其定義的性質(zhì)轉(zhuǎn)換為相應不同的函數(shù)名。因此,在C和匯編程序的相互調(diào)用中,要求匯編程序必須服從這種函數(shù)名的轉(zhuǎn)換規(guī)則,否則將無法調(diào)用到所需的函數(shù)甚至出現(xiàn)錯誤。C51中函數(shù)名的轉(zhuǎn)換規(guī)則如表6-1所示,其匯編符號名全部轉(zhuǎn)換為大寫。5表6-1C51中函數(shù)名的轉(zhuǎn)換規(guī)則C51函數(shù)聲明匯編符號名說明voidfunc1(void)FUNC1
4、無參數(shù)傳遞或不含寄存器的函數(shù),名稱不作改變直接轉(zhuǎn)入目標文件中。voidfunc2(char)_FUNC2通過寄存器傳遞參數(shù),函數(shù)名加前綴“_”voidfunc3(void)reentrant_?FUNC3重入函數(shù),通過堆棧傳遞參數(shù),函數(shù)名加前綴“_?”66.2.2C51函數(shù)及其相關(guān)段的命名規(guī)則一個C51源程序模塊被編譯后,其中的每個函數(shù)以“?PR?函數(shù)名?模塊名”為命名規(guī)則被分配到一個獨立的CODE段。例如,如果模塊“FUNC51”內(nèi)包含一個名為“func”的函數(shù),則其CODE段的名字是“?PR?FUNC?FUNC51”。如果一個函數(shù)包含有data或b
5、it類型的局部變量,編譯器將按“?函數(shù)名?BYTE”或“?函數(shù)名?BIT”命名規(guī)則建立一個data或bit段,它們代表所要傳遞參數(shù)的起始位置,其偏移量為0。這些段是公開的,因而它們的地址可以被其它模塊訪問。這些段被編譯器賦予“OVERLAYABLE”標志,可被L51連接/定位器作覆蓋分析。依據(jù)所使用的存儲器模式,這些段按表6-2所列規(guī)則命名,在相互調(diào)用時,匯編語言必須服從C51有關(guān)段名的命名規(guī)則。7表6-2各種存儲模式下C51函數(shù)段名的命名規(guī)則數(shù)據(jù)段類型段名程序代碼CODE?PR?函數(shù)名?模塊名(所有存儲器模式)局部變量DATA?DT?函數(shù)名?模塊名(
6、SMALL模式)PDATA?PD?函數(shù)名?模塊名(COMPACT模式)XDATA?XD?函數(shù)名?模塊名(LARGE模式)局部bit變量BIT?BI?函數(shù)名?模塊名(所有存儲器模式)86.2.3C51函數(shù)的參數(shù)傳遞規(guī)則C51中調(diào)用匯編程序時參數(shù)傳遞有兩種方式,一種是通過寄存器傳遞,一種是通過固定存儲區(qū)傳遞。1.通過寄存器傳遞參數(shù)KeilC51規(guī)定,調(diào)用函數(shù)時,通過寄存器最多可傳遞3個參數(shù),余下的通過固定存儲區(qū)傳遞。如果在源程序中采用了編譯控制命令“#pragmaNOREGPARMS”,則所有參數(shù)傳遞都發(fā)生在固定的存儲區(qū)域,所使用的地址空間依賴于所選擇的存
7、儲模式。用寄存器傳遞參數(shù)的函數(shù)在編譯時被C51編譯器在函數(shù)名前加了一個“_”的前綴,用固定存儲區(qū)傳遞參數(shù)的函數(shù)轉(zhuǎn)換成的函數(shù)名沒有下劃線,如表6-1所示。不同的參數(shù)用到的寄存器不一樣,不同的數(shù)據(jù)類型用到的寄存器也不同。表6-3是利用寄存器傳遞參數(shù)的規(guī)則。9表6-3C51利用寄存器傳遞參數(shù)規(guī)則參數(shù)類型charintlong/float通用指針第1個參數(shù)R7R6、R7R4-R7R1-R3第2個參數(shù)R5R4、R5無R1-R3第3個參數(shù)R3R2、R3無R1-R3其中,int型和long型數(shù)據(jù)傳遞時,低地址寄存器中放數(shù)據(jù)的高位字節(jié),高地址寄存器中放數(shù)據(jù)的低位字節(jié);
8、float型數(shù)據(jù)滿足IEEE格式,R4中存放階碼和符號位,尾數(shù)按從高位到低位的順序依次存放在寄