单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答 下载本文

“debug”工具栏中找到对应的快捷按钮。常用按钮有:运行,单步,过程单步,单步跳出,执行到当前,反汇编窗口,观察窗口,存储器窗口。其中单步调试方式特别常用。单步执行后,可以通过各个窗口观察执行结果,从而判断该条语句是否出现问题。如果程序较长,可以采用下面的方法来调试。首先,在合适的位置设置断点,方法为:在某一行上右击,弹出的快捷菜单中选择“Insert/Remove Breakpoint”。设置成功后,该行的前面会有红色方块指示。这时如果单击“运行”按钮,程序运行到断点处会自动停止。删除断点也需使用同样的方法。

如果程序的运行要依赖于外围接口,例如并行口、串行口、中断、定时/计数器等,Keil的“Peripherals”菜单中提供了一些选项,通过这些选项打开对应外围接口的对话选框,可以观察外围接口的状态,或者更改外围接口的运行情况。

习题四

4-1 51内核单片机有哪几种寻址方式?片内RAM低128字节及高128字节分别支持哪些寻址方式?片内扩展RAM、片外RAM及特殊功能寄存器分别支持哪些寻址方式?

51内核单片机的寻址方式有:立即(数)寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。

片内RAM低128字节支持直接寻址、寄存器间接寻址。 片内RAM高128字节支持寄存器间接寻址。 片内扩展RAM及片外RAM支持间接寻址。 特殊功能寄存器支持直接寻址。

4-2 区分下列指令有什么不同?

(1) MOV A,#22H和MOV A,22H

MOV A,#22H ;将立即数22H送入A寄存器中,第二操作数为立即寻址。 MOV A,22H ;把片内RAM字节地址为22H单元的内容送入A寄存器中,第二操作数为直接寻址。

(2) MOV A,R1和MOV A,@R1

MOV A,R1 ;把R1的内容送入A寄存器中,第二操作数为寄存器寻址。 MOV A,@R1 ;将寄存器R0的内容作为RAM某单元的地址,将该单元的内容传送给A寄存器,第二操作数为寄存器间接寻址。 (3) MOV A,@R1和MOVX A,@R1

MOV A,@R1 ;将寄存器R1的内容作为片内RAM某单元的地址,将该单元的内容传送给A寄存器

MOVX A,@R1 ;将寄存器R1的内容作为片内扩展或外部RAM某单元的地址,将该单元的内容传送给A寄存器

两者的区别是:MOV访问的是内部RAM,MOVX访问的是片内扩展或外部RAM。 (4) MOVX A,@R1和MOVX A,@DPTR

主要的区别在于对外输出地址的方式上。

5

如果是访问片外扩展RAM, MOVX A,@R1

只是占用P0口,输出R1中的8位地址。

而MOVX A,@DPTR要占用P0、P2口,输出DPTR中的16位地址。 (5) MOVC A,@A+DPTR和MOVX A,@DPTR

MOVC A, @A+DPTR ;功能是A寄存器的内容作为无符号数和DPTR内容相加后得到一个16位的地址,将程序存储器中该地址的内容传送给A。

MOVX A,@DPTR ;以DPTR寄存器的值作为片内扩展RAM或者片外RAM的地址,将该地址单元的内容送入A 。

两者的区别是MOVC访问的是整个ROM的64KB空间;MOVX访问的是整个片内扩展RAM或片外扩展RAM。

4-3 写出完成下列各项任务的指令。

(1) 片内RAM 30H 单元的内容送到片内RAM 50H单元中。 MOV 50H,30H

(2) 片内RAM 40H单元的内容送到片内扩展RAM 50H单元中。 ANL AUXR,#11111101B MOV A,40H

MOV DPTR,#50H MOVX @DPTR ,A

(3) 片内RAM 50H单元的内容送到片外RAM 2000H单元中。 ORL AUXR,#00000010B MOV A , 50H

MOV DPTR , #2000H MOVX @DPTR , A

(4) 片外RAM 2000H单元的内容送到片外RAM 4000H单元中。 ORL AUXR , #00000010B MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,#4000H MOVX @DPTR,A

(5) ROM 1000H单元的内容送到片外RAM 8000H单元中。 MOV DPTR,#1000H MOV A , #0

MOVC A , @A+DPTR MOV DPTR,#8000H

ORL AUXR,#00000010B MOVX @DPTR , A

(6) 将程序状态字寄存器PSW内容传送到片内扩展RAM 0D0H单元中。 ANL AUXR , #11111101B MOV A,PSW

MOV DPTR , #0D0H MOVX @DPTR , A

(7) 将片内RAM 01H~FFH单元内容清零。

6

ANL PSW , #11100111B MOV R0,#0FFH MOV A,#0

LOOP:MOV @R0,A DJNZ R0,LOOP

(8) 使片内RAM 20H 单元的b7、b6位清零,b5、b4位置1,b3、b2位取反,其余各位保持不变。 ANL 20H,#00111111B ORL 20H,#00110000B XRL 20H,#00001100B

4-4下列各条伪指令前的标号各代表的地址是多少?

ORG 0100H

TABLE:DS 4 ;TABLE代表的的地址是0100H WORD:DB 15,0FFH,30 ;WORD代表的地址是0104H BIN EQU 0200H

TAB1: DW 07H ;TAB1代表的地址是0107H

4-5 假设程序头文件中含有如下变量定义伪指令

DBUF DATA 40H BDATA DATA 60H

(1) 请指出如下指令中源操作数的寻址方式。 MOV R0,#DBUF ;立即(数)寻址 MOV R0,DBUF ;直接寻址

(2) 执行如下程序段后,片内RAM 40H~4FH单元的内容是什么?60H单元的内容又是什么? MOV BDATA,#10H MOV R0,#DBUF CLR A

LOOP: MOV @R0,A INC A INC R0

DJNZ BDATA,LOOP

执行以上程序段后,片内RAM 40H~4FH单元的内容是:0-0FH; 60H单元的内容为0。

4-6 编写一个延时10ms的子程序。

选择STC12C5A60S2单片机,系统时钟频率为12MHz,程序如下: DELAY_10ms:

MOV R7,#120 ;2T DL: MOV R6,#250 ;2T DJNZ R6,$ ;4T DJNR R7,DL ;4T RET ;4T

7

4-7编程实现

MOV C,P1.1 ORL C,P1.2 CPL C

MOV PSW.5,C

MOV C,P1.4 ANL C,/P1.3

ORL C,PSW.5

MOV P1.0,C

的逻辑运算。

4-8 将存放在片内RAM 51H、52H和片外RAM 2000H、2001H的四位BCD码相加,结果存放在片内RAM 50H、51H、52H单元中(假设低位字节存放在高地址中,高位字节存放在低地址中)。

ORL AUXR,00000010B

MOV DPTR,#2001H

MOVX A,@DPTR ADD A,52H DA A

MOV 52H,A

MOV DPTR ,#2000H MOVX A,@DPTR ADDC A,51H DA A MOV 51H,A MOV A,#00H ADDC A,#00H MOV 50H,A

4-9编程实现将片内扩展RAM 0200H~0220H单元的内容,全部移到片内RAM 30H单元开始的位置,并将原位置清零。

MOV R0,#30H MOV DPTR,#0200H MOV R1,#21H

ANL AUXR , #11111101B LOOP:MOVX A,@DPTR

MOV @R0,A MOV A,#0

MOVX @DPTR,A INC R0 INC DPTR

8