第4章单片机原理课后答案(最新整理)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题
1.C51特有的数据类型有哪些?
答:C51特有的数据类型有位型bit、特殊位型sbit、8位特殊功能寄存器型sfr和16位特殊功能寄存器型sfr16。
2.C51中的存储器类型有几种,它们分别表示的存储器区域是什么?
答:C51中的存储器类型有6种,分别表示的存储器区域是:
data:直接寻址的片内RAM低128B,访问速度快
bdata:片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问
idata:间接寻址访问的片内RAM,允许访问全部片内RAM
pdata:用Ri间接访问的片外RAM低256B
xdata:用DPTR间接访问的片外RAM,允许访问全部64KB片外RAM
code:程序存储器ROM 64KB空间
3.在C51中,bit位与sbit位有什么区别?
答:bit位类型符用于定义一般的位变量,定义的位变量位于片内数据存储器的位寻址区。定义时不能指定地址,只能由编译器自动分配。
sbit位类型符用于定义位地址确定的位变量,定义的位变量可以在片内数据存储器位寻址区,也可为特殊功能寄存器中的可位寻址位。定义时必须指明其位地址,可以是位直接地址,也可以是可位寻址的变量带位号,还可以是可位寻址的特殊功能寄存器变量带位号。
4.在C51中,通过绝对地址来访问的存储器有几种?
答:绝对地址访问形式有三种:宏定义、指针和关键字“_at_”。
5.在C51中,中断函数与一般函数有什么不同?
答:中断函数是C51的一个重要特点,C51允许用户创建中断函数。中断函数用interrupt m修饰符,m的取值为0~31,对应的中断情况如下:
0——外部中断0
1——定时/计数器T0
2——外部中断1
3——定时/计数器T1
4——串行口中断
5——定时/计数器T2
中断函数需要注意如下几点。
(1)中断函数不能进行参数传递
(2)中断函数没有返回值
(3)在任何情况下都不能直接调用中断函数
(4)如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同
(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容
(6)C51编译器从绝对地址8m+3处产生一个中断向量
(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明
6.按给定的存储类型和数据类型,写出下列变量的说明形式。
(1)在data区定义字符变量val1。
char data varl;
(2)在idata区定义整型变量val2。
int idata var2;
(3)在xdata区定义无符号字符型数组val3[4]。
unsigned char xdata val3[4];
(4)在xdata区定义一个指向char类型的指针px。
char xdata *px;
(5)定义可寻址位变量flag。
bit fllag;
(6)定义特殊功能寄存器变量P3。
sfr P3=0xb0;
(7)定义特殊功能寄存器变量SCON。
sfr SCON=0x98;
(8)定义16位的特殊功能寄存器T0。
sfr16 T0=0x8a;
7. 下列程序段汇编后,从2000H单元开始的单元内容是什么?
ORG 2000H
TAB:DB 01H,34H,’a’,’C’
DW 5567H,87H
(2000H)=01H; (2001H)=34H; (2002H)=61H; (2003H)=43H;
(2004H)=55H; (2005H)=67H; (2006H)=00H; (2007H)=87H;
8.编程实现将片外RAM的20H~30H单元的内容,全部移到片内RAM的20H单元的开始位置,并将原位置清零。
程序:
MOV R0,#20H
MOV DPTR,#20H
MOV R2,#11H
LOOP:MOVX A,@DPTR
MOV @R0,A
MOV A,#00
MOVX@DPTR,A
INC DPTR
INC R0
DJNZ R2,LOOP
SJMP$
9.编程将片外RAM的1000H单元开始的50个字节的数据相加,结果存放于R7R6中。
MOV DPTR,#1000H
MOV R2,#50
MOV R7,#00
MOV R6,#00
LOOP:MOVX A,@DPTR
ADD A,R6
MOV R6,A
MOV A,R7
ADDC A,#0
MOV R7,A
INC DPTR
DJNZ R2,LOOP
SJMP$
10.编程实现R4R3⨯R2,结果存放于R7R6R5中。
程序:
ORG0100H
MUL1:MOV A,R2
MOV B,R3
MUL AB ;R2⨯R3,结果的低字节直接存入积的R5
MOV R5,A ;结果的高字节存入R6中暂存起来
MOV R6,B
MUL2:MOV A,R2
MOV B,R4
MUL AB ;R2⨯R4,结果的低字节与R6相加后,再存入R6中
ADD A,R6
MOV R6,A
MOV A,B ;结果的高字节加上进位位后存入R7中
ADDC A,#00
MOV R7,A
SJMP$
11.用查表的方法实现将R2中一位十六进制数转换成ASCII码并放回R2。
程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)
C16STASC:MOV DPTR,#TAB
MOV A,R2
MOVC A,@A+DPTR
MOV R2,A
RET
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,391H,41H,42H,43H,44H,45H,46H
12.设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。
参考程序:
ORG 0000H
LJMP MAIN
ORG 0100H ;主程序
MAIN:MOV A,#01H
LOOP:MOV P1,A
CALL DELAY
RL A