]、2题略,看书!
3. 51系列单片机有哪儿种寻址方式?对内部RAM的。〜7FH操作有那些寻址方式?对SFR 有哪些寻址方式?
答:51单片机共有:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加 变址寄存器间接寻址和相对寻址等6中寻址方式。
对内部RAM的0〜7FH操作可通过直接寻址,寄存器间接寻址 对SFR只能通过直接寻址访问
对内部RAM的80H〜OFFH的操作只能通过寄存器间接寻址。(因为SFR的地址也在80H〜 OFFH的范围内,故通过采用互不相同的寻址方式,来区分该段地址是指向内部RAM还是 指向SFR)
4. 请写出下列功能对应的数据传送指令
⑴ MOV A,R0; MOV A,40H; MOVA,@RO; MOV A,#80H
(2MOV R0,78H; MOV R6,A; MOV R7,#88H; ) ⑶MOV 50H,A; MOVP1,70H; MOVP1,R3; MOVP1,#80H
(4MOV @R0,A; MOV @R0,30H; MOV @R0, #30H ) MOV DPTR,#8000H (5)
(6) PUSH ACC (不能写成PUSH A,必须用累加器的符号ACC,因为此处是直接寻址);
PUSH DPH; POPDPH; POP ACC
(7) XCH A,@R0; XCHD A,@R0
5.写出指令功能
(1) (2) (3) (4) (5) (6) ((R1))—A; (50H)—A; (Rl)—A (30H)->R7; (A)->R4; 3-R7 (A)->50H; (4OH)->P1; (R3)-P1 (A)->(Rl); (30H)->(Rl); 5OH->(R1) 9000H-DPTR
(ACC)-堆栈;(B)—堆栈; 堆栈一DPL
⑺ A - — ((R1)), (A)o~3 - - ((R1 ))o~3 (8) ((P2)(R0))—A; ((A)+(PC)) — A; ((A)+(DPTR))—A; ((DPTR))->A;
注意:MOVX指令访问的是外部RAM数据存储器单元;MOVC指令访问 的是程序存储
器
中
的
地
址
单
元
。
6.指出下列指令的寻址方式和操作功能 指令 INC @R1 INC 30H INCB RLA CPL 40H SETB 50H CLR 70H 寻址方式 寄存器间接寻址 直接寻址 直接寻址 寄存器寻址 直接寻址(位地址) 直接寻址(位地址) 直接寻址(位地址) 功能 ((R1))+1-(R1) (30H)+l-30H (B)+l—B A中的内容左环移 (28H).O-(28H).O 1-*(2AH).O O-(2EH).O 7. 指出下面的程序段功能 (1) MOV DPTR,#8000H
MOV A,#5
MOVCA,@A+DPTR
功能:(8000H+5)f A,即(8005H) —A (2) ORG 2000H
MOV A,#80H
;2字节指令
MOVCA,@A+PC ;1 字节指令
功能:因为(PC)=2003H,故程序段功能为(2083H)-A 8. 指出下列指令(指令省略)的功能 (1) (A)+(R0)-A
(A)+((R0))f A (A)+(30H)-* A (A)+80H-A 9. 指出下列程序段功能 MOV A,R3 MOV B,R4 MULAB MOV R3,B MOV R4,A
功能:(R3)*(R4)f R3R4,即将R3, R4中的两个单字节数据相乘,结果的低字节送R4,结果 的高字节送R3o 10. 指出指令功能: ANLP1,#OF7H
;清零P1.3锁存器,P1 口的其它位保持不变
ORLP1,#8 ;将?1.3锁存器置1, P1 口的其它位保持不变 XRLP1,#8 ;将?1.3锁存器取反,P1 口的其它位保持不变
(2) (A)+(R0)+(CY)-A (A)+((R0))+(CY)f A (A)+(30H)+(CY)f A
(A)+90H+(CY)-A
〃.指出下列程序段功能
MOV R(),#50H MOVA,@RO ANLA,#0F0H SWAP A MOV 60H,A MOV A,@R0 ANLA,#0FH MOV61H,A
功能:将内部RAM中的50H单元的高半字节及低半字节内容拆成两个单字节 内容分别放入60H,61H单元中;其中50H的高半字节放入60H的低半字节,50H 的低半字节放入61H的低半字节中,60H及61H单元的高半字节均为0。 也可用符号描述如下:
0000 (50H).7 〜4—60H ,0000 (50H).3 〜o—61H
或举例说明如下:
若程序执行前(50H)=7CH,则执行该程序段后,(60H)=07H,(61H)=0CH
12.指出执行下面的程序段后,累加器A的内容: MOV A,#3
MOV DPTR,#0A000H MOVCA,@A+DPTR ORG 0A000H
DB '1234567ABCDEF'
结果:(ACC) = 34H,即'4'的 ACSII 码
13.设(SP)=74H,指出执行卜画程序段后,(SP)值以及堆栈中的75H, 76H, 77H单元的内容。 MOV DPTR,#0BF00H ;0BF00H-*DPTR,即 OBFH-DPH, OOH-DPL MOV A,#50H PUSH ACC PUSH DPL PUSH DPH 结果:(SP)=77H, 14.指出程序段功能
;50Hf ACC
;(SP)+l-> SP, (ACC)-* (SP) ;(SP)+ —SP,(DPL)-(SP) ;(SP)+ —SP,(DPH)-(SP)
(75H)=50H, (76H)=00H, (77H)=0BFH
MOV C,0 ANL C,20H ORL C,30H
;(20H).0-CY,注意该指令中的0即指位地址00H ;(CY)A(24H).0->CY ;(CY)V(26H).0->CY
CPLC ;(CY)->CY MOV P 1.0 ,C ;(CY)一P1.0
功能:实现逻辑函数:P1.0 = (2OH).OA(24H).OV(26H).O
15. 画出下而子程序框图,指出子程序功能 SSS:
MOV R7,#10H MOV R0,#30H MOV DPTR,#8000H
SSL: MOVA,@RO MOVX @DPTR,A INC DPTR INC RO DJNZ R7,SSL RET
解
16— R7 30H — RO 8000H-DPTR ((R0))-A (A)-> (DPTR) (DPTR)+1 一 DPTR (R0)+l-R0
Ji [ 返回?
(简单点也可描述为:将内部RAM中30H开始的16个单元中的内容复制到外部RAM区
功能:将内部RAM数据存储器中30H单元开始的连续16个单元中的数据危制到外部数据 存储器中8000H单元开始的连续16个存储单元中去。
8000H开始的16个单元中)。 下划线标出的内容为关键词,即考试时候的得分点,七人 16. 已知内部RAM 中的30H~32H 内容为 12H,45H,67H (即00010010,01000101,01100111) 请写出下面的子程序执行后30H-32H的内容,并画出框图。
RRS:
MOV R7,#3 MOV R0,#30H CLRC
RRLP: MOV A,@RO
RRC A MOV @R0,A INC RO DJNZ R7,RRLP
RET
解:该子程序的功能为:将RAM中的30H~32H内容右移一位,其中30H的最高位移入0, 32H
的最低位移出并送入CY中。
所以子程序执行后 30H〜32H 的内容为 09H,22H,0B3H (即 00001001,00100010,10110011) 框图:
3-R7 30H-R0 0-CY
((R0)) 一 A A带进位右环移 (A)f(R0) (R0)+l-R0 (R7)-l=0?
厂返回二
17. 指出下而程序段功能 MOV C,P3.() ORL C,P3.4 CPL C MOV F0,C MOV C,20H ORL C,50H CPL C ORL C,F0 MOV P1.0,C
解:实现逻辑等式 P1.0=(P3.0V P3.4) A ((24H).OV(2AH).O )
18. 指出下列指令中哪些是非法的 解:非法指令有以下儿条 (2) DEC @DPTR (3 ) MOV A, @R2 (5) MOV Pl.0,0 (8) RR 20H
(9) RLC 30H (10) RLB
19. 指出下而子程序功能: SSS: SSL:
MOV R0,#40H CLRA XCHDA,@R0 XCHA,@R0 SWAP A XCHA,@R0 INC RO
CJNE RO, #43H, SSL MOV R2,A RET
功能:将内部RAM中40H〜42H单元的内容右移四位(即右移半字节),40H的高四位移 入4个0, 42H的低四位移入R2的低四位。
假定初始条件(40H)=12H,(41H)=34H,(42H)=56H;则执行该子程序后,结果为 (40H)=01H, (41H)=23H, (42H)=45H, (R2)=06H
20. 指出下而子程序中何条指令的功能,画出程序框图,指出子程序的功能 SSS:
MOV R7,#4 MOV R2,#0
SSLO: MOV R0,#30H
MOV R6,#3 CLRC
SSL1: MOVA,@RO ;内层循环,借助带进位右移完成30H〜32H右移一位 RRC A ; 30H最高位
移入0, 32H最低位移入CY位 MOV @R0,A INC RO DJNZ R6,SSL1
MOV A,R2 ;内层循环结束后,将CY位中的32H最低位移入R2最高位 RRC A MOV R2,A
DJNZ R7,SSL0;外层循环4次,完成30H~32H位元右移四位,移出内容送入R2 RET
功能:将内部RAM中30H〜32H单元的内容右移四位,30H的高四位移入4个0, 32H的 低四位移入R2的高四位。
假定初始条件(30H)=12H,(31H)=34H,(32H)=56H;则执行该子程序后,结果为 (30H)=01H, (31H)=23H, (32H)=45H, (R2)=60H
注意:该题与19题基本一样,19题在MOV R2,A前增加一条SWAP A指令后,则两题的 功能完全一样。这种对应关系可参见书本例3.48与例3.50(两个例子均是三字节内容左移4 位)。很显然,20题与例3.50提供的算法更灵活,可适用与n字节内容右移(左移)m位 的情况。 21. (1)编写程序段,功能为30H (高)~32H (低)和33H (高)〜35H (低)两个三字节 无符号数相加,
结果写入30H (高)~32H (低),设三字节数相加时无进位。
法1: TADD: MOV R0,#32H MOVR1,#35H MOV R7,#3 CLRC TADD1: MOVA,@R0 ADDC A,@R1 MOV @R0,A DEC RO DEC R1 DJNZ R7,TADD1 法2: TADD: MOV R0,#32H MOVR1,#35H CLRC TADD1: MOVA,@RO ADDC A,@R1 MOV @ RO,A DEC RO DECR1 CJNE RO,#2FH,TADD1 21. (2)试编写一子程序,将内部RAM中30H~32H的内容左移1位,即:
30H
| CY | 参见例3.50
RLC13: MOV R0,#32H MOV R6, #3 CLRC LOOP: MOVA,@RO RLCA
MOV @ RO,A DEC RO DJNZ R6,LOOP RET
;别忘了,子程序需加条RET指令 J —
31H
—
32H —
—
0
22. 子程序,实现(A)—(30H)f(31H)—(32H) —……一(3EH)—(3FH)—丢失 BMOV: MOV R0,#30H
MOV R7,#16
MOV3FH,A ;将0)保存在3FH中,最后一次交换时换回,即(A)可保持不变
LOOP: XCH A,@R0 INC RO DJNZ R7,LOOP RET
23.30H(高)〜32H(低)中的压缩BCD码转换成6位单.字节BCD码存放到33H(高)~38H(低)。 即若(30H)=45H, (31H)=67H, (32H)=H,则转换成(33H)=04H, (34H)=05H, (35H)=06H, (36H)=07H, (37H)=08H, (38H)=09H 法一:
CHG12: MOV R0,#30H M()VR1,#33H MOV R7,#3 LOOP: M()VA,@R0
MOV B,#10H ;45H/10H=04H+05H,商 04H 在 ACC 中,余数 05H 在 B 中 DIV AB MOV@R1,A INC R1 MOV@R1,B INC R1 INC RO DJNZ R7,LOOP RET
法二:
CHG12: MOV R0,#30H
MOVR1,#33H MOV R7,#3
LOOP: MOVA,@RO
ANL A,#0F0H SWAP A MOV@R1,A INC R1 M()VA,@R0 ANLA,#0FH MOV@R1,A INC R1 INC RO DJNZ R7,LOOP RET
24. 33H (高)〜38H(低)中的6位单字节BCD码转换成压缩BCD码存放到40H(高)~42H (低)
单元中。
即若(33H)=04H, (34H)=05H, (35H)=06H, (36H)=07H, (37H)=08H, (38H)=09H,则转换成 (40H)=45H, (41H)=67H, (42H)=H CHG21: MOV R0,#33H
MOVR1,#40H MOV R7,#3
LOOP: MOVA,@RO
SWAP A INC RO
ORLA,@RO;该处也可用ADD A,@R0 gJc XCHD A,@R0,都能达到同样效果 MOV@R1,A INC RO INC R1 DJNZ R7,LO()P RET
25. 子程序,内部RAM中的30H~4FH单元的内容传送到外部RAM中7EOOH~7E1FH单元 法一:
XMV: MOV R0,#30H
MOV DPTR,#7E00H
LOOP: MOVA,@R0
MOVX @DPTR,A INC RO INC DPTR
CJNE RO,#50H,LOOP
RET
法二:
XMV: MOV RO , #30H
MOVP2,#7EH; P2输出外部RAM的高8位地址
MOVR1,#OOH; R1作为地址指针,指向外部RAM的低8位地址 MOV R7 , #32;
LOOP: MOVA,@RO
MOVX @R1,A INC RO INC R1
DJNZ R7 , LOOP RET
26. 子程序实现:(R2R3) * (R4) -R5 R6 R7
算法:同一般的乘法规则,先将被乘数低字节(R3)乘以乘数(R4),得部分积X,部分积X 的低字节XL放入R7,部分积X的高字节XH放入R6;被乘数高字节(R2)乘以乘数(R4), 得部分积Y;部分积Y的低字节YL与R6中的XH相加后放入R6,部分积Y的高字节 YH加上进位后放入R5o
(R2) (R3) X (R4)
XHXL
+) YH YL
R5 R6 R7
30H〜4FH单元,总计32个(或写成16进制形式:20H)
NMUL: MOV A,R3
MOV B,R4
MUL
MOV MOV MOV MOV
R7,A R6,B A, R2
R4
MUL
A,R6
MOV R6,A MOV A, B ADDC A, #0 MOV R5,A