一、思考题
1.什么是寻址方式?在MCS-51单片机有哪几种寻址方式。
2. 设内部RAM中59H单元的内容为50H,CPU执行下列程序段后,寄存器A、R0和内部RAM中50H、51H单元的内容是多少?
MOV A, 59H
MOV R0, A
MOV A, #00H
MOV @R0, A
MOV A, #25H
MOV 51H, A
MOV 52H, #70H
3. 已知4EH和4FH单元的内容分别为20H和5FH,执行下列指令后,DPTR的内容是多少?
MOV A, 4EH
MOV R0,#4FH
XCH A,@R0
SWAP A
XCHD A,@R0
MOV DPH,@R0
MOV DPL,A
4.CPU执行下列程序后,A和B寄存器的内容是多少?
MOV SP, #3AH
MOV A, #20H
MOV B, #30H
PUSH ACC
PUSH B
POP ACC
POP B
5. 设外部RAM的2000H单元内容为80H,CPU执行下列程序后,A的内容是多少?
MOV P2, #20H
MOV R0, #00H
MOVX A, @R0
6. 指令XCH、XCHD和SWAP有什么区别?
7. 指令“MOVC A,@A+DPTR”与“MOVC A,@A+PC”有什么不同?
8. 假定累加器 A 的内容为30H, CPU执行指令下列后
1000H : MOVC A ,@A+PC
CPU把程序存储器的哪个单元的内容送到了累加器 A 中。
9. 假定 DPTR 的内容为 8100H,累加器的内容为 40H ,CPU执行下列指令
1000H :MOVC A,@A+DPTR
后,送入的是程序存储器哪个单元的内容。
10. 假定(SP)=60H,(ACC)=30H,(B)=70H,CPU执行下列程序后,SP、60H、61H、62H的内容各是多少?
PUSH ACC
PUSH B
11. 假定(SP)=62H,(61H)=50H,(62H)=7AH,CPU执行下列程序后,SP、60H、61H、62H及DPTR的内容各是多少?
POP DPH
POP DPL
12. 假定(A)=85H,(R0)=20H,(20H)=0AFH,CPU执行指令
ADD A, @R0
累加器A及Cy、AC、OV、P的内容是多少?
13. 假定(A)=85H,(20H)=0FEH,(Cy)=1,执行指令
ADD A, 20H
累加器A的内容及Cy、AC、OV、P的内容是多少?
14. 假定(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,CPU执行下列指令后,上述寄存器和存储单元的内容是多少?
INC A
INC R3
INC 30H
INC @R0
15. 假定(A)=56H,(R5)=67H,CPU执行指令后A和Cy的内容是多少?
ADD A ,R5
DA A
16. 分析下面的程序,指出是对哪几个单元进行了加法运算,结果存在哪个单元?
MOV A, 20H
MOV R0,#30H
ADD A,@R0
INC R0
ADD A,@R0
MOV @R0,A
17. ADD指令和ADDC指令有什么不同?
18. DA指令作用什么?它如何使用?
19. 假定(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,CPU执行下列指令后,上述寄存器和存储单元的内容是多少?
DEC A
DEC R7
DEC 30H
DEC @R1
20. 分析下面的程序,参与加减法运算的单元有哪些,结果存在哪个单元?
MOV A, 20H
MOV R0,#30H
CLR C
SUBB A,@R0
DEC R0
ADD A,@R0
MOV @R0,A
21. 假定(A)=50H,(B)=0A0H。CPU执行指令“MUL AB”后,寄存器 B 的内容为和累加器 A 的内容为多少? Cy 和OV的状态是什么?
22. 假定(A)= 0FBH,(B)=12H。执行指令“DIV AB”后,寄存器 B 的内容为和累加器 A 的内容为多少, Cy 和OV的状态是什么?
23. 已知(A)=83H,(R0)=17H,(17H)=34H。CPU执行完下列程序段后A的内容是多少?
ANL A,#17H
ORL 17H, A
XRL A, @R0
CPL A
24. 设(A)=55H,(R5)=AAH,如果CPU分别下列执行指令,A和R5的内容是多少?
(1)ANL A,R5
(2)ORL A,R5
(3)XRL A,R5
25. 分析下列指令序列,写出它所实现的逻辑表达式。
MOV C, P1.0
ANL C, P1.1
ORL C, /P1.2
MOV P3.0, C
26.指令“LJMP PROG”和“LCALL PROG”有什么区别?
27. 已知(20)= 00H,执行下列程序段后,程序将如何执行?
DJNZ 20H, REDO
MOV A, 20H
28. CPU分别执行指令“JB ACC.7,LABEL”和“JBC ACC.7,LABEL”后,它们的结果有什么不同?
29. RET和RETI指令有什么区别?
30.当系统晶振为12MHz时,计算下列子程序的执行时间。
SUBRTN: MOV R1,#125
REDO: PUSH ACC
POP ACC
NOP
NOP
DJNZ R1,REDO
RET
二、程序设计
1. 把内部RAM的20H、21H、22H单元的内容依次存入2FH、2EH和2DH中。
2. 把外部RAM的2040H单元内容与3040H单元内容互换。
3. 把内部RAM的40H单元与5000H单元的低四位互换。
4. 已知一个2维数据表格如下,存储在程序存储器中,编程实现自动查表。
X |
0 |
1 |
2 |
3 |
4 |
… |
0B |
0C |
0D |
0E |
0F |
Y |
11 |
12 |
01 |
AD |
DD |
… |
AB |
24 |
4B |
7C |
AA |
5. 已知二进制数X和Y,X被存放在20H(高8位)和21H(低8位)单元,Y被存放在22H,编程实现下X+Y。
6. 已知二进制数X和Y,X被存放在20H(高8位)、21H、22H单元,Y被存放在30H(高8位)、31H、32H单元,编程实现下X+Y。
7. 已知8位十进制数X和Y以压缩BCD的格式存储,X被存放在20H~23H单元,Y被存放在40H~43H,编程实现下X+Y。
8. 已知二进制数X和Y,X = 6F5DH,Y = 13B4H,编程求X—Y。
9. 已知二进制数X和Y,已知X被存放在20H(高8位)、21H和22H单元,Y被存放在22H,编程实现下X—Y。
10. 已知二进制数X和Y, X被存放在20H~23H单元,Y被存放在30H~33H单元,编程实现下X-Y。
11. 已知十进制数X和Y以压缩BCD码的格式存储,X被存放在20H(高位)和21H单元,Y被存放在22H和23H单元,编程实现下X-Y。
12. 已知二进制数X被存放在20H,编程实现下X3。
13.已知二进制数X被存放在20H(高8位)21H、22H单元,Y被存放在30H单元,编程实现下X×Y。
14. 二进制数X被存放在20H(高8位)21H单元,用移位方法实现2X。
15. 4位十进制数X以压缩BCD的格式存储在内部RAM中,编程实现X乘以10。
16. 二进制数X被存放在20H(高8位)21H单元,用移位方法实现X/2。
17. 4位十进制数X以压缩BCD的格式存储在内部RAM中,编程实现X/10,并把小数部分存储在R6中。
18. 非正数X被存放在20H(高8位)21H单元,求该数的补码。
19. X是二进制数,编程实现下列要求:X=0时,执行程序PROG1;X=1时,执行程序PROG2;X=2时,执行程序PROG3;X=3时,执行程序PROG4。
20. 求出无符号单字节数X、Y、Z中的最大数,并把它存放在50H单元。
21. 把内部RAM的20H~2FH连续16个单元的内容转移到外部RAM的2000H单元开始的区域中。
22. 设5FH单元的内容8位二进制数
,对该单元的按照下列表达式进行编码

然后把新编码构成的数据
回送到5FH单元。
23. 假设U为P1.1,V为P1.2,W为P3.3,X为28H.1,Y为2EH.0,Z为TF0,Q为P1.5,编制程序实现下列逻辑表达式:
。
24. 一批8位二进制数据存放在单片机内部RAM以20H单元开始的区域,数据长度为100个,编程统计该批数据中数值为65H的数据的个数,将统计结果存放在R7中。
25. 一批8位二进制数据存放在单片机内部RAM以10H单元开始的区域,数据长度为50个,编制程序统计该批数据中偶数,并把偶数存放在内部RAM以50H开始的区域。
26. 编程查询外部RAM的3000H单元中0和1的个数,把结果存储在R5和R6中。
27. 4位十进制数以压缩BCD码格式被存放在20H(高位)和21H单元,请将该数转换为分离式BCD码形式,并将结果存在30H、31H、32H、33H单元。用调用子程序的方法实现。
28. 用P1口驱动图3.63所示的LED显示装置,设计驱动电路并编制程序实现下列要求:LED依次顺时针点亮——逆时针灭——全亮若干秒全灭,周而复始地重复上述过程。系统晶振为12MHz。