資源描述:
《C51和匯編混合編程.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、C51和匯編混合編程2021/7/271C語言中嵌入?yún)R編1、在C文件中要嵌入?yún)R編代碼片以如下方式加入?yún)R編代碼:#pragmaASM;AssemblerCodeHere#pragmaENDASM2、在Project窗口中包含匯編代碼的C文件上右鍵,選擇“Optionsfor...”,點擊右邊的“GenerateAssemblerSRCFile”和“AssembleSRCFile”,使檢查框由灰色變成黑色(有效)狀態(tài);3、根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如Small模式時,是KeilC51LibC51S.Lib)加入工程中,該文件必須作為工程的最后文件
2、;2021/7/27C51S.LIB-沒有浮點運算的SmallmodelC51C.LIB-沒有浮點運算的CompactmodelC51L.LIB-沒有浮點運算的LargemodelC51FPS.LIB-帶浮點運算的SmallmodelC51FPC.LIB-帶浮點運算的CompactmodelC51FPL.LIB-帶浮點運算的Largemodel若未添加此庫文件,則會提示”UNRESOLVEDEXTERNALSYMBOL”警告。2021/7/27示例#includevoidmain(void){P2=1;#pragmaasmMOVR
3、7,#10DEL:MOVR6,#20DJNZR6,$DJNZR7,DEL#pragmaendasmP2=0;}2021/7/27Voidreset_data(void){Asmmovr0,#0dfhAsmdo_resetdata;Asmmov@r0,#00hAsmdjnzr0,do_resetdatareturn}Voidreset_data(void){asm{movr0,#0dfhdo_resetdata;mov@r0,#00hdjnzr0,do_resetdata}return}2無參數(shù)傳遞的函數(shù)調(diào)用***********************exa
4、mple.c*********************externvoiddelay100();main(){delay100;}***********************example.a51*******************?PR?DELAY100SEGMENTCODE;//在程序存儲區(qū)中定義段PUBLICDELAY100;?????//聲明函數(shù)RSEG?PR?DELAY100;???//函數(shù)可被連接器放置在任何地方DELAY100:MOVR7,#10DEL:MOVR6,#20DJNZR6,$DJNZR7,DELRETEND2021/7/27?P
5、R?DELAY100SEGMENTCODE;作用是在程序存儲區(qū)中定義段,DELAY100為段名,?PR?表示段位于程序存儲區(qū)內(nèi)PUBLICDELAY100;作用是聲明函數(shù)為公共函數(shù)RSEG?PR?DELAY100;表示函數(shù)可被連接器放置在任何地方,RSEG是段名的屬性段名的開頭為PR,是為了和C51內(nèi)部命名轉(zhuǎn)換兼容,命名轉(zhuǎn)換規(guī)律如下:CODE-?PR?XDATA-?XDDATA-?DTBIT-?BIPDATA-?PD2021/7/273有參數(shù)傳遞的函數(shù)調(diào)用****************************main.c******************
6、*********externvoidDELAY(unsignedchari,unsignedintj);main(){DELAY(10,1000);while(1);}**********************DELAY.A51****************************?PR?_DELAY?DELAY????SEGMENTCODEPUBLIC?_DELAYRSEG??PR?_DELAY?DELAY_DELAY:DJNZR4,$DJNZR5,$DJNZR7,$RETEND2021/7/27不同類型的數(shù)據(jù)及其傳遞參數(shù)的寄存器表參數(shù)類型chari
7、ntlong/float通用指針第1個R7R6&R7R4-R7R1-R3第2個R5R4&R5R4-R7R1-R3第3個R3R2&R3--R1-R32021/7/274函數(shù)的返回值傳遞參數(shù)**************main.c******************unsignedintexample(unsignedchari){return(i*i);}main(){example(80);#pragmaasmDJNZR7,$DJNZR6,$#pragmaendasmwhile(1);}2021/7/27函數(shù)返回值所用的寄存器返回值類型寄存器說明BitC由具
8、體標(biāo)志位返回char/unsignedchar/1b