- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                5.3.1  函数 5.可重入函数    C编译程序通常将函数的局部变量分配在存储器的固定位置    如果正在执行该函数时发生了中断,而中断服务程序中也调用该函数,先前的局部变量值便会被破坏。    类似的情况在实现函数递归调用时也会发生    定义为可重入函数后,编译程序产生能够保护局部变量的代码   reentrant 5.3.1  函数 6.中断处理函数    中断服务程序,是CPU响应中断后要执行的一段程序,在C语言中组织成一个函数的形式    编写中断处理函数时,程序员仅需关心中断类型号和寄存器组的选择,编译程序会自动产生中断向量和返回地址的入栈及出栈代码    interrupt   using 5.3.1  函数 7.intrinsic函数    一些常用的只进行简单处理的函数,LCALL或ACALL的执行代价太高    intrinsic函数是一类用汇编语言代码实现的短小函数,若有对intrinsic函数的调用,编译程序将会直接用被调用函数代码替换函数调用语句 5.3.2  流程控制 1.分支    if语句   switch-case结构  2.循环    goto语句   while结构   do…while结构   for结构   break和continue语句 5.3.3  输入与输出   一些C开发环境提供了流式输入/输出函数,可以实现通过串行口或用户自定义I/O接口的输入/输出操作,例如getchar、gets、scanf、putchar、puts、printf等    输入/输出功能需要调用_getkey和putchar两个函数,这两个函数的默认实现是通过串行口实现的    如果使用输入/输出函数,还需要在程序中加入一些代码,以便调用时已经对串行口进行了适当的初始化工作  5.3.4  程序的入口   在main函数执行之前,已经做了一些初始化    若有在main函数执行之前就应当初始化的资源,或者需要将存储区初始化为特定的值,可以在STARTUP.A51中修改或添加代码    单片机程序的入口其实还是0000H,在STARTUP.A51中初始化代码的最后一条指令才转向main函数执行 5.4  C语言与汇编语言的混合编程 5.4  C语言与汇编语言的混合编程   C语言调用汇编语言程序时,被调用函数(汇编语言函数)要在调用函数(C语言函数)所在文件中说明。对于汇编语言程序有以下要求  (1) 要使用SEGMENT伪指令定义可重定位的CODE段 (2) 要根据不同情况对函数名进行转换 (3) 须使用PUBLIC伪指令将被调用函数说明为外部可用函数 (4) 若有参数传递,按规则使用参数 (5) 若有返回值,按照规则存入寄存器 5.4  C语言与汇编语言的混合编程 函数首部 符号名 说明 void func( void ) FUNC 无参数传递或不含寄存器参数的函数名不作改变 void func( char ) _FUNC 带寄存器参数的函数名加“_”前缀 void func( void ) reentrant _?FUNC 可重入函数前加“_?”前缀 混合编程 例:编写汇编语言函数max,参数为两个8位无符号数,功能是求出其中的大数返回。   在C语言中可按以下的方式声明和调用 extern	unsigned char max(unsigned, unsigned); void main(void) {  	unsigned char	x,y;  	x = 130; y = 131; 	x = max(x,y); 	while(1); }   两个参数分别在R7和R5中传递到子程序,返回值应保存在R7中。 混合编程 PUBLIC	_MAX			;声明 MIXED	     SEGMENT	CODE	;定义一个可重定位的段 		RSEG		MIXED	;选择MIXED为当前段 _MAX:MOV	A, R7		     ;第一个参数 		CLR	C 		SUBB	A, R5	     ;减去第二个参数 		JNC	_MAX_RET  ;无借位,第一个参数值大 		MOV	A, R5	     ;有借位,第二个参数值大 		MOV	R7, A		;返回值在R7 _MAX_RET:	RET 		END 《单片机应用系统设计》教学课件 第5章 MCS-51 C语言程序设计 5.1  C语言与MCS-51单片机   C语言是一种通用的计算机程序设计语言,代码效率高,数据类型和运算符丰富,有良好的程序结构,适用于各种应用系统的程序设计,是目前使用较广的单片机编程语言。    本章重点介绍在单片机上使用MCS-51 C语言的特殊数据类型、存储模式、程序的结构、混合编程。 5.1.1  C语言程序开发过程   一
                
原创力文档
                        

文档评论(0)