西华大学单片机第二次作业Word下载.docx
《西华大学单片机第二次作业Word下载.docx》由会员分享,可在线阅读,更多相关《西华大学单片机第二次作业Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
var2;
D
(C)在内部RAM(含52子系列的高128字节)定义了一个无符号浮点变量;
(D)在片外RAM0-255地址内定义了一个16位的无符号整型变量;
7.C51中,unsigned
charvector[3];
E
(C)在内部RAM(含52子系列的高128字节)定义了3个浮点变量;
(D)在片外RAM低256字节内定义了一个有符号的整型变量;
(E)在内部RAM定义一个无符号的每个元素为一字节的有三元素的数组。
8.若定义了charx;
charX;
则x与X完全是两个
的变量。
(A)不同
(B)相同
(C)外部
(D)无符号
9.定义了charthird[]={“HELLO”};
则third是一个
元素的字符型数组。
(A)4
(B)5
(C)6
(D)7
10.定义了charsecond[5]={‘H’,’E’,’L’,’L’,’O’};
则second是一个
11.以下能正确定义一维数组的选项是(B)。
A、inta[5]={0,1,2,3,4,5};
B、chara[]={0,1,2,3,4,5};
C、chara={'
A'
'
B'
C'
};
D、inta[5]="
0123"
;
12.C51中,以下叙述中错误的是(C)
A、数组一般会存放在外部RAM中;
B、指针中,数组名代表的是数组所占存储区的首地址;
C、程序运行时,数组元素的下标超出所定义的下标范围时,单片机应用系统将给出“下标越界”的出错信息;
D、可以通过赋初值的方式C51编译器确定数组元素的个数。
13.下列计算机语言中,CPU能直接识别的是(D
)。
A、自然语言
B、高级语言
C、汇编语言
D、机器语言
二、判断正误
1、c51中若一个函数的返回类型为void,则表示其没有返回值。
(T)
2、51单片机定时器与计数器的工作原理均是对输入脉冲进行计数。
(T)
3、51单片机中已有的SFR中凡是能被8整除的地址,都具有位寻址能力。
(
T
)
4、MCS-51单片机的外部数据存储器用来存放程序和常数的。
(
F)
5、MCS-51单片机的程序存储器是用来存放程序和常数的。
6、51单片机中所有串口中断标志都要由硬件清0。
(T
7、特殊功能寄存器的名字,在C51程序中,需全部大写。
8、sbitLED1=p3^3;
这条c51语句是正确的。
F
)
9、#include
<
reg51.h>
与#include
“reg51.h”基本功能是等价的。
(F)
10、sbit不可以用于定义内部RAM的可位寻址区,只能用在可位寻址的SFR上。
(F
11、在对某一函数进行多次调用时,系统会对相应的局域变量重新分配存储单元。
F
12、在C语言的复合语句中,只能包含可执行语句。
(F)
13、自动变量属于局部变量。
F)
14、c51中定义为char的变量一定是英文字母如a、b、c、d等。
(F
15、所有定义在主函数之前的函数无需进行声明。
16、汇编语言中ORG表示它后面程序的起始地址。
(T
17、MCS-51的相对转移指令最大负跳距是127B。
18、若TMOD中的GATE=1,则需要两个信号控制定时器的的启停。
T
19、MCS-51应用系统可以没有复位电路。
20、全局变量的有效范围是定义变量的位置开始到本文件结束。
(T)
21、ADC0832采用的是IIC总线方式。
22、DAC0832是一种AD转换芯片。
(F
23、P1作为通用IO口使用时必须加上拉电阻。
24、若一个函数的返回类型为unsignedchar,则表示其没有返回值。
25、51单片机中定时器与计数器其基本的工作原理相同,只是计数脉冲的来源不同。
26、ADC0809是8位逐次逼近式模/数转换器。
(T)
27、MCS-51的程序存储器是用来存放程序的。
28、MCS-51的特殊功能寄存器分布在60H~80H地址范围内。
29、51单片机片外RAM与并口外部设备统一编址时,使用不同的输入/输出指令。
30、使用89c51且EA=1时,仍可外扩程序存储器。
三、填空题
1.数据指针DPTR在用汇编语言编程时可以看作是一个
16
位的寄存器。
2.完成的堆栈操作的原则是
先进后出
3.在基址加变址寻址方式中,以
A作变址寄存器,以
DPTR或
PC
作基址寄存器。
4.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的
地址
5.在MCS-51中,PC和DPTR都用于提供地址,但PC只是为了访问
程序存储器提供地址,而DPTR可为访问
数据和程序
存储器提供地址。
6.10%3;
结果为:
1
7.x=5;
执行if(x==3){x=4;
}后,x=
5
8.a=0x4b,执行a=a<
<
2后,a=
0x2c
;
CY=
9.若a=0x4b;
b=0xc8;
则a||b的值为:
10.若a=0x4b;
则a|b的值为:
0xcb
11.若a=10,则!
a的值为
0
12.若a=10,b=20,则a&
&
b的值为
13.若a=10,b=20,则a||b的值为
14.若a=0,b=20,则a&
15.a+=b;
等价于a=
a+b;
16.x*=a+b;
等价于x=x*(a+b);
17.a&
=b;
等价于a=a&
b;
18.若charx;
则x=(char)0xb030;
后,x的值为
0x30
19.设X=0x5AH,Y=0x36,则X|Y运算结果为_0x7e_;
X与Y的“异或”运算为__0x6c__。
20.若定义了一个指针变量unsignedchar
xdata
*datayc;
它表示:
指针变量yc被分配在片内
RAM,指针指向一个无符号字符,该无符号字符存放于
外部RAM
四、阅读、编写简单程序
1.设(A)=0FH,(R0)=30H,内部RAM(30H)=0AH,(31H)=0BH,(32H)=0CH请写出在执行各条列指令后,所示单元的内容:
MOVA,@R0
;
(A)=OAH
MOV@R0,32H
(30H)=OCH
MOV32H,A
(32H)=OAH
MOVR0,#31H
(R0)=31H
MOVA,@R0
(A)=
OBH
2.用数据传输指令来完成下列要求的数据传送:
(1)外部RAM1000H单元的内容送内部RAM20H;
(2)程序存储器ROM2000H单元的内容送到R1;
(3)程序存储器2000H单元的内容送内部RAM20H;
(4)程序存储器2000H单元的内容送外部RAM30H;
(5)外部RAM2000H单元的内容送外部RAM1000H。
MOVDPTR,#1000H
MOVXA,@DPTR
MOV20H,A
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
MOVR1,A
MOVDPTR,#0030H
MOVX@DPTR,A
3.请定义一个含year(unsignedint)、month(unsignedchar)、day(unsignedchar)的数据结构,并定义该结构的一个结果变量data1。
解:
structdata
{
unsignedcharmonth;
unsignedcharday;
unsignedintyear;
}idatadata1;
4.若定义了一个结构变量data1如下:
请按2010年11月20日给data1赋值。
data1.year=2010;
data1.month=11;
data1.day=20;
5.如定义char*px;
charx=11,y;
并运行了px=&
x;
请注释执行下列语句后的结果:
y=*px+5;
//把x的内容加5并赋给y,则y=16。
y=++*px;
//px的内容加1后赋给y,则y=12。
//y=++*px;
因px是x的地址,px的内容就是x;
相当于y=++(*px);
x=11;
y=*px++;
//相当y=*px;
px++;
这时,y=11,但指针px随后+1。
6.判断下列关系表达式或逻辑表达式的运算结果(1或0)。
(1)10==9+1;
答:
1
(2)0&
0;
(3)10&
8;
(4)6||O;
(5)!
(3+2);
(6)设x=10,y=9,x>
=88&
y<
=x;
答案:
7.设x=4,y=8,说明进行下列运算后,x,y和z的值分别是多少(用16进制表达)?
(1)z=(x++)*(--y);
x=5;
y=7;
z=0x1c;
(2)z=(++x)-(y--);
z=0xfd;
(3)z=(++x)*(--y);
z=0x23;
(4)z=(x++)+(y--);
z=0x0c;
8.写出下列表达式运算后a的值,设运算前a=10;
n=9;
a、n已定义为8位整型变量。
(1)a+=a;
(2)a*=2+3;
(3)a%=(n%=2);
(1)20;
(2)50;
(3)0;
五、问答题
1.在单片机中使用高级语言c51与汇编语言相比有何优点?
答:
C51与汇编语言相比,有如下优点:
(1)对单片机的指令系统不必深入了解(但对51单片机的存贮器空间结构需深入了解);
(2)寄存器分配、不同存贮器的寻址等细节可由编译器管理;
(3)程序有规范的结构,可分解成各种子函数,有利于程序的结构化;
(4)库文件中包含许多标准子程序,具有较强的数据处理能力;
(5)具有方便的模块化编程技术,使程序很容易移植。
因此,单片机编程人员从使用汇编语言到C语言是大势所趋、必然的发展规律。
2.目前最常用的C51编译器是什么?
它的主要作用?
单片机的C语言采用C51编译器,目前最常用的是KeilC51。
C语言源程序经过C51编译器编译、L51(或BL51)连接/定位后生成.BIN和.HEX的目标程序。
3.C51中有哪些数据存储类型,简述它们在单片机系统存储空间的位置。
见下表4.2:
表4.2
C51存储类型与MCS-51存储空间的对应关系
名
存储空间位置
位数
数据范围
说明
data
直接寻址片内RAM
8
0~127
片内RAM00-7FH的128个字节,访问速度最快
bdata
可位寻址片内RAM
0/1
位寻址片内RAM20~2FH中的位,允许位与字节混合访问
idata
寄存器间接寻址片内RAM
0~255
00-7FH的128个片内RAM及52子系列的高端80-FFH的128字节,共256个字节,采用寄存器间接寻址方式:
MOVA,@Ri
pdata
片外页RAM
寻址片外RAM低256字节,由MOVXA,@Ri访问
xdata
片外RAM
0~65535
片外RAM全部64KB,由MOVXA,@DPTR访问
code
程序ROM
ROM区全部64KB,由MOVCA,@A+DPTR访问
4.C51定义了哪些存储器模式,对每种模式略作说明。
C51的存储器模式有SMALL、COMPACT和LARGE,说明见下表:
存储模式
SMALL
默认的存储类型是data、idata(52子系列),参数及局部变量放入可直接寻址片内RAM的用户区中。
另外所有对象(包括堆栈),都必须嵌入片内RAM。
COMPACT
默认的存储类型是pdata,参数及局部变量放入分页的外部数据存储区,通过@R0或@R1间接访问,栈空间位于片内数据存储区中
LARGE
默认的存储类型是xdata,参数及局部变量直接放入片外数据存储区,使用数据指针DPTR来进行寻址。
用此数据指针进行访问效率较低,尤其对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度
5.变量的数据类型与存储区域有何关系?
变量存储区域与哪些因素有关?
KEILC51是面向51系列单片机及其硬件控制系统的开发工具。
它定义的任何数据类型必须以一定的存储区域的方式定位在51单片机的存储区中,否则便没有任何的实际意义。
该编译器通过将变量、常量定义成不同的存储区域(data,bdata,idata,pdata,xdata,code)的方法,将它们定位在不同的存储区中。
51系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并有各自的寻址方式。
目前51系列单片机在物理上有四个存储空间:
1,片内程序存储空间;
2,片外程序存储空间(几乎没有用户选择这种方式了);
3,片内数据存储空间;
4,片外数据存储空间。
片内数据存储器。
51单片机片内数据存储器可划分为两大区域:
00H~7FH为片内低128字节RAM区;
80H~FFH为特殊功能寄存器区(SFR)。
地址为00H~7FH的低128字节片内RAM区又可划分为三个区域:
一,工作寄存器区:
地址(00H~1FH)工作寄存器区由4个寄存器组成:
0组(00H~07H),1组(08H~0FH),2组(10H~17H),3组(18H~1FH),每个寄存器组含有8个工作寄存器:
R0,R1,R2,R3,R4,R5,R6,R7,共有32个工作寄存器。
二,可位寻址区:
51系列单片机RAM的可位寻址区时字节地址位20H~2FH的16字节单元,共128位。
三,用户RAM区:
51系列单片机片内RAM的用户RAM区地址位30H~7FH。
堆栈也可以设置在这里。
存储区域(也称存储类型),当我们那使用存储区域类型data,bdata定义常量和变量时,Cx51编译器会将它们定位在片内数据存储区中(片内RAM),不标注默认是data区域类型。
当使用code存储类型定义数据时,Cx51编译器会将其定义在代码空间(ROM或者flash)。
当使用xdata存储区域类型定义常量或变量时,Cx51编译器将其定位在外部数据存储空间(片外RAM)。
见下表:
uchardatax和dataucharx相等价都是在片内ram区分配一个字节的变量,但是对于指针变量的声明,因涉及到指针变量本身的存储位置和指针所指向的存储区位置不同而进行相应的存储区类型关键字设置是要注意的。
6.2C51中,对于int类型数组,能直接用数组名对数组进行整体输入或输出吗?
所谓整体输入输出就是可以一次过全部输入或输出数组的全部元素。
C51中能够用数组名对数组进行整体输入或输出的就只有字符串数组,int类型数组不是字符串数组,只能对数组元素输入或输出,不能直接用数组名对数组进行整体输入或输出。
7.C51中,什么是局部变量和全局变量?
有何特点
从变量的作用范围来区分,变量可以被分为局部变量和全局变量。
局部变量在函数内部定义,又称为内部变量。
函数的形式参数属于局部变量。
局部变量只能在被定义它的函数中使用,不能被其他函数使用。
局变量被定义时若没有初始化,其值是不确定的;
各个函数内部的局部变量可以同名而互不影响。
全局变量在函数外面定义,又称为外部变量。
每个函数都可以使用全局变量,也就是说,全局变量对所有函数都是可见的,而局部变量只对定义它的函数才是可见的。
全局变量被定义时若没有初始化,其值为0。
在一个函数内部,当一个局部变量与一个全局变量同名时,全局变量不起作用,局部变量起作用。