搜索
您的当前位置:首页正文

单片机程序分析

来源:欧得旅游网
有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。要求将该字符串中每一个字符加偶校验位。(以调用子程序的方法来实现。)

源程序如下:

ORG 1000H MOV R0,#40H MOV R7,#10 NEXT: MOV A, ① ACALL SEPA MOV @R0,A INC R0

DJNZ ② ,NEXT SJMP $ SEPA: ADD A,#00H

③ PSW.0,SRET ORL A, ④ SRET: ⑤

① @R0 ② R7 ③ JNB ④ #80H ⑤ RET

4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH单元)的内容如何?(8分) MOV R0,#30H ;R0=30H MOV A,@R0 ;A=5AH MOV R1,A ;R1=5AH MOV B,R1 ;B=5AH MOV @R1,P1 ;(5AH)=7FH MOV A,P1 ;A=7FH MOV 40H,#20H ;(40H)=20H MOV 30H,40H ;(30H)=20H

解:每一条指令执行后的结果如注释字段所标。最后结果为:R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。

四、程序阅读与分析题

1、试阅读下面的程序,指出该程序结束后累加器ACC和寄存器TH0的值,并说明该程序完成了怎样的功能。 ORG 0000H MOV SP,#60H MOV A,#10H MOV TH0,#20H PUSH ACC PUSH TH0 POP ACC POP TH0 END

答:利用堆栈交换了ACC和TH0的内容,(A)=20H,(TH0)=10H

1

2、程序段如下,试说明其功能。 MOV R0,#50H MOV R1,#60H MOV A,@R0 ADD A,@R1 MOV @R0,A INC R0 INC R1

MOV A,@R0 ADDC A,@R1 MOV @R0,A MOV 00H,C

答:双字节无符号数加法。被加数存放在内部RAM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中。

五、综合应用题

3、设80C51单片机晶振频率为6MHz,定时器T0工作于方式1。要求80C51以中断方式工作并在P1.0引脚输出周期为500微秒的方波。试:计算初值、编写含有初始化功能的主程序和完成方波输出的中断服务程序。 答:机器周期为2微秒。定时时间250微秒。需要计数N=125 初值为65536-125=65411=FF83H,所以(TH0)=FFH,(TL0)=83H 工作方式设置:0000 0001B,即(TMOD)=01H

主程序: 中断服务程序: (整体结构!) MOV TMOD,#01H MOV TH0,#0FFH MOV TH0,0FFH MOV TL0,#83H MOV TL0,#83H CPL P1.0 SETB EA RETI SETB ET0 SETB TR0 SJMP $

四、读程序(每小题4分,共20分) 1.执行下列程序段中第一条指令后,(1)(P1.7)=__0__ (P1.3)=__0___,(P1.2)=____0_____;执行第二条指令后,(2)(P1.5)=_____1____,(P1.4)=_____1____,(P1.3)=______1___. ANL P1,#73H ORL P1,#38H 2.下列程序段执行后,(A)=__0DH_______,(B)=_____11H____. MOV A,#0FBH MOV B,#12H DIV AB

3.下列程序段执行后,(R0)=____7EH_____,(7EH)=__FFH_______,(7FH)=____3FH_____. MOV R0,#7FH MOV 7EH,#0 MOV 7FH,#40H

2

DEC @R0 DEC R0 DEC @R0 4.已知(SP)=09H,(DPTR)=4567H,在执行下列指令后,(SP)=___0BH______,内部RAM(0AH)=____67H_____,(0BH)=___45H______ PUSH DPL PUSH DPH

5.下列程序中注释的数字为执行该指令所需的机器周期数,若单片机的晶振频率为6MHz,问执行下列程序需要多少时间

MOV R3,#100;1 LOOP:NOP ;1 NOP NOP

DJNZ R3,LOOP ;2 RET ; 2

解:一个机器周期为2μs

执行程序所需时间T=2μs*(5×100+3)=1006μs≈1ms 五、编程题(每小题4分,共20分)

1.请使用位操作指令,实现下列逻辑操作: P1.5=ACC.2∧P2.7∨ACC.1∧P2.0

解:.先进行与操作,再进行或操作程序如下: MOV C,ACC.1 ANL C,P2,0 MOV 12H,C

MOV,C,A CC.2 ANL C,P2.7 ORL C,12H MOV P1.5,C RET

2.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1. 解: MOV R2,#10

MOV DPRT,#TABLE

LOOP: MOV X A,@DPRT;取一数 ORL A,#80H;最高位置1

MOV X @DPTR,A;写回原地址 1NC DPTR;处理下一单元 DJNZ R2,LOOP RET

