- 1、本文档共99页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
3.6给以下C51程序每条语句作注释。#definebuff26.5main(){ intx,y;x=45;y=x*BUFF;printf(y=%d\n,y);}3.7编程定义符号常量count等于32,定义变量x、y、z为片内RAM定位的存储类型data的字符变量,a、b、c为存储类型bdata的片内可位寻址的位变量,d为指向int型xdata区的指针。3.8编制C51程序,将8051片内RAM30H单元和31H单元内容求和,结果计入32H单元。3.9编程将片外数据RAM从DATA1开始的100个单元的数据传送至片内数据RAM从DATA2开始的单元。3.10将汇编程序翻译成等效的C51程序:START: MOV A,#00H MOV PSW,#4FH MOV P0,#20H MOV R0,#30H MOV 40H,@R0 ADD A,40H SETB EA SETB P1.0 ACALL SUB SJMP $SUB: MOV R1,#64H CPL P1.0 DJNZ R1,SUB RET END 【例3-13】设x位于片内RAM30H单元,y位于片内RAM40H单元。编程实现y=解:main(){ charx,*R0,*y; R0=0×30; y=0×40; { x=*R0; if(x0) *y=1 if(x==0) *y=x/2 if(x0) *y=x }}【例3-14】采用递归调用求正数n的阶乘程序如下:intfactorial(n)intn;{intresult;if(n==0) result=1,else result=n*factorial(n--1); result(result);}main(){intx;for(x=0;xb;++x)printf(%d!=%d\n,x,factorial(x));}程序运行结果:0!=11!=12!=23!=34!=245!=120【例3-15】使用switch语句的分支程序。switch(n){case0;vr0();break;case1;vr1();break;case2;vr2();break;casemvrm();break;default;break;}相应汇编分支程序为: MOVA,#data MOVDPTR,#TABLE JMP@A+DPTR ;AJMP是2字节指令,A中内容为偶数TABLE: AJMPV0 ;A=0转 AJMPV1 ;A=2转 AJMPV2 AJMPVn3.5.3循环结构设计C51提供的循环语句有三种:while语句、do_while语句和for语句。1.while语句while语句的格式为:while(表达式){语句/*循环体*/}表达式是能够继续循环的条件,用大括号括起来的语句是循环体。如果表达式的值为“真”,就重复执行循环体语句;如果表达式的值为“假”,则退出循环体,执行下一条语句。while语句的流程图如图3-3所示。图3-3while语句流程图【例3-16】讨论下述语句的功能。while((P00×02)==0){}while后面的表达式是P0和00000010B按位与,如果P0.2为0则结果为0,循环条件成立,执行循环体内语句。但本例循环体内无语句,因此什么也不执行,继续将P0.2位是否为0测试下去。只有当P0.2=1时才离开循环。该语句的功能可用于不断地测试P0.2的状态,只要P0.2为低电平,测试将继续;只有P2.0变为高电平,才停止测试。【例3-17】求两个数的最大公约数。#includestdio.hintgcd(x,y)intx,y{ inttemper while(y!=0) { temper=x%y; x=y; y=temper; } return(x);}main(){intresult,a=12,b=8;printf(a=%d,b=%d,a,b);result=gcd(a,b);printf(Thegcdof%
文档评论(0)