通信学论文-C51语言应用编程的若干问题.doc通信学论文-C51语言应用编程的若干问题.doc

收藏 分享

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

通信学论文C51语言应用编程的若干问题摘要简要介绍了FRANKLINC51交叉编译器的特点,较详细地讨论了C51语言程序设计的基本技巧及其与汇编语言程序的混合编程、中断处理过程等实际问题,并给出了相应的处理程序。关键词FRANKLINC51编译器汇编语言结构化设计模块中断在研制单片机应用系统时,汇编语言是一种常用的软件工具。它能直接操作硬件,指令的执行速度快。但其指令系统的固有格式受硬件结构的限制很大,且难于编写与调试,可移植性也差。随着单片机硬件性能的提高,其工作速度越来越快,因此在编写单片机应用系统程序时,更着重于程序本身的编写效率。而FRANKLINC51交叉编译器是专为80C51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,而且开发出的系统易于维护,可靠性高,可移植性好,即使在代码的使用效率上,也完全可以和汇编语言相比,因此目前它已成为开发80C51系列单片机的流行工具。1C51语言程序设计的基本技巧C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。在程序设计过程中,要充分利用C51语言的预处理命令。对于一些常用的常数,如TRUE,FALSE,PI以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义#DEFINE或集中起来放在一个头文件中进行定义,再采用文件包含命令#INCLUDE将其加入到程序中去。这样当需要修改某个参量时,只须修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都作修改,从而有利于文件的维护和更新。现举例说明如下例1对于不同的单片机晶振,程序取不同的延时时间,而且可根据外界条件的变化修改延时时间的长短。对于这样的程序,可利用宏定义和条件编译来实现。程序如下DEFINEFLAG1IFDEFFLAG==1DEFINEFOSC6MDELAY10;ELIFFLAG==0DEFINEFOSC8MDELAY12;ELSEDEFINEFOSC12MDELAY20;ENDIFMAIN{FORI0;IDELAY;I;}这样源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的DELAY值,完成不同的目的。2C51语言与汇编语言程序的混合编程C51编译器能对C语言源程序进行高效率的编译,生成高效简洁的代码,在绝大多数场合采用C语言编程即可完成预期的目的。但有时为了编程直观或某些特殊地址的处理,还须采用一定的汇编语言编程。而在另一些场合,出于某种目的,汇编语言也可调用C语言。在这种混合编程中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错。下面就以力源公司的10位串行A/D转换器TLC1549为例说明C语言程序与汇编语言程序的调用。图1TLC1549管脚图1549的管脚图和时序图分别如图1和图2所示,假定DATAOUT接P10,接P11,CLOCK接P12。1549的具体特性请查阅有关资料。图2TLC1549时序图例2C语言程序与汇编语言程序的调用,其子程序如下PUBLICAD;入口地址SEG_ADSEGMENTCODE;程序段RSEGSEG_ADUSING0ADMOVR6,00MOVR7,00SETBP11ACALLDELAYCLRP11ACALLDELAYMOVR0,10RR0SETBP12NOPCLRP12DJNZR0,RR0ACALLDELAYMOV30H,R6;A/D转换的高;两位保存在R6中ACALLCIRMOVR6,30HSETBP12NOPCLRP12MOV30H,R6ACALLCIRMOVR6,30HMOVR0,8;A/D转换的低;8位保存在R7中RR2SETBP12NOPCLRP12MOV30H,R7ACALLCIRMOVR7,30HDJNZR0,RR2RETCIRCLRCMOVC,P10MOVA,30HRLCAMOV30H,ARETEND在以上程序中,函数的返回值为一无符号整型数,根据调用规则,返回值的高位必须在R6中,低位在R7中,这样才可保证数据的传递不出错。另外,在调用过程中,必须注意寄存器的入栈。这样在以后用到A/D转换时,在C语言中调用汇编语言子程序AD()即可。3C51中断处理过程C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下VOID函数名(VOID)[模式][再入]INTERRUPTNUSINGR其中N(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。R(0~3)代表第R组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。再入用于说明中断处理函数有无再入能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。例3设单片机的FOSC12MHZ,要求用T0的方式1编程,在P10脚输出周期为2MS的方波。用C语言编写的中断服务程序如下#INCLUDEREG51HSBITP1_0P10;VOIDTIMER0VOIDINTERRUPT1USING1{/T0中断服务程序入口/P1_0P1_0;TH01000/256;/计数初值重装/TL01000256;}VOIDMAINVOID{TMOD0X01;/T0工作在定时器方式1/P1_00;TH01000/256;/预置计数初值/TL01000256;EA1;/CPU开中断/ET01;/T0开中断/TR01;/启动T0/DO{}WHILE1;}在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。4结论C51编译器不但可以缩短单片机控制系统的开发周期,而且易于调试和维护。此外,C51语言还有许多强大的功能,如提供丰富的库函数供用户直接调用,完整的编译控制指令为程序调试提供必要的符号信息等等。总之,C51语言是广大单片机开发人员的强有力的工具。
编号:201312172050512194    类型:共享资源    大小:23.39KB    格式:DOC    上传时间:2013-12-17
  
2
关 键 词:
生活休闲 网络生活 精品文档 通信学论
  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:通信学论文-C51语言应用编程的若干问题.doc
链接地址:http://www.renrendoc.com/p-242194.html

当前资源信息

4.0
 
(2人评价)
浏览:3次
zhaozilong上传于2013-12-17

官方联系方式

客服手机:17625900360   
2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   

精品推荐

相关阅读

人人文库
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

网站客服QQ:2846424093    人人文库上传用户QQ群:460291265   

[email protected] 2016-2018  renrendoc.com 网站版权所有   南天在线技术支持

经营许可证编号:苏ICP备12009002号-5