3.已知内部RAM 30H单元开始存放20H个数据,将其传送到外部RAM的0000H单元开始的存储区,请编程实现。

解:MOV R0,#30H MOV R1,#00H MOV R2,#20H

LOOP: MOV A,@R0;取数 MOV X @R1,A;存数 1NC R0 1NC R1

3

DJNZ R2,LOOP RET

4.已知8个无符号数之和存于R3R4,求其平均值,结果仍存于R3R4中,请编程实现(R3为高字节)。 解:利用移位指令作除8操作,程序如下: MOV R2,#3 LOOP:CLR C MOV A,R3

RRC A ;高字节除以2,末位移入C,高位补0 MOV R3,A ;暂存高字节 MOV A,R4

RRC A ;低字节除以2,高字节末位移入低字节高位 MOV R3,A DJNZ R2,LOOP RET

5.两个字符串分别存放在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。若相等,则把数字00H送40H单元,否则把0FFH送40H单元。

解:有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等 MOV R0,#42H MOV R1,#52H

LOOP:MOV A,@R0

CLR C ;不相等,FFH→40H SUBB A,@R1

JNZ LOOP1 ;相等时,比较下一字节 INC R0 INC R1

DJNZ 41H,LOOP

MOV 40H,#0 ;所有字符均相等,则两字串相等。 RET

LOOP1:MOV 40H,#0FFH RET三.计算题(22分) 1.(A)=3BH,执行ANL A,#9EH指令后,(A)= (CY)=

2.JNZ REL为2B指令,放于1308H,转移目标地址是134AH,求偏移量REL= 3.若(A)=C3H,(R0)=AAH,执行ADD A,R0后,(A)= (CY)= (OV)= (AC)= 4.若(A)=50H,(B)=A0H,执行MUL AB后,(A)= (B)= (CY)= (OV)=

5.SJMP 0E7H为2B指令,放于F010H,目标地址= 四.阅读并分析程序(28分)

1.2506H M5:MOV SP,#58H 2509H MOV 10H,#0FH 250CH MOV 11H,#0BH

250FH ACALL XHD ;PC+2PC , SP1SP,PC7~0SP

SP1SP,PC15~8SPaddrPC10~0 4

MOV 20H,11H

2514H M5A:SJMP M5A XHD:PUSH 10H PUSH 11H POP 10H POP 11H RET 问:(1)执行POP 10H后堆栈内容? (2)执行M5A:SJMP M5A后,(SP)= (20H)= 2.A程序存储空间表格如下: 地址 内容 2000H 3FH 2001H 06H 2002H 5BH 2003H 4FH 。。。。。 。。。。。 已知:片内RAM的20H中为01H,执行下列程序后(30H)= MOV A,20H INC A

MOV DPTR,#2000H MOVC A,@A+DPTR CPL A

MOV 30H,A SJMP $

3.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20H

MOV A,@R0 MOV @R0,40H MOV 40H,A MOV R0,#35H

问执行程序后,R0= A= 4BH= 40H= 4.若PSW=00, 执行下列程序后,PSW的各位状态如何?

MOV A,#0FBH MOV PSW,#10H ADD A,#7FH CY AC OV P OF RS1 五.程序填空(10分) 1.数据块传送,将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H开始的连续32个单元。 ORG 1000H

MOV R7,_____

MOV R0, #30H MOV R1,#60H

LOOP:MOV A,@R0 MOV _____,A INC R0 INC R1

DJNZ R7, _____ SJMP $ END

2. 将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。

5

ORG 1000H

MOV R7,#04H MOV R0,30H CLR A

MOV 41H,A

LOOP: ADD A,@R0 JNC NEXT

INC _____

NEXT:INC _____

DJNZ R7,LOOP MOV 40H,A SJMP $ END

3. RAM中40H单元内存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD码的十位和个位放在累加

器A中,百位放在R2中。 ORG 2200H MOV A,_____ MOV B,#64H DIV AB

MOV R2,A MOV A,_____ XCH A,B DIV AB SWAP _____ ORL A,B SJMP $ END

4. 编程序将片内40H-46H单元内容的高4位清零,保持低4位不变。 ORG 1000H MOV R7,#07H

MOV R0,_____

LOOP:MOV A,@R0 ANL A,_____ MOV @R0,A INC R0

DJNZ R7,LOOP SJMP $

END 三.计算题:(22分) (1)(A)=1AH (CY)=不受影响 (2)REL=40H (3)(A)= 6DH (CY)= 1 (OV)=1 (AC)=0 (4)(A)=00H (B)=32H (CY)= 总为0 (OV)=1 (5)目标地址=EFF9H

