复习题
用数据传送指令来实现如下要求。(每小题2分,合计10分)
1.将R2内容的高低4位互换。
MOV A, R2 ; SWAP A :MOV R2, A ;
2.内部RAM 40H单元内容送A中。
MOV A, 40H
3.设置栈底地址为30H。
MOV SP, #2FH
4.外部RAM 50H单元内容送A中。
MOV R0, #50H ; MOVX A, @R0 ;
5.内部RAM 50H单元内容传送到R2中。
MOV R2, 50H
R0的内容传送到R3。
MOV A, R0 ; MOV R3, A ;
外部RAM 50H单元内容送R0。
MOV R1, #50H ; MOVX A, @R1 ;MOV R0, A ;
程序存储器ROM 2000H单元内容送A。
MOV DPTR, #2000H ; CLR A ; MOVC A, @A+DPTR ;
片内RAM 30H单元内容取反。
MOV A, 30H ;CPL A ; MOV 30H, A ;
累加器A的内容送R5。
MOV R5, A:
一、指令分析题(每小题2分,合计20分)
1. MOV #30H,A错 目的在前,源在后
2. MOVC A,@R0 错 MOV仅支持@A+R0/@A+DPTR,需A作为偏移量
3. POP DPL 对
4. DEC DPTR错“MCS-51 无DEC DPTR指令”,需拆分 DPH/DPL 分别自减
5. ANL 40H,#0FFH对
6. CPL A对
7.RLC B错RLC仅支持累加器A格式RLC A,B寄存器无此操作
8. SETB TR0对
9.ANL C,/TR1对
10.JBC TCON.0,1FFFH对
11.MOV R2,R3错寄存器间不可直接传送,需 A 中转
12. MOVX @DPTR,P0错MOVX仅支持 A 作为数据缓冲,P0口需先送A再传送
13. PUSH A 对,但最好写成PUSH ACC
14. ANL 30H,@R0
错ANL无direct与@Ri格式,需先MOV A, @R0,再ANL 30H, A
15. SUBB B,@R1
错SUBB仅支持 A 作为目的操作数,B寄存器不可作为目的
16. CLR @R1
错CLR仅支持 A 和位操作,需MOV A, #0→MOV @R1, A
17. SWAP A对
8. SETB TR1对
9. 0000H:AJMP 25FFH
错AJMP是2KB短跳转。0000H执行AJMP后 PC=0002H,25FFH高5位01001,超出范围
20. CJNE R0,#30H
错CJNE需完整格式CJNE Rn, #data, addr,缺少跳转目标地址
三、计算题(每空1分,分析过程4分,合计10分)
执行下面指令
MOV A,#7FH
MOV R0,#20H
ADD A,#57H
MOV @R1,A
后,(A)=( D6H)、(Cy)=(0)、(AC)=(1)、(OV)=(1)、(P)=(1)、(R0)=(20H)。
三、计算题(每空1分,分析过程4分,合计10分)
执行下面指令
设(A)=63H,(R0)=0FFH,执行指令
ADD A,R0
后,(A)=(52H)、(Cy)=(1)、(AC)=(1)、
(OV)=(0)、(P)=(1)、(R0)=(0FFH)。
四、综合应用题。(每小题15分,合计60分)
1.若fosc=6MHz,定时/计数器T1工作于方式1,定时10ms发中断请求,编写初始化程序。
INIT_T1:
MOV TMOD, #10H ;
MOV TH1, #0ECH ;
MOV TL1, #78H ;
SETB ET1 ;
SETB EA ;
SETB TR1 ;
SJMP $ ;
2.编程序实现片外RAM 从2000H开始存放的26个数(A-Z,26个英文字母)。
MOV DPTR, #2000H ;
MOV R0, #26 ;
MOV A, #41H ;
LOOP:
MOVX @DPTR, A ;
INC DPTR ;
INC A ;
DJNZ R0, LOOP ;
SJMP $ ;
3.已知在23H中存放一个二进制数,将它转换成十进制数的BCD码,转换后百位数存放于R5中,十位和个位数分别存于R6的高四位和低四位中。
MOV A, 23H ;
MOV B, #100 ;
DIV AB ;
MOV R5, A ;
MOV A, B ;
MOV B, #10 ;
DIV AB ;
SWAP A ;
ORL A, B ;
MOV R6, A ;
SJMP $ ;
4.8051单片机的串行口,若采用异步通信,定时器1工作于方式2,
振频率为11.0592MHz,SMOD=0,当选择波特率为9600bit/s,计算:
1)T1定时器的计数初值是多少?E2H
2)若已知每分钟能连续传送36000帧数据,每帧数据10位,求此时的波特率是多少?
6000BIT\S
1.若fosc=6MHz,定时/计数器T0工作于方式0,定时5ms产生中断请求,编写初始化程序。(15分)
INIT_T0:
MOV TMOD, #00H ;
MOV TH0, #0B1H ;
MOV TL0, #0CH ;
SETB ET0 ;
SETB EA ;
SETB TR0 ;
SJMP $;
2. 编程实现:8051单片机使用外部中断0、外部中断1、T0、T1中断源,要求T1为最高级。
(1)写出IE、IP控制字。
IE=0BH
IP=08H
(2)编写中断初始化程序。(合计15分)
INIT_INT:
MOV IE, #0BH ;
MOV IP, #08H ;
SJMP $
4.编写程序,完成内部RAM的30H(高)-35H(低)和40H(高)-45H(低)两个多字节无符号数相加,结果存入30H(高)-35H(低)单元。(15分)
MOV R0, #35H ;
MOV R1, #45H ;
MOV R2, #6 ;
CLR C ;
LOOP: MOV A, @R0 ;
ADDC A, @R1 ;
MOV @R0, A ;
DEC R0 ;
DEC R1 ;
DJNZ R2, LOOP ;
SJMP $
4. 编程序,把片外RAM 从3000H开始存放的26个数,传送到片内RAM
30H为首地址的单元中。(15分)
MOV DPTR, #3000H ;
MOV R0, #30H ;
MOV R1, #26 ;
LOOP:
MOVX A, @DPTR ;
MOV @R0, A ;
INC DPTR ;
INC R0 ;
DJNZ R1, LOOP ;
SJMP $
检查