資源描述:
《單片機C與匯編混用》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、5.1.45.1.4單片機混合編程的基本方式單片機混合編程的基本方式單片機C語言和匯編語言混合編程分為匯編中調(diào)用C51函數(shù)和C51程序中引用匯編在C51程序中使用匯編語言有兩種情況:C51程序調(diào)用匯編程序模塊的變量和函數(shù)和嵌入式匯編11..匯編中調(diào)用...匯編中調(diào)用.匯編中調(diào)用匯編中調(diào)用C51C51程序程序在匯編程序中可以訪問C51程序中的變量和函數(shù)。(1)匯編中調(diào)用C51的變量:普通變量:_變量名用_XX可以訪問數(shù)組:C_語言程序中定義的變量數(shù)組名+偏移量XX;用_XX+3可以訪問數(shù)組中的XX[3]。(2)對于函數(shù):函數(shù)沒有參數(shù):函數(shù)名函數(shù)有參數(shù):_函數(shù)名,調(diào)用函數(shù)前要準備好參數(shù)
2、。如在C51程序中定義了沒有參數(shù)的函數(shù)fun1(),則在匯編程序中用子程序調(diào)用指令調(diào)用fun1即可;如定義了有參數(shù)的函數(shù)fun2(),則在匯編程序中調(diào)用時,子程序名用成_fun2。注意注意::為了能夠讓匯編語言訪問到為了能夠讓匯編語言訪問到CCCCCC語言中定語言中定義的變量和函數(shù)義的變量和函數(shù),,在,,,在,在在CCCCCC程序中它們必須聲明為外部程序中它們必須聲明為外部變量變量,,即加,,,即加,即加即加externextern前綴前綴22..在...在.在在C51C51中嵌入?yún)R編程序中嵌入?yún)R編程序通過C51中的預處理指令#pragmaasm/endasm語句來實現(xiàn)的。其格式如下:
3、#pragmaASM;匯編程序代碼#pragmaENDASM3.3.在在C51C51中調(diào)用匯編程序中調(diào)用匯編程序這種方法應用較多,C模塊與匯編模塊的接口較簡單,分別用C51與A51對源程序進行編譯,然后用L51將obj文件連接即可,關鍵問題在于C函數(shù)與匯編函數(shù)之間的參數(shù)傳遞和得到正確的返回值,以保證模塊間的數(shù)據(jù)交換。5.25.2混合匯編的參數(shù)傳遞與實現(xiàn)混合匯編的參數(shù)傳遞與實現(xiàn)5.2.15.2.1混合匯編的參數(shù)傳遞混合匯編的參數(shù)傳遞1..匯編程序調(diào)用..匯編程序調(diào)用.匯編程序調(diào)用C51函數(shù)的參數(shù)傳遞如C51函數(shù)有參數(shù),則匯編程序在調(diào)用C51函數(shù)前要準備好參數(shù)。在匯編程序中,C51函數(shù)
4、最左邊的一個參數(shù)由寄存器A傳遞,其他的參數(shù)按順序通過堆棧給出。C51函數(shù)的返回值是返回到A寄存器或者由A寄存器給出的地址。2..在..在.在C51中嵌入?yún)R編程序的參數(shù)傳遞通過變量或特殊功能寄存器來實現(xiàn)3..在..在.在C51中調(diào)用匯編程序的參數(shù)傳遞((難點((難點(難點)C51中調(diào)用匯編程序進行參數(shù)傳遞時都必須嚴格遵守C51函數(shù)的參數(shù)和返回值的相關約定。C51中調(diào)用匯編程序進行參數(shù)傳遞的方式有兩種,一種是通過寄存器傳遞參數(shù),第二種是通過固定存儲區(qū)傳遞。1)通過寄存器傳遞參數(shù)最多可通過51單片機的工作寄存器傳遞3個參數(shù),余下的通過固定存儲區(qū)傳遞參數(shù)類型charintlong/f
5、loat通用指針第第第第第第1個個個個個個R7R6、、、、、、R7R4~~~~~~R7R1、、、、、、R2、、、、、、R3第第第第第第2個個個個個個R5R4、、、、、、R5R4~~~~~~R7R1、、、、、、R2、、、、、、R3第第第第第第3個個個個個個R3R2、、、、、、R3無無無無無無R1、、、、、、R2、、、、、、R3func1(inta)唯一一個參數(shù)aaaaaa在寄存器R6和和和和和和R7中傳遞func2(intb,,,,,,intcccccc,,,,,,int第一個參數(shù)bbbbbb在寄存器R6和和和和和和R7中傳遞,,,,,,*d)第二個參數(shù)cccccc在寄存器R4和和和和和
6、和R5中傳遞,,,,,,第三個參數(shù)dddddd在寄存器R1、、、、、、R2和和和和和和R3中中中中中中傳遞2)通過固定存儲區(qū)傳遞用固定存儲區(qū)傳遞參數(shù)給匯編程序,參數(shù)段首地址用段名?function_name?BYTE和?function_name?BIT保存,function_name為函數(shù)的名稱,其中,?function_name?BIT保存位參數(shù)段首地址,?function_name?BYTE保存別的參數(shù)段首地址,即使通過寄存器傳遞參數(shù),參數(shù)也將在這些段中分配空間,并按聲明的先后在每個段中順序保存。3)函數(shù)返回值函數(shù)返回值通常用寄存器傳遞返回值類型寄寄寄存寄存存存器器器器說說說明說
7、明明明BitC由位運算器C返回(unsigned)charR7在在在R7返回單個字節(jié)(unsigned)intR6、、、R7高位在R6,,,低位在,低位在R7(unsigned)longR4~~~R7高位在R4,,,低位在,低位在R7floatR4~~~R732位位位IEEE格式通用指針R1、、、R2、、、R3存儲類型在R3,,,高位在,高位在R2,,,低位在,低位在R15.2.25.2.2混合匯編的實現(xiàn)混合匯編的實現(xiàn)1.C51中嵌入?yún)R編程序的