第4章单片机的C51语言题解_第1页
第4章单片机的C51语言题解_第2页
第4章单片机的C51语言题解_第3页
第4章单片机的C51语言题解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 单片机的C51语言习题1C语言的优点是什么?C程序的主要结构特点是什么?答:C语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器资源和处理端口数据,可以直接驱动单片机的所有资源。C程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文件组成。文件类型包括头文件和C语言源文件,也可以是汇编语言文件,C程序可与汇编语言混合编程。2C51语言的变量定义包含哪些关键因素?为何这样考虑?答:C语言的变量定义格式如下:存储种类数据类型存储类型变量名其中:存储种类与标准C语言相同,包括:自动型(auto)、外部型

2、(extern)、静态型(static)、寄存器型(register)。数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long),浮点型(float),双精度型(double)外,还有二进制位型(bit),特殊功能寄存器型(sfr),SFR可位寻址的位类型(sbit)。存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间接寻址区(idata),片外RAM页寻址区(pdata),片外RAM区(xdata)、ROM区(code)。只所以比标准C语言多了存储类型,就是因为MCS51单片机的存储结构中有四个物理存储空间(片内RAM、片内ROM

3、,片外RAM,片外ROM),三个逻辑地址空间(片内RAM,片外RAM,ROM),而且有多种寻址方式(直接寻址、间接寻址、页面寻址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。3C51与汇编语言的特点各有哪些?怎样实现两者的优势互补?答:C51是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、维护;库函数丰富,编程工作量小,可使产品开发周期短;具有机器级控制能力,功能很强,适合于嵌入式系统开发;汇编指令无关,易于掌握,上手快。汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编语言程序可能比C语言程序效率高。缺点是对程序员要求高,必须对单片

4、机的硬件结构非常熟悉才能编程,不便于编写比较复杂的程序。可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用C语言编写,两者混合编程就可以实现优势互补。4指出下面程序的语法错误: #include main() int a=7,C ; a=C; delay(10); void delay(); cgar i; for(i=O; i=255; ”+”); 答: #include main() void delay();int a,C=8; a=C; delay(10); void delay() unsigned char i;/字符型应该是unsigned char for(i=O; i

5、=255; i+);/ ”+”应改成i+ 5定义变量a,b,c,其中a为内部RAM的可位寻址区的字符变量,b为外部数据存储区浮点型变量,c为指向 int 型 xdata 区的指针。答:char bdata a; float xdata b; int xdata *c;6编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(任意位置)。解:方法一:用嵌入式汇编语言实现#includevoid main()#pragma asmMOVA,20H MOVB,35HMUL ABMOVDPTR,#1234HMOVXDPTR,AINCDPTRMOVA,BMOVXDPTR

6、,A#pragma endasm方法二:单用C语言编程实现#include #includeint movdata(char);void main() unsigned int xdata x; unsigned char *ptr,a,b; ptr=0x25; a=*ptr; ptr=0x30; b=*ptr; x=a*b;78051的片内数据存储器25H单元中存放有一个010的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存中。解:方法一:用C语言与汇编语言混合编程实现/用C语言编写的主函数MAIN.C#include#includechar getdata(

7、char);void main() char a=0x25,c; float f; c=getdata(a); f=sqrt(c); ;用汇编语言编写的取数据子函数,只有一个地址参数在R7中,返回值为指定地址单元中的内容,用R7返回主函数。PUBLIC _GETDATADESEGMENT CODERSEGDE_GETDATA:MOVA,R7 ;取地址参数MOVR0,A MOVA,R0MOVR7,A;返回地址单元中的内容EXIT: RETEND方法二:单用C语言编程实现/MAIN.C#include#includeint movdata(char);void main() char n; cha

8、r *ptr; float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30; *ptr2=f; 8将外部RAM 10H15H单元的内容传送到内部RAM 10H15H单元。解:方法一:采用C语言与汇编语言混合编程/用C语言编写的主函数MAIN.C#includechar movdata(char,char);void main() char a=0x10,b=0x06; movdata(a,b);用汇编语言编写的移动数据子函数MOVDATA,其中第一个参数在R7中为首地址,第二个参数在R5中为字节数PUBLIC _MOVDATADES

9、EGMENT CODERSEGDE_MOVDATA:MOVA,R7 ;取参数MOVR0,A LOOP:MOVXA,R0MOVR0,AINCR0DJNZR5,LOOPEXIT: RETEND 方法二:单用C语言编程实现/MAIN.C#includevoid main() char n=6; char *ptr1=0x10; char xdata *ptr2; ptr2=0x10; while(n-) *ptr1+=*ptr2+; 9内部RAM 20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。解:方法一:#includevoid main() unsigned int *ptr;/设置一个内部RAM指针 unsigned int x,y,z; ptr=0x20;/指向0x20单元 x=*ptr;/取第一个数 ptr=0x22;/指向0x22单元 y=*ptr;/取第二个数 z=(xy)?x:y;/将两数中的较大者赋给z ptr=0x24;/指向地址为0x24的目标单元 *ptr=z;/将大数存入目标单元方法二:#include#includevoid main() unsigned int x,y,z; x=DBYTE0X20*256+DBYTE0X21; y=DBYTE0X22*256+DBYTE0X23; z=(xy)?x:y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论