四:阅读并分析程序(28分)

(1)1)执行POP 10H后堆栈内容?(SP)=5AH

6

2)执行M5A:SJMP M5A后,(SP)=58H (20H)=0FH (2)(30H)=5BH

(3)R0=35H A=7FH 4BH=20H 40H=7FH (4)

CY AC OV P OF RS1 1 1 0 1 0 1 五、 程序填空(10分)

1._#20H_ __R1___ _LOOP____ 2.__41H___ __R0___

3.__40H___ _#0AH____ __A___ 4._#40H____ __#0FH___

四、分析程序并写出结果:(共4题,每题5分)

1. 已知(R0)=20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后( 40H ) = MOV @R0 , #11H MOV A , R2 ADD A , 20H

MOV PSW , #80H SUBB A , P0 XRL A , #45H MOV 40H , A

2. 已知 ( R0 )=20H, (20H )=36H, (21H) =17H, (36H) =34H, 执行过程如下: MOV A , @R0

MOV R0 , A MOV A , @R0 ADD A , 21H ORL A , #21H RL A MOV R2 , A RET

则执行结束(R0)= (R2)= 3. 执行下面一段程序;

MOV SP, #60H MOV A, #10H MOV B, #01H PUSH A PUSH B POP A POP B

A , B的内容是:(A)= (B)= 4. 设在31H单元存有#23H,执行下面程序: MOV A, 31H ANL A, #0FH MOV 41H, A MOV A, 31H

7

ANL A, #0F0H SWAP A

MOV 42H, A

则(41H)= (42H)=

1.(20H)←11H (A)←20H

(A)←(A)+(20) (CY)=1

(A)-(P0)-(CY)→(A)即(A)←00H (A)+45H→(A)即(A)←45H (40H)←45H 2.(A)←((R0)) (A)=36H (R0)←(A) (R0)←36H (A)←((R0)) (A)←34H

(A)←(A)+(21H) 34H+17H=4BH (A)←(A) 21H 4BH 21H=6BH (A)←D6H (R2)←D6H

(R0)=36H (R2)=D6H 3.(A)=01H (B)=10H

4. (41H)=03H (42H)=02H

有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。要求将该字符串中每一个字符加偶校验位。(以调用子程序的方法来实现。)

源程序如下: ORG 1000H MOV R0,#40H MOV R7,#10 NEXT: MOV A, ① ACALL SEPA MOV @R0,A INC R0 DJNZ ② ,NEXT SJMP $ SEPA: ADD A,#00H ③ PSW.0,SRET ORL A, ④ SRET: ⑤

① @R0 ② R7 ③ JNB ④ #80H ⑤ RET

1.执行下列程序段后,(P1)=_______。9BH MOV P1,#5DH CPL P1.1 CPL P1.2 CLR P1.6 SETB P1.7

1、设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)= 0E7H ORL A,#27H ANL A,28H XCHD A,@R0

8

CPL A

2、设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。 SETB C

ADDC A, 20H (A)= 82H (CY)= 0 (AC)= 1 RLC A (A)= 04H (CY)= 1 (P)= 1

MUL AB (A)= 08H (B)= 00H (OV)= 0

2.执行下列程序段后,(A)=_______,(CY)=____。(A)=8BH(或10001011B) (CY)=不影响 MOV A,#C5H RL A

3.下列程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。 MOV R0,#7EH MOV 7EH,#0FFH MOV 7FH,#40H 1NC @R0 1NC R0

1NC @R0 (R0)=7FH (7EH)=00H (7FH)=41H

4.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALL SUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)= ____。

. (PC)=0345H (61H)=25H (62H)=01H 5.阅读下列程序,说明其功能。 (data)×10操作 MOV R0,#data MOV A,@R0 RL A

MOV R1,A RL A RL A

ADD A,R1 MOV @R0,A RET

二、分析程序并写出结果:(每小题5分,共20分) 1. 已知(R0)=20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后 MOV @R0 , #11H MOV A , R2 ADD A , 20H

MOV PSW , #80H ;含义? SUBB A , P0 MOV 40H , A 结果是:( 40H ) =

9

(20H)←11H (A)←20H

(A)←(A)+(20) (CY)=1

(A)-(P0)-(CY)→(A)即(A)←00H (A)+45H→(A)即(A)←45H (40H)←45H

2. 已知 ( R0 )=20H, (20H )=36H, (21H) =17H, (36H) =34H, 执行过程如下: MOV A , @R0

MOV R0 , A

MOV A , @R0 ADD A , 21H ANL A , #21H ;与 RL A ;左移 MOV R2 , A

则执行结束(R0)= 36H (R2)= D6H

说明下列伪操作的作用

ORG 2000H (定义地址起点为2000H) LIMIT EQU 200 (LIMIT等值于200)

HBD2 EQU HBDTW (HBD2等值于HBDTW)

JATB:DW 2200H (定义字,标号JATB处连续存放两个字节:00 22 ) 2)经过汇编后,以下各条语句的标号应取什么值? ORG 2800H

TABLE:DS 0EH (2800H~280EH保留) WORD: DB ‘WORKER’, 15, 0A (280FH: 57H 4FH 52H 4BH 45H 52H 15H 0AH )

FANG EQU 100H (伪指令不占内存) ONE EQU 3400H (伪指令不占内存)

BEGIN: LD A,R0 (程序开始的地址:2817H) 3)说明执行如下指令后,寄存器A、中的内容。 MOV A,#78H SWAP A

ANL A,#0FH (A=07H)

1说明下列程序的功能 ① CLR A

MOV R0,#30H

10

LOOP0: CJNE @R0,#00H,LOOP1 INC A LOOP1: INC R0

CJNE R0,#3FH,LOOP0 HERE: SJMP HERE

结果A中的内容是什么?(是30H~3EH中0的个数) ② MOV SP,#30H PUSH 50H POP 40H

该程序起什么作用?(将50H单元的内容传送到40H单元) ③ 设A的内容为BCD码68H,执行下列指令: A中结果是什么?

ADD A,#09H ;A中内容=(77H)还是(71H) DA A

1、内部RAM数据及P1口数据如下图所示,试分析下段指令执行后的结果。

MOV A,#03H; A= 03H SWAP A; A= 30H

MOV R0,A; A= 30H ;R0= 30H MOV A,@R0; A= 50H ANL A,#F0H; A= 50H MOV R1,A; R1= 50H MOV B,@R1; B= 10H

MOV @R1,P1; R1= 50H ; (50H)= E6H MOV P2,P1; P2= E6H

11

CPL P1.4; P1= F6H ORL C,P1.4; C= 1 上段指令执行后:(10H)= 00H ;(30H)= 50H ;(50H)= E6H ; P1= F6H ; P2= E6H 。

3、简述80C51的寻址方式?各涉及哪些存储器空间?

答:立即数寻址:程序存储器ROM。

直接寻址:片内RAM低128B和特殊功能寄存器。 寄存器寻址:R0~R7,A,B,C,DPTR

寄存器间接寻址:片内RAM低128B,片外RAM。 变址寻址:程序存储器64KB。

相对寻址:程序存储器256B范围。

位寻址:片内RAM的20H~2FH字节地址,部分特殊功能寄存器。

4、简述程序状态字寄存器PSW中各位的含义。

答:程序状态字寄存器PSW:程序状态字寄存器PSW:是一个8位寄存器,用来存放当前指令执行后操作结果的某些特征,以便为下一条指令的执行提供依据。定义格式如下。其中,CY:进借位标志;AC:辅助进借位标志; F0:软件标志;OV:溢出标志;F1:用户标志位; P:奇偶校验标志;RS1、RS0:工作寄存器组选择(如表所示)。

5、简述单片机系统扩展的基本原则和实现方法。

答:(1)以P0口线作地址/数据总线

P0口作系统的低8位地址线。在实际应用时,先把低8位地址送锁存锁存器暂存,然后再由地址锁存器给系统提供低8位地址,而把P0口作为数据线使用。

(2)以P2口线作高位地址总线

在实际应用中,高位地址线并不固定为8位,需要几位就从P2口中引出几条口线。 (3)控制信号线

①使用ALE作用地址锁存的选通信号,以实现低8位地址的锁存; ②以信号作为扩展程序存储器的读选通信号; ③以信号作为内、外程序存储器的选择信号;

④以和作为扩展数据存储器和I/O端口的读/写选通信号。执行MOVX指令时,这两个信号分别自动有效。

1(当x0时)3、符号函数y0(当x0时),设变量X存于VAR单元中,函数值y存于FUNC单元中,要求编写按上述函

1(当x0时)数式给y赋值得程序。 解:ORG 1000H VAR: DATA 30H FUNC:DATA 31H

MOV A,VAR JZ COMP

JNB ACC.7,POSI MOV A,#0FFH SJMP COMP POSI: MOV A,#1 COMP: MOV FUNC,A

12

SJMP $

13

因篇幅问题不能全部显示,请点此查看更多更全内容

Top