当前位置:文档之家› 单片机第4章习题答案

单片机第4章习题答案

第4章习题答案
一、填空题
1.机器语言
2.机器汇编、手工汇编
3.AREA1=1000H、BUF=1004H、TIME=01H、ACK=1006H
4.(A)=4FH、(R0)=4BH、(R1)=E5H、(21H)=D8H、(22H)=4BH、(2FH)=E5H
二、简答题
1.什么叫伪指令?伪指令与指令有什么区别?
答:所谓伪指令又称为伪操作,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编时,由汇编程序处理的操作,它们可以完成如数据定义、分配存储器、指示程序结束等功能。

2.汇编语言的格式是怎样的?
汇编语言语句格式为:
标号:操作码操作数;注释
3.MCS-51系列单片机有哪些伪指令?它们的用途是什么?
(1)编起始地址命令ORG
功能:规定此命令之后的程序或数据的存放起始地址。

(2)定义字节伪指令格式:[标号:] DB X1,X2, (X)
功能:从指定地址开始,存放若干字节数据。

(3)字定义伪指令格式:[标号:] DW Y1,Y2,…,Yn
功能:从指定地址开始,存放若干字数据。

(4)汇编结束伪指令END
功能:该伪指令指出结束汇编,即使后面还有指令,汇编程序也不处理。

(5)赋值伪指令格式:标号 EQU 表达式
功能:将表达式的值(数据或地址)赋给标号。

(6)位定义伪指令格式:[标号] BIT 位地址
功能:将位地址赋给标号。

4.汇编语言程序设计分为哪几个步骤?
答:汇编语言程序设计一般要经过以下几个步骤:
(1)分析问题,明确任务
(2)确定算法
(3)画出程序流程图
(4)编写源程序
(5)汇编和调试
5.结构化程序设计有哪几种常用的程序结构?
答:顺序结构、分支结构、循环结构和子程序结构
6.子程序调用时,参数的传递方法有哪几种?
答:常用的参数传递方法有:工作寄存器或累加器、指针寄存器、堆栈和程序段等。

7.分析下列程序的功能。

X DATA 30H
Y DATA 32H
MOV A,X
JNB ACC.7,TRUE
CPL A
ADD A,#01H
TRUE:MOV Y,A
答:该段程序的功能是:当30H单元的最高位不为0时,则把30H单元的内容送32H 单元,当30H单元的最高位为0时,则把30H单元的内容求反加1后送32单元。

8.下列程序段汇编后,从3000H单元开始的各有关存储单元的内容是什么?
ORG 3000H
TAB1 EQU 3234H
TAB2 EQU 4000H
DB ‘START’
DW TAB1,TAB2,9000H
答:从3000H单元开始各单元的内容为:53H、54H、41H、52H、54H、32H、34H、40H、00H、90H、00H
三、应用题
1.
ORG 0100H
0100H:E530 MOV A,30H
0102H:30E703 JNB ACC.7,JING
0105H:F4 CPL A
0106H:2401 ADD A,#01H
0108H:F532 JING:MOV 32H,A
010AH:80FE SJMP $
2.编成将片内RAM50H、51H单元中的两个无符号中较小的数存于60H单元中。

ORG 1000H
START:CLR C
MOV A,50H
SUBB A,51H
JC NEXT
MOV A,51H
NEXT:MOV A,50H
MOV 60H,A
SJMP $
END
3.从片内RAM的22H单元开始有一无符号数据块,其长度在20H单元,找出数据块中的最小值,并存于片内RAM的21H单元。

ORG 2000H
CLR A
MOV R7,20H
MOV R0,#22H
LOOP:CLR C
SUBB A,@R0
JC NEXT
MOV A,@R0
NEXT: INC R0
DJNZ R7,LOOP
MOV 21H,A
SJMP $
END
4.试编一程序将内部RAM30H~3FH单元数据传送到外部RAM首址为0F00H的单元中去。

ORG 2000H
MOV R0,#30H
MOV R7,#10H
MOV DPTR,#0F00H
LOOP: MOVX A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
SJMP $
END
5.有两块数据分别在内部RAM 20H~29H、30H~39H,现将两块数据对换,试编程。

ORG 2000H
MOV R0,#20H
MOV R1,#30H
MOV R7,0AH
LOOP: MOV A,@R0
XCH A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,LOOP
SJMP $
END
6.编程实现:
X X<10
Y= X210≤X<15
2X X≥15
设x变量存于30H单元,y值存于31H单元。

ORG 1000H
CLR C
MOV A,30H
CJNE A,#10,NEXT1
NEXT1: JC NEXT2 ;x<10
CJNE A,#15,NEXT3
NEXT3: JC NEXT4 ;10≤x<15
RLC A
SJMP NEXT2
NEXT4: MOV B,A
MUL AB
NEXT2: MOV 31H,A
SJMP $
END
7.编程将内部RAM 30H中的压缩BCD码转换成ASCII码,并存入31H和32H单元。

ORG 1000H
MOV R0,#31H
MOV A,30H
ANL A,#0FH
ORL A,#30H
MOV @R0,A
INC R0
MOV A,30H
ANL A,#F0H
SWAP A
ORL A,#30H
MOV @R0,A
SJMP $
END
8.在片外2000H开始的单元中有100个有符号数,编程统计其中正数、负数、零的个数。

设在寄存器R0、R1和R2中分别存放正数、负数和零的个数。

ORG 3000H
MOV R7,#100
MOV DPTR,#2000H
CLR A
MOV R0,A
MOV R1,A
MOV R2,A
LOOP: MOVC A,@A+DPTR
CJNE A,#00,NEXT1
INC R2
SJMP NEXT3
NEXT1: JC NEXT2
INC R0
SJMP NEXT3
NEXT3: INC A
DJNZ R7,LOOP
SJMP $
END
9.从内部RAM 24H单元开始存放有30个用ASCII码表示的字符和数据,现要找B字符,如果找到字符就转移到其处理程序,若找不到B直至找完则停机。

试编程。

解:字符B的ASCII码值为66。

ORG 2000H
MOV R0,#24H
MOV R7,#30
MOV A,@R0
LOOP: CJNE A,#66,NEXT1
ACALL CHULI
NEXT1: INC R0
DJNE R7,LOOP
SJMP $
END
10.设有30个无符号数,依次存放在以BLOCK为首地址的片外RAM中,要求按照由小到大排序,并存入原存储区中。

ORG 1000H
SORT: MOV R1,#BLOCK
MOV R7,#30
CLR F0
LOOP1: MOV A,@R1
MOV R2,A
INC R1
CLR C
SUBB A,@R1
JC LOOP2
SETB F0
MOV A,R2
XCH A,@R1
DEC R1
XCH A,@R1
INC R1
LOOP2: DJNZ R7,LOOP1
JB F0,SORT
SJMP $
END
11.试编程将内部RAM 26H单元位2、4、6取反后送P1口。

ORG 1000H
MOV A,26H
XRL A,00010100
MOV P1,A
SJMP $
END
12.若单片机的晶振频率为6MHz,试编写一段延时子程序,其延时时间为500ms。

ORG 2000H
MOV R3,#10
DEL1: MOV R4,#200
DEL2: MOV R5,#60
DEL3: DJNZ R5,DEL3
NOP
DJNZ R4,DEL2 DJNZ R3,DEL1 RET。

相关主题