- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章思考题和习题解答
第十章 思考题和习题解答
1. C51语言和汇编语言相比有什么优点?
答:使用C51语言进行嵌入式系统的开发,有着汇编语言所不可比拟的优势:
① 编程调试灵活方便;
② 生成的代码编译效率高;
③ 模块化开发;
④ 可移植性好;
⑤ 便于项目的维护;2.简述单片机C语言的特点
答:单片机的C语言的特点主要体现在以下几个方面:
① 无需了解机器硬件及其指令系统,只需初步了解MCS-51的存储器结构;
② C51能方便的管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题,但对硬件控制有限;而汇编语言可以完全控制硬件资源;
③ C51在小应用程序中,产生的代码量大,执行速度慢;但在较大的程序中代码效率高;
④ C51程序由若干函数组成,具有良好的模块化结构,便于改进和扩充;
⑤ C51程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差;
⑥ C51有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率;
⑦ 使用汇编语言编制的程序,当机型改变时,无法直接移植使用,而C语言程序是面向用户的程序设计语言,能在不同机型的机器上运行,可移植性好。3.C51编译器支持哪些变量类型?
答:C51编译器支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。4.C51 的data、bdata、idata 有什么区别?
答:data、bdata、idata是表明数据的存储类型,
data是指片内RAM的低128字节,可在一个周期内直接寻址;
bdata是指片内RAM的位寻址区,16字节;
idata是指片内RAM的256字节,必须采用间接寻址。5.试说明xdata型的指针长度为何要用2个字节。
答:xdata的地址范围为0x0000到0xFFFF(共64K),它需要两个字节记录,216=64K。
6.把带有条件运算符的表达式max=(ab)?a:b改用if-else语句来写。
解:if(ab)
max=a’
else
max=b;7~9题答案见课本中相关知识10.用C51编程,将外部RAM的30—35H单元的内容传送到内部RAM的30~35H.
解:
#includeabsacc.h
main()
{
char i;
for(i=0x30;i0x36;i++)
DBYTE[i]=XBYTE[i];
}11.设单片机振荡频率为12MHz,试用51编写一个延时1S的延时子程序。
解:
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h0;h--)
for(i=4;i0;i--)
for(j=116;j0;j--)
for(k=214;k0;k--);
}
产生的汇编
C:0x0800 7F05 MOV R7,#0x05
C:0x0802 7E04 MOV R6,#0x04
C:0x0804 7D74 MOV R5,#0x74
C:0x0806 7CD6 MOV R4,#0xD6
C:0x0808 DCFE DJNZ R4,C:0808
C:0x080A DDFA DJNZ R5,C:0806
C:0x080C DEF6 DJNZ R6,C:0804
C:0x080E DFF2 DJNZ R7,C:0802
C:0x0810 22 RET
12.用C51编程一个控制程序,让接在P1.0引脚上的发光二极管闪烁发光。
解:程序如下:
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
sbit P1_0=P1^0; //延时程序,由Delay参数确定延迟时间
void mdelay(uint Delay)
{ uint i;
for(;Delay0;Delay--)
{ for(i=0;i124;i++)
{;}
}
}
void main()
{ for( ; ; )
{ P1_0=!P1_0; //取
文档评论(0)