单片机答案汇编 联系客服

发布时间 : 星期四 文章单片机答案汇编更新完毕开始阅读268310a2f524ccbff121849a

3-3 访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。 答:访问外部数据存

储器可以用以下指令实现:

解:MOVX A, @Ri ;((Ri))→A,寄存器Ri指向的片外RAM地址中的内容送到累加器A中 MOVX @Ri, A ;A→((Ri)),累加器中内容送到寄存器Ri指向的片外RAM地址中

MOVX A, @DPTR ;((DPTR))→A,数据指针指向的片外RAM地址中的内容送到累加器A中 MOVX @DPTR, A ;A→((DPTR)),累加器中内容送到数据指针指向的片外RAM地 址中 访问程序存储器可以用以下指令实现:

MOVC A, @A+DPTR ;((A+DPTR))→A,表格地址单元中的内容送到累加器A中

MOVC A, @A+PC ;PC+1→PC,((A+PC))→A,表格地址单元中的内容送到累加器A中 (2) 寄存器寻址方式;(3) 寄存器间接寻址方式 答(1)立即寻址方式: MOV 30H, #0FH (2)寄存器寻址方式: MOV R5, #0FH

MOV 30H, R5

(3)寄存器间接寻址方式:MOV @R1, #0FH

3-4 试用下列3种寻址方式编程,将立即数0FH送入内部RAM的30H单元中。 (1) 立即寻址方式;

3-7 写出实现下列要求的指令或程序片段。 (1) 将R0的内容传送到R1;

(2) 内部RAM的20H单元内容传送到寄存器R1;

(3) 内部RAM的20H单元的D7和D3位清零,其它位保持不变; (4) 外部RAM的1000H单元内容传送到内部RAM的60H单元中; (5) 外部RAM的1000H单元内容传送到寄存器R2; (6) 清除累加器高4位。 答:(1)MOV A, R0

MOV R1, A (2)MOV R1, 20H (3)MOV A, 20H

ANL A, #77H

(4)MOV DPTR, #1000H

MOVX A, @DPTR MOV 60H, A

(5)MOV DPTR, #1000H

MOVX A, @DPTR MOV R2, A (6)ANL A, #0FH

3-8 试编写一段程序,将内部数据存储器30H、3lH单元内容传送到外部数据存储器1000H、1001H

单元中。 答: MOV A, 30H

MOV DPTR, #1000H MOV @DPTR, A MOV A, 31H

MOV DPTR, #1000H MOV @DPTR, A

3-9 试编写一段程序,将外部数据存储器40H单元中的内容传送到0l00H单元中。

答: MOV DPTR, #0040H

MOV A, @DPTR MOV 0100H, A

3-10 试编写—段程序,将R3中的数乘4(用移位指令)。

答: MOV A, R3

MOV 23H, #02H L0: DJNZ 23H, L1 L1: RL A

SJMP L0

3-11 试编写—段程序,将R2中的各位倒序排列后送入R3中。

答: MOV A, R2

MOV 23H, #08H L0: DJNZ 23H, L1 L1: RL A SJMP L0 MOV R3, A

3-12 试编写—段程序,将P1口的高5位置位,低3位不变。

答: MOV A, P1 ORL A, #F8H MOV P1, A

4-4 编写程序,将片内30H~39H单元中的内容送到以2000H为首的外部存储器。 答: ORG 0000H

START: MOV R0, #30H

MOV DPTR, #2000H MOV R1, #10 CLR A

LOOP: MOV A, @R0

MOVX @DPTR, A DEC R1

DJNZ R1, LOOP END

4-5 编写程序,采用算术平均值滤波法求采样平均值,设8次采样值依次放在20H~27H的连续单元中,结果保留在A中。 答:FILT: CLR A

MOV R2, A MOV R3, A MOV R0, #20H MOV R7, #08H ;初始化

FILT1: MOV A, @R0

ADD A, R3 MOV R3, A CLR A

ADDC A, R2 MOV R2, A INC R0

DJNZ R7, FILT1

;累加采样值到R3,累加进位到R2=00000xxxB FILT2: SWAP A

RL A ;R2/8,节省一个指令周期 XCH A, R3 SWAP A

RL A ;R3/8,节省一个指令周期 ADD A, #80H ;四舍五入

ANL A, #1FH ;屏蔽移位进入的前三位 ADDC A, R3 ;结果相加 END

;取平均值

4-6 编写程序,将存放在内部RAM起始地址为20H和30H的两个3字节无符号相减,结果存放在内部RAM单元70H、71H、72H中(低位对应低字节)。 答: ORG 0000H

START: MOV R0, #20H

MOV R1, #30H MOV R2, #03H CLR C S0: LCALL XU

MOV 70H, A LCALL XU MOV 70H, A LCALL XU MOV 70H, A S1: MOV A, @R0

SUBB A, @R1 INC R0 INC R1 RET END

4-7 编写程序,实现两个双字节无符号数的乘法运算,乘数存放在R2和R3中(R2存放高字节,R3存放低字节,以下类同),被乘数存放在R6和R7中,积存放在R4、R5、R6和R7中。 答: ORG 0000H DMUL: MOV A, R3

MOV B, R7 MUL AB MOV R0, A MOV R1, B ;低8位*低8位

MOV A, R2 MOV B, R7 MUL AB ADD A, R1 MOV R1, A MOV A, B

ADDC A, #00H MOV R5, A ;高8位*低8位

MOV A, R3 MOV B, R6 MUL AB ADD A, R1 MOV R1, A MOV A, R5 ADDC A, B MOV R5, A MOV A, #00H ADDC A, #00H MOV R4, A ;低8位*高8位

MOV A, R3 MOV B, R6 MUL AB ADD A, R5 MOV R5, A MOV A, R4 ADDC A, B MOV R4, A ;高8位*高8位

MOV A, R0 MOV R7, A MOV A, R1 MOV R6, A ;R0、R1给R7、R6

END

4-8 假设在R0指向的片内RAM区,存有20个16进制数的ASCII字串。将ASCII码转换为16进制数,然后两两合成一个字节,从低地址单元到高地址单元依次组合。 答: ORG 0000H

START: MOV R7, #20 S0: MOV A, R0

MOV R1, A ;R1为中间量 MOV A, @R0 CLR C

SUBB A, #30H MOV @R1, A JC S01

MOV A, @R0 SUBB A, #07H MOV @R1, A S01: INC R0

MOV A, @R0 CLR C

SUBB A, #30H SWAP A ORL A, @R1 MOV @R1, A JC S02

MOV A, @R0 SUBB A, #07H SWAP A OR A, @R1 MOV @R1, A S02: INC R0

DJNZ R7, S0 END

4-9 结合例4-24和图4-5编写线性标度变换程序。

答: 将256近似255,256比255做浮点运算简单很多

PUSH ACC PUSH PSW MOV A, #Am MOV 20H, #A0 CLR C

SUBB A, 20H ;将256近似255,则A为小数点后的位 MOV 21H, #Nx MOV B, 21H

MUL AB ;B为整数位,A为小数点后的位 ADD A, #80H ;四舍五入 MOV A, B ADDC A, #A0 MOV 38H, A POP PSW PUSH ACC RET

5-4 试编写一段程序,将内部数据存储器30H、3lH单元内容传送到外部数据存储器1000H、1001H