单片机原理接口及应用李群芳版习题解答参考 联系客服

发布时间 : 星期三 文章单片机原理接口及应用李群芳版习题解答参考更新完毕开始阅读aae8879485868762caaedd3383c4bb4cf7ecb7ff

MOV @R1,A END INC R1

3.7 片内RAM间址寄存器只能有R0和R1两个,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第三个地址,POP和PUSH在指令可自动修改地址。R0指正数存放地址和R1指负数存放地址 ,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。

ORG 0000H MOV R7,#10H MOV A,#0 MOV @R0,A MOV R4,A INC R0 MOV R5,A AJMP DJ MOV R6,A NE: INC R5 MOV R0,#40H MOV @R1,A MOV R1,#50H INC R1 MOV SP,#3FH AJMP DJ NEXT: POP ACC ZER0: INC R6 JZ ZER0 DJ: DJNZ R7,NEXT JB ACC.7,NE SJMP $ INC R4 END 3.8 可直接用P标志判断(JB P ,ret)

ORG 0000H

MOV A,40H JB P,EN ;奇数个1转移 ORL A,#80H ;偶数个1 最高位加“1” EN: SJMP $

3.9 取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于

模的补数。用取反加1求补也可用模(00H)减该数的方法求补。 ORG 0000H MOV R7,#03H AB: INC R0 MOV R0,#DAT A MOV A,@R0 MOV A,@R0 CPL A CPL A ADDC A,#0 ADD A,#01 DJNZ R7,AB MOV @R0,A SJMP $

3.10 16个单字节累加应用ADD指令而不能用ADDC指令,和的低位存A,当和超过一个字节,和的高

字节存于B,并要加进低位相加时产生的进位,16个单字节加完后,采用右移4次进行除十六求平均值的运算,商在BUF2单元,余数在BUF2-1单元。

ORG 0000H MOV BUF2,A MOV R7,#0FH MOV BUF2-1,#0 MOV R0,#BUF1 NEX: CLR C MOV B,#0 MOV A,B MOV A,@R0 RRC A MOV R2,A MOV B,A NEXT: MOV A,R2 MOV A,BUF2

INC R0 RRC A ADD A,@R0 MOV BUF2,A MOV R2,A MOV A,BUF2-1 MOV A,B RRC A ADDC A,#0 MOV BUF2-1,A MOV B,A DJNZ R6,NEX DJNZ R7,NEXT SJMP $ ;以上完成求和 ;以上完成除十六运算

MOV R6,#04H

3.11 将20H单元的内容分解为高4位和低4位,根据是否大于9分别作加37H和30H处理。

5

ORG 0000H MOV 21H,A MOV A,20H SJMP $ ANL A,#0F0H ASCII: CJNE A,#0AH,NE SWAP A NE: JC A30 ACALL ASCII ADD A,#37H MOV 22H,A RET MOV A,20H A30: ADD A,30H ANL A,#0FH RET ACALL ASCII

3.12 要注意,位的逻辑运算其中一个操作数必须在C。

ORG 0000H CPL C

MOV C,20H ANL C,2FH CPL C ORL C,/2FH 3.13 ORG 0000H MOV C,ACC.3 ANL C,P1.4 ANL C,/ACC.5 MOV 20H,C MOV C,B.4 CPL C

ANL C,/P1.5 ORL C,20H MOV P1.2,C SJMP $ END

ANL C,53H MOV P1.0,C

SJMP $

END 6

3.14 设一字节乘数存放在R1,三字节的被乘数存放在data开始的内部RAM单元,且低字节存放

在低位地址单元,R0作为被乘数和积的地址指针,用MUL指令完成一字节乘一字节,每一次部分积的低位加上一次部分积的高位,其和的进位加在本次部分积的高位上,并暂存,三字节乘一字节共需这样三次乘、加、存操作,以R7作循环三次的计数寄存器。 ORG 0000H

MOV R7,#03H MOV R0,#data MOV R2,#0 MOV B,R1 MUL AB ADD A,R2 MOV @R0,A

MOV A,#0 ADDC A,B MOV R2,A INC R0 DJNZ R7,NEXT MOV @R0,B SJMP $ END

NEXT: MOV A,@R0

第4章、并行接口P0-P3和单片机的中断系统

4.1~4.3 参考教材4.1节

4.4 用P1.7监测按键开关,P1.0引脚输出正脉冲,正脉冲的产生只需要将P1.0置零、置1、延时、再置零即可。P1.0接一示波器可观察波形。如果再接一发光二极管,可观察到发光二极管的闪烁。电路设计可参考图4.4 汇编语言程序

ORG 0000H

ABC: CLR P1.0 SETB P1.7

JB P1.7,$ ;未按键等待

JNB P1.7,$ ;键未弹起等待 SETB P1.0 MOV R2,#0 NOP

DJNZ R2,DAY SJMP ABC

图4.4

DAY: NOP

4.5 电路见图4.5, 初始值送0FH到P1, 再和0FFH异或从P1口输出,或使用SWAP A指令,然后从P1口输出,循环运行,要注意输出后要延时。 汇编语言程序

ORG 0000H

MOV A,#0FH ABC: MOV P1,A

ACALL D05 SWAP A SJMP ABC

D05: MOV R6,250 DY: MOV R7,250 DAY: NOP

图4.5

7

NOP

DJNZ R7,DAY DJNZ R6,DY RET END

4.6 如使用共阴极数码管,阴极接地,阳极a~g分别接P0~P3的某个口的7位,将0~F的段码列

成表,表的内容顺次从该口输出。如数码管接P3口。 汇编语言程序

NEXT:

DAY:

ORG 0000H MOV DPTR,#TAB MOV A,R0

MOVC A,@A+DPTR MOV P3,A MOV R7,#0 NOP

TAB:

NOP

DJNZ R7,DAY INC R0

CJNE R0,#10H,NEXT SJMP AGAIN

DB 3FH,06H… ;段码表(略) END

AGAIN: MOV R0,#0

4.7电路设计见图4.7,编程如下:

ORG 0000H

MOV A,#08H MOV DPTR,#TAB MOV P1,A MOV R2,#08H

MOVC A,@A+DPTR

AGAIN: MOV A,#01 NEXT: MOV P3,A

ACALL DAY RL A

CJNE A,#10H,NEXT DJNZ R2,AGAIN SJMP $

图4.7

END

TAB: DB 3FH,06H···

4.8 P1口的八根线接行线,输出行扫描信号,

P3口的八根线接列线,输入回馈信号。 见图4.8。 4.9~4.12参见4.2节 4.13 电路设计见图4.13

汇编语言程序

ORG 0000H

AJMP MAIN ORG 0003H

RL A ;中断服务 MOV P1,A RETI

图4.8

8