单片机原理与应用练习题3答案

更新时间:2024-03-24 10:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

练习题3答案

1. 简述下列基本概念:指令,指令系统,机器语言,汇编语言。 答:指令是单片机CPU执行某种操作的命令。

指令系统是一台计算机所能执行的指令集合。

机器语言即二进制代码语言,是计算机可以直接识别。

汇编语言是用助记符、字符串和数字等来表示指令的程序语。

2. 简述AT89S51单片机的指令格式 答:该单片机的指令由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作数则是指令操作的对象,操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。指令格式一般为:

[ 标号:] 操作码 [操作数1][,操作数2][,操作数3] [;注释]

3. 简述AT89S51的寻址方式和所能涉及的寻址空间 答:共有7种寻址方式,见表3-2。

分别是:(1)寄存器寻址:寻址范围为通用寄存器组,共4组32个,但只能使用当前寄存器

表3-2 寻址方式及相应的寻址存储器范围 寻 址 方 式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 程序存储器ROM 片内RAM低128B,特殊功能寄存器 工作寄存器R0~R7,A, C, DPTR,AB 片内RAM低128B,片外RAM 程序存储器ROM(@A+DPTR,@A+PC) 程序存储器ROM (相对寻址指令的下一指令PC值加-128~+127) 片内RAM的20H~2FH字节地址中所有的位,可位寻址的特殊功能寄存器 寻 址 存 储 器 范 围 组,因此使用前需要通过对PSW种的RS1、RS0位的状态进行设置;(2)直接寻址:寻址范围为内部RAM,包括低128位用户RAM区和高128位专用寄存器;(3)寄存器间接寻址:寻址范围为内部RAM低128位,外部RAM 64KB(低256单元可以使用DPTR和R0、R1作为间接寻址寄存器,而其他单元只能用DPTR作为间接寻址寄存器);(4)立即寻址:直接给出立即数,不涉及寻址空间;(5)变址寻址:只对程序寄存器进行寻址;(6)相对寻址:以PC的内容为基值,加上指令机器代码中‘相对地址’形成新的PC值转移;(7)位寻址:寻址空间包括内部RAM位寻址区(20~2FH)和专用寄存器的可寻址位。

4. 要访问片外程序存储器和片外数据存储器,应采用哪些寻址方式?

答:访问片外程序存储器采用变址寻址方式,片外数据存储器采用寄存器间接寻址方式,且用DPTR可以访问64KB,而用R0或者R1只可访问低256字节。

5. 在AT89S51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明源操作数的寻址方式及按顺序执行每条指令后的结果。 答:

指令 指令说明 源操作数寻址方式 结果 MOV A, 40H 将内部RAM中40H内容传送到累加器A中 (A)← (40H) 再将A中内容传送给R0 (R0)← (A) 直接寻址 (A)=48H MOV R0, A MOV #0F0H 寄存器寻址 立即数寻址 (R0)=48H (P1)=0F0H P1, 将立即数0F0H送到P1口,即P1.4~P1.7位1,其余为0 (P1) ← 0F0H MOV @R0, 将30H中的内容,传放到30H 以R0单元内容为地址的单元中 ((R0)) ← (30H) MOV DPTR, 将立即数3848传送给#3848H DPTR数据指针 (dptr) ← 3848H MOV 38H MOV 30H 40H, 将内部RAM中38H内容传送到40H单元中 (40H) ← (38H) R0, 将30H中的内容给R0寄存器 (R0) ← (30H) 将R0的内容传送到P0 (P0) ← (R0) 直接寻址 ((R0))=(48H)=38H 立即数寻址 (DPTR)=3848H 直接寻址 (40H)=40H 直接寻址 (R0)=38H MOV P0, R0 寄存器寻址 寄存器间接寻址 (P0)=38H (A)=40H MOV A, @R0 将R0内容为地址的该单元内容传送给A (A)←((R0)) MOV P2, P1 将P1的内容传送给P2 (P2) ← (P1) 直接寻址 (P2)=0F0H

6. 指出下列指令的源操作数的寻址方式 MOV A, 65H 直接寻址 MOV A, #65H 立即数寻址 MOV A, @R0 寄存器间接寻址 MOV A, R2 寄存器寻址 MOVC A, @A+PC 变址寻址

7. 内部RAM和特殊功能寄存器各用什么寻址方式?

答:内部RAM有寄存器寻址方式、直接寻址方式和间接寻址方式; 特殊功能寄存器除A外只能进行直接寻址。

8. 已知:(A)=5BH,(R1)=30H,(30H)=0CEH,(P1)=71H,(PSW)=80H,(PC)=2000H,(205CH)=46H,(SP)=30H,(B)=78H。分别求各条指令执行后的结果(要求进行二进制运算验证)及标志位Cy、P的影响。

(1)MOV A, @R1 (A)=0CEH P=1, C不变 (2)MOV 40H, 30H (40H)=0CEH P和C不变 (3)MOV P1, R1 (P1)=30H P和C不变 (4)MOVC A, @A+PC (A)=46H P=1, C不变

(5)PUSH B (31H)=78H,(SP)=31H P和C不变 (6)POP DPH (DPH)=0CEH,(SP)=29H P和C不变 (7)XCHD A, @R1 (A)=05EH,(30H)=CBH P=1, C不变 (8)ADD A, 30H (A)=29H P=1, C=1 (9)ADDC A, P1 (A)=CDH P=1, C=0 (10)SUBB A, P1 (A)=E9H P=1, C=1 (11)ANL P1, #0FH (P1)=01H P和C不变 (12)CLR PSW.7 C=0

(13)RLC A (A)=B7H P=0, C=0 (14)ORL C, 90H C=1, P不变

9. 对下面一段程序加上机器码和注释,并说明程序运行后寄存器A、R0和内部RAM 50H、51H、52H单元的内容。

MOV 50H,#50H 75 50 50 ;(50H)←50H MOV A,50H E5 50 ;(A)←(50H) MOV R0,A F8 ;(R0)←(A)

MOV A,#30H 74 30 ;(A)←30H MOV @R0,A F6 ;((R0))←(A) MOV A,#50H 74 50 ;(A)←50H MOV 51H,A F5 51 ;(51H)←(A) MOV 52H,#00H 75 52 00 ;(52H)←00H 答:运行后寄存器(A)=50H,(R0)=50H,(50H)=30H,(51)=50H,(52H)=00H

10. 区别下列各指令中20H的含义,在每条指令后加上注释。

MOV A , #20H 将20H立即数传送给A

MOV 45H, 20H 将内部RAM中20H单元的内容传送到45H中

MOV C, 20H.0 将内部RAM中20H单元内容的第0位(最低位)传送给C MOV C, 20H 将内部RAM中20H位地址内容传送给C

11. 写出完成以下功能的指令 (1) 将立即数30H送到R1;

(2) 将内RAM30H中的数据送到内RAM78H单元;

(3) 将立即数30H送到 以R0中内容为地址的存储器中; (4) 将R2中的内容送到 P1;

(5) 将内RAM60H单元的数据送到 外RAM60H单元;

(6) 将内RAM60H单元的数据送到外RAM1060H单元; (7) 将ROM1000H单元的内容送到内RAM30H单元; (8) 使ACC.7置位;

(9) 使累加器的低4位清零;

(10) 使P1.2与CY相与,结果送CY;

(11) 立即数45H、93H进行逻辑与、或、异或操作;

(12) 两立即数求和:1C0H+45H,结果按高低8位存在30H、31H中。

答案:(1)MOV R1,#30H (2) MOV 78H, 30H

(3)MOV @R0, #30H (4)MOV P1, R2 (5) MOV A,60H;; MOV P2,#0; MOV R0,#60H; MOVX @R0,A

(6) MOV A,60H;; MOV DPTR,#1060;

MOVX @DPTR,A

(7) MOV A, #00H

MOV DPTR,#1000H MOVC A, @A+DPTR

MOV 30H,A (8)SETB ACC.7

(9) ANL A, #0F0H (10) ANL C, p1.2

(11) 与: MOV A,#45H ANL A,#59H 或: MOV A,#45H ORL A,#59H

异或:PMOV A,#45H XRL A,#59H (12) CLR C

MOV R2,#1

MOV A,#0C0H ADD A,#45H MOV 31H,A MOV A,R2 ADDC A,#0 MOV 30H,A

12. 写出下列指令执行过程中堆栈的变化 设堆栈初值为X:

MOV R6, #11H (SP)=X(堆栈不变) MOV R7, #23H (SP)=X(堆栈不变) ACALL 200H (SP)=X+2 ;(X+1)=第4条指令的首址PC低8位 (X+2)=第4条指令的首址PC高8位 POP 50H (SP)=X-1 POP 51H (SP)=X-2

SJMP $ ORG 200H RET

答:执行过程中,前面两条为立即寻址指令,堆栈不变;执行第三条ACALL指令时,首先将程序寄存器PC的当前值加2,接着先后将PC的低八位和高八位分别进栈,(SP)= (SP)+2;然后再将PC内容中的低11位用200H来替代,同时程序跳到第七条ORG200H中,接着RET表示子程序返回,将原先压入堆栈的PC值弹出,(SP) =(SP)-2;最后两条POP指令执行后将SP所指地址中的内容赋给50H,SP减1后再将SP所指地址中的内容赋给51H,SP内容再减1给SP,最后程序结束。

13. 请写出能实现下列功能的程序段:

(1)一个16位数据,高低字节分别放在20H和21H中,试将该数乘以2

MOV A, 21H

CLR C RRC A

MOV 21H, A MOV A, 20H RRC A

MOV 20H, A

(2)16位二进制数由高位到低位放在30H和31H单元,将其内容加1;

MOV A, 31H ADD A, #01H

MOV 31H, A MOV A, 30H ADDC A, #00H MOV 30H, A

(3)将DPTR中的数据减5;

CLR C

MOV A, DPL SUBB A, #05H MOV DPL, A MOV A, DPH SUBB A, #00H MOV DPh, A

(4)有3个位变量X,Y,Z,请编写程序实现Y=X+YZ的逻辑关系式。

X BIT 30H Y BIT 31H Z BIT 32H MOV C,Y ANL C,Z

MOV 20H,C MOV C,X ORL C,20H MOV Y, C

14. 将一个按高低字节存放在21H、20H中的一个双字节乘以2后,再按高低次序将结果存放到22H、21H、20H单元 ORG 0

STAR: CLR C

MOV 20H,#0E2H ;设低字节的数据 是E2H MOV 21H,#0F3H ;设高字节的数据是F3H MOV A, 20H MOV B,#2H MUL AB MOV 20H,A MOV 23H,B MOV A,21H MOV B,#2H MUL AB ADDC A,23H MOV 21H,A MOV 22H,B SJMP $ END

15.试编程,将片外RAM 1000H~1050H单元的内容置为55H。

MOV P2,#10H MOV R0,#00H MOV A,#55H MOVX @R0,A MOV R0,#50H L0: MOVX @R0,A DJNZ R0,L0 SJMP $ END

16. 试编程统计数据区长度的程序,设数据区从片内RAM 30H单元开始,该数据区以0结束,统计结果放入2FH中。

MOV R0,#30H L0: MOV A,@R0 JZ L1 INC R1 INC R0

SJMP L0

L1:MOV 2FH, R1

17. 试编写程序,将片外RAM 2000H~200FH数据区中的数据由大到小排列起来。

ORG 0

L0: MOV P2,#20H MOV R0,#00H MOV R7,#0FH CLR F0

LOOP: MOVX A,@R0 MOV 31H,A INC R0

MOVX A,@R0 CLR C

CJNE A,31H,L1 L1: JC L2 DEC R0

MOVX @R0,A MOV A,31H INC R0

MOVX @R0,A SETB F0

L2: DJNZ R7,LOOP JB F0,L0 SJMP $ END

18. 若晶振频率位6MHZ,试计算下面延时子程序的延时时间 DELAY: MOV R7, #0F6H ;1个机器周期 LP: MOV R6, #0FAH ;1个机器周期 DJNZ R6, $ ;2个机器周期 DJNZ R7, LP ;2个机器周期 RET ;2个机器周期

答: 机器周期为2us,则有:[1+(1+2×250+2)×246+2]×2 us =247482 us

19. 试分别编写延时20ms和1s的程序 设晶振频率为12M

20ms: ORG 0

MOV R1,#102 L1: MOV R0,#48 L2: NOP NOP

DJNZ R0,L2 NOP

DJNZ R1,L1

NOP NOP NOP NOP NOP NOP NOP END

1s:----------------------------------------------

ORG 0

MOV R2,#50

L0: MOV R1,#100 L1: MOV R0,#49 L2: NOP NOP

DJNZ R0,L2 NOP

DJNZ R1,L1

DJNZ R2,L0 SJMP $ END

20. 试编写利用调用子程序的方法延时1min的程序。

ORG 0H MOV R2,#60

A0: LCALL DLY DJNZ R2,A0

SJMP $

DLY:MOV R2,#50 L0: MOV R1,#100 L1: MOV R0,#49 L2: NOP NOP

DJNZ R0,L2 NOP

DJNZ R1,L1

DJNZ R2,L0 RET END

21. 用查表程序求0~6之间的整数的立方。已知整数存在A中,查表结果存入片内RAM 31H中。

ORG 0

MOV A, #DATA

MOV DPTR,#TAB MOVC A, @A+DPTR MOV 30H,A SJMP $

TAB: DB 0,1,8,27,64,125,216 END

若立方数超过一个字节,在两个字节以内,由以下程序实现。 ORG 0000H MOV A,#5 RL A

MOV R0,A

MOV DPTR,#TAB MOVC A, @A+DPTR MOV 31H,A ;高位 MOV A,R0 INC A

MOVC A,@A+DPTR

MOV 30H,A ;低位 SJMP $

TAB: DW 0,1,8,27,64,125,216 END

22. 编写程序,查找在内部RAM的30H~50H单元中出现FFH的次数,并将查找结果存入51H单元。

MOV R1,#00H MOV R0,#30H MOV R2,#21H L0: MOV A,@R0

CJNE A,#0FFH,L1 INC R1 L1: INC R0

DJNZ R2,L0 MOV 51H,R1 SJMP $ END

23. 试用子程序求多项式:Y=(A+B)2+(B+C)2 (要求:两数之和不能超过16)

X EQU 30H ;X代表A Y EQU 31H ;Y代表B Z EQU 32H ;Z代表C

F EQU 33H ;F中存放计算结果Y MOV R1,X MOV R2,Y LCALL L0 MOV R3,A

MOV R1,Y MOV R2,Z LCALL L0 ADD A,R3 MOV F,A Sjmp $

L0: MOV A,R1 ADD A,R2 MOV B,A MUL AB RET end

24. 已知(60H)=33H,(61H)=43H,试写出程序的功能和运行结果。

ORG 0000h

SS: MOV R0,#61H MOV R1,#70H ACALL CRR SWAP A

MOV @R1,A DEC R0

ACALL CRR XCHD A,@R1 SJMP $

CRR: MOV A,@R0 CLR C

SUBB A,#30h

CJNE A,#0AH,NEQ AJMP BIG NEQ: JC CEN

BIG: SUBB A,#07H CEN: RET

该程序的运行结果是:(60H)=33H, (61H)=43H, (70H)=C3H

25. 内部RAM的30H单元开始存放着一组无符号数,其数目存放在21H单元中。试编写程序,求出这组无符号数中的最小的数,并将其存入20H单元中。

MOV R0,#30H MOV A,@R0 MOV 20H,A DEC 21H

LOOP: INC R0

MOV A,@R0 CJNE A,20H,L1

L1: JNC L2

MOV 20H,A L2: DJNZ 21H,LOOP SJMP $ END

26. 写程序实现散转功能:

(R2)=0 转向RR0 (R2)=1 转向RR1

(R2)=2 转向RR2

ORG 0

MOV R2,#2H ;设(R2)=2 MOV DPTR,#TAB MOV A,R2

MOVC A,@A+DPTR JMP @A+DPTR TAB: DB RR0-TAB DB RR1-TAB DB RR2-TAB

RR0: MOV A,#1 ;RR0:将立即数1赋给A SJMP ENDF

RR1: MOV A,#2 ;RR1:将立即数2赋给A SJMP ENDF

RR2: MOV A,#3 ;RR2:将立即数3赋给A SJMP ENDF ENDF: SJMP $

27. 试按子程序形式编程,将单字节二进制数高4位、低4位分别转换成两个字节的ASCII码。

MOV A,R0 ;将R0中的内容作为贝转换对象 ANL A,#0FH ;取低四位 MOV DPTR,#TAB MOVC A,@A+DPTR

MOV 20H,A ;低四位转换后存放于20H中 MOV A,R0

ANL A,#0F0H ;取高四位 SWAP A

MOVC A,@A+DPTR

MOV 21H,A ;高四位转换后存放于21H中 TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H

本文来源:https://www.bwwdw.com/article/kd78.html

Top