第3章单片机编程语言分解.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
②为了能对汇编进行封装还要在项目中加入相应的封装库文件, 在该例项目中编译模式是小模式,所以选用C51S.LIB,这也是最常用的,这些库文件是在KEIL安装目录下的LIB目录中,即将“Keil\C51\Lib\C51S.Lib”加入工程中,该文件必须作为工程的最后文件,加好后就可以顺利编译了,如图3- 15所示。 2)控制命令SRC控制 本方式最为灵活简单,先用C51编写代码,然后用SRC控制命令将C51文件编译生成汇编文件(. SRC),在该汇编文件中对要求严格的部分进行修改,保存为汇编文件.ASM,再用A51进行编译生成机器代码。 3)模块间接口 本方式,汇编语言程序部分和C51程序部分位于不同的模块,或不同的文件,通常由C51程序模块调用汇编语言程序模块的变量和函数,例如调用汇编语言编写的中断服务程序。 C51模块和汇编模块的接口比较简单,分别用C51和A51对源文件进行编译,然后用L51连接obj文件即可。模块接口间的关键问题是C51函数与汇编语言函数之间的参数传递。C51中有两种参数传递方法:(1)通过寄存器传递;(2)通过固定存储区传递。 3.4.3.2 中断程序的编写 为响应中断请求而进行中断处理的程序称为中断程序。由中断初始化程序和中断服务程序两部分组成。 中断初始化程序的位置位于主程序中,主要包括选择外部中断的触发方式、开中断、设置中断优先级等。 参考的程序结构如下: #include reg52.h void main( ) { //主函数 中断初始化; } void int0( ) interrupt 0 using 0 { //外中断0的中断服务函数 中断服务; } 3.4.3.3 STC89C52数据传送C51编程举例 就本章例3-31改用KEIL C51语言编程实现:设单片机片内存储器存储区首地址为30H,片外存储器存储区首地址为3000H,存取数据字节个数16个,并将片内存储区的这16个字节的内容设置为01H~10H,将片内首地址为30H开始的16个单元的内容传送到片外首地址为3000H开始的数据存储区中保存。 程序代码如下: #includereg52.h #define LENTH 16 unsigned char idata dADDR[LENTH] _at_ 0x30; unsigned char xdata xADDR[LENTH] _at_ 0x3000; void main(){ unsigned int i; for(i=0;iLENTH;i++) dADDR[i]=i+1; for(i=0;iLENTH;i++) xADDR[i]=dADDR[i]; } 特别说明:unsigned char idata dADDR[LENTH] _at_ 0x30和unsigned char xdata xADDR[LENTH] _at_ 0x3000是使用_at_定义的两数组,其绝对地址分别是0x30和0x3000,用idata和xdata区别片内和片外存储区。 在Keil环境下,用Debug调试该程序,打开Registers窗口,使用单步调试(Step),观察寄存器(Rn、A、DPTR、PSW)内容的变化;同时打开Memory窗口,输入I:0x30或X:0x3000,使用单步调试(Step),观察内部数据区30H-3FH单元内容以及片外数据区3000H-300FH内容的变化情况。 * * 3.4.2.3 C51的位变量定义 由于STC89C52能够进行位操作,C51扩展了“bit”数据类型用来定义位变量,这是C51与标准C的不同之处。C51中位变量bit的具体定义如下: 1. 位变量的C51定义方法 C51通过关键字“bit”来定义位变量,格式为: bit bit-name ; 例如:bit ov-flag ;/* 将ov-flag定义为位变量*/ 2. C51程序函数的“bit”参数及返回值 C51程序函数可以包含类型为“bit”的参数,也可将其作为返回值。例如: bit func(bit b0, bit b1); /* 位变量b0,b1作为函数func的参数*/ { …… return(b1); /* 位变量b1作为函数的返回值*/ } 3. 位变量的限制 位变量不能用来定义指针和数组。例如: bit *ptr ;/* 错误,不能用位变量来定义指针*/ bit a-array[ ] ;/* 错误,不能用位变量来定义数组*/ 在定义位变量时,允许定义存储类型,位变量都被放入一个位段,此段总是位于STC89C52片内RAM中,因此其存储器类型

文档评论(0)

w6633328 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档