资源描述:
《C51和汇编混合编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C51和汇编混合编程2021/7/271C语言中嵌入汇编1、在C文件中要嵌入汇编代码片以如下方式加入汇编代码:#pragmaASM;AssemblerCodeHere#pragmaENDASM2、在Project窗口中包含汇编代码的C文件上右键,选择“Optionsfor...”,点击右边的“GenerateAssemblerSRCFile”和“AssembleSRCFile”,使检查框由灰色变成黑色(有效)状态;3、根据选择的编译模式,把相应的库文件(如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无参数传递的函数调用***********************exa
4、mple.c*********************externvoiddelay100();main(){delay100;}***********************example.a51*******************?PR?DELAY100SEGMENTCODE;//在程序存储区中定义段PUBLICDELAY100; //声明函数RSEG?PR?DELAY100; //函数可被连接器放置在任何地方DELAY100:MOVR7,#10DEL:MOVR6,#20DJNZR6,$DJNZR7,DELRETEND2021/7/27?P
5、R?DELAY100SEGMENTCODE;作用是在程序存储区中定义段,DELAY100为段名,?PR?表示段位于程序存储区内PUBLICDELAY100;作用是声明函数为公共函数RSEG?PR?DELAY100;表示函数可被连接器放置在任何地方,RSEG是段名的属性段名的开头为PR,是为了和C51内部命名转换兼容,命名转换规律如下:CODE-?PR?XDATA-?XDDATA-?DTBIT-?BIPDATA-?PD2021/7/273有参数传递的函数调用****************************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不同类型的数据及其传递参数的寄存器表参数类型chari
7、ntlong/float通用指针第1个R7R6&R7R4-R7R1-R3第2个R5R4&R5R4-R7R1-R3第3个R3R2&R3--R1-R32021/7/274函数的返回值传递参数**************main.c******************unsignedintexample(unsignedchari){return(i*i);}main(){example(80);#pragmaasmDJNZR7,$DJNZR6,$#pragmaendasmwhile(1);}2021/7/27函数返回值所用的寄存器返回值类型寄存器说明BitC由具
8、体标志位返回char/unsignedchar/1b