80C51的C语言程序设计.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 10.4.2 基于存储器的指针 定义时就指定它所指向的对象的存储器类型 指针占1个字节(idata *,data *,pdata *)或2个字节(code *,xdata *) 基于存储器指针定义示例: char data *str; /* 指针指向的char型数据存于data 空间 */ int xdata *num; /* 指针指向的int型数据存于xdata 空间 */ 基于存储器的指针长度比一般指针短,可以节省存储器空间,运行速度快,但它所指对象具有确定的存储器空间,兼容性不好。 * * 10.5 C51的函数 10.5.1 C51函数的定义 一般形式: 返回值类型 函数名(形式参数列表)[编译模式][reentrant][interrupt n][using n] { 函数体 } 编译模式为SMALL、COPACT或LARGE reentrant用于定义可重入函数 interrupt n 用于定义中断函数,n为中断号,可以为0~31 using n 确定工作寄存器组,取值为0~3 * * 10.5.2 C51函数的调用与参数传递 主调函数要向被调函数传递所需的参数 传递给被调函数的数据称为实际参数,即实参 实参向形参的传递是单向的 参数传递可以采用寄存器、固定存储器位置方式 参数传递 寄存器参数传递 传递的参数 char、1字节指针 int、2字节指针 long、float 一般指针 参数1 R7 R6、R7 R4~R7 R1、R2、R3 参数2 R5 R4、R5 R4~R7 R1、R2、R3 参数3 R3 R2、R3 R1、R2、R3 * * SMALL模式下,在内部RAM中完成 COMPACT模式下,在外部RAM中完成 LARGER模式下,在外部RAM中完成 固定存储器位置参数传递 80C51单片机不采用堆栈传递参数。但C51提供一种模拟堆栈,从而支持可重入函数的递归调用。 10.5.3 C51的库函数 常用的C51库函数参见附录B.2 * * 4.3.1 顺序程序 (无分支、无循环) 基本程序结构 【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。 * * ORG 0040H START:MOV A,21H ;取十位ASCII码 ANL A,#0FH ;保留低半字节 SWAP A ;移至高半字节 MOV 20H,A ;存于20H单元 MOV A,22H ;取个位ASCII码 ANL A,#0FH ;保留低半字节 ORL 20H,A ;合并到结果单元 SJMP $ END * * #include “reg51.h” void main(){ unsigned char a,b,x,*p; p=0x21; a=*p; a=0x0f; a=4; p++; b=*p; b=0x0f; x=a|b; p=0x20; *p=x; while(1); } * * 4.3.2 分支程序 【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。 * * ORG 0040H START:MOV A,30H ;取x至累加器 JZ NEXT ;x = 0,转NEXT ANL A,#80H ;否,保留符号位 JZ DONE ;x 0,转结束 MOV A,#05H ;x 0处理 ADD A,30H MOV 30H,A ;X+05H送Y SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H送Y DONE:SJMP DONE END * * 4.3.3 循环程序 【例4-4】将内部RAM的30H至3FH单元初始化为00H。 ORG 0040H MAIN:MOV R0,#30H ;置初值 MOV A,#00H ; MOV R7,#16 ; LOOP:MOV @R0,A ;循

文档评论(0)

wei1155 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档