当前位置:文档之家› 单片机程序分析

单片机程序分析

有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。

要求将该字符串中每一个字符加偶校验位。

(以调用子程序的方法来实现。

)源程序如下:ORG 1000HMOV R0,#40HMOV R7,#10NEXT:MOV A,①ACALL SEPAMOV @R0,AINC R0DJNZ ②,NEXTSJMP $SEPA:ADD A,#00H③PSW.0,SRETORL A,④SRET:⑤① @R0 ② R7 ③ JNB ④ #80H ⑤ RET4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH单元)的内容如何?(8分)MOV R0,#30H ;R0=30HMOV A,@R0 ;A=5AHMOV R1,A ;R1=5AHMOV B,R1 ;B=5AHMOV @R1,P1 ;(5AH)=7FHMOV A,P1 ;A=7FHMOV 40H,#20H ;(40H)=20HMOV 30H,40H ;(30H)=20H解:每一条指令执行后的结果如注释字段所标。

最后结果为:R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。

四、程序阅读与分析题1、试阅读下面的程序,指出该程序结束后累加器ACC和寄存器TH0的值,并说明该程序完成了怎样的功能。

ORG 0000HMOV SP,#60HMOV A,#10HMOV TH0,#20HPUSH ACCPUSH TH0POP ACCPOP TH0END答:利用堆栈交换了ACC和TH0的内容,(A)=20H,(TH0)=10H2、程序段如下,试说明其功能。

MOV R0,#50HMOV R1,#60HMOV A,@R0ADD A,@R1MOV @R0,AINC R0INC R1MOV A,@R0ADDC A,@R1MOV @R0,AMOV 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,#0FFHMOV TH0,0FFH MOV TL0,#83HMOV TL0,#83H CPL P1.0SETB EA RETISETB ET0SETB TR0SJMP $四、读程序(每小题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,#73HORL P1,#38H2.下列程序段执行后,(A)=__0DH_______,(B)=_____11H____.MOV A,#0FBHMOV B,#12HDIV AB3.下列程序段执行后,(R0)=____7EH_____,(7EH)=__FFH_______,(7FH)=____3FH_____.MOV R0,#7FHMOV 7EH,#0MOV 7FH,#40HDEC @R0DEC R0DEC @R0(DPTR)=4567H,在执行下列指令后,(SP)=___0BH______,内部RAM(0AH)=____67H_____,4.已知(SP)=09H,(0BH)=___45H______PUSH DPLPUSH DPH5.下列程序中注释的数字为执行该指令所需的机器周期数,若单片机的晶振频率为6MHz,问执行下列程序需要多少时间MOV R3,#100;1LOOP:NOP ;1NOPNOPDJNZ R3,LOOP ;2RET ; 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.1ANL C,P2,0MOV 12H,CMOV,C,A CC.2ANL C,P2.7ORL C,12HMOV P1.5,CRET2.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1.解:MOV R2,#10MOV DPRT,#TABLELOOP:MOV X A,@DPRT;取一数ORL A,#80H;最高位置1MOV X @DPTR,A;写回原地址1NC DPTR;处理下一单元DJNZ R2,LOOPRET3.已知内部RAM 30H单元开始存放20H个数据,将其传送到外部RAM的0000H单元开始的存储区,请编程实现。

解:MOV R0,#30HMOV R1,#00HMOV R2,#20HLOOP:MOV A,@R0;取数MOV X @R1,A;存数1NC R01NC R1DJNZ R2,LOOPRET4.已知8个无符号数之和存于R3R4,求其平均值,结果仍存于R3R4中,请编程实现(R3为高字节)。

解:利用移位指令作除8操作,程序如下:MOV R2,#3LOOP :CLR CMOV A ,R3RRC A ;高字节除以2,末位移入C ,高位补0MOV R3,A ;暂存高字节MOV A ,R4RRC A ;低字节除以2,高字节末位移入低字节高位MOV R3,ADJNZ R2,LOOPRET5.两个字符串分别存放在首地址为42H 和52H 的内部RAM 中,字符串长度放在41H 单元,请编程比较两个字符串。

若相等,则把数字00H 送40H 单元,否则把0FFH 送40H 单元。

解:有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等MOV R0,#42HMOV R1,#52HLOOP :MOV A ,@R0CLR C ;不相等,FFH →40HSUBB A ,@R1JNZ LOOP1 ;相等时,比较下一字节INC R0INC R1DJNZ 41H ,LOOPMOV 40H ,#0 ;所有字符均相等,则两字串相等。

RETLOOP1:MOV 40H ,#0FFHRET 三.计算题(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 ,#58H2509H MOV 10H ,#0FH250CH MOV 11H ,#0BH250FH ACALL XHD ;PC+2→PC , 7~015~810~01,1,SP SP PC SP SP SP PC SP addr PC +→→⎧⎫⎪⎪+→→⎨⎬⎪⎪→⎩⎭MOV 20H,11H2514H M5A:SJMP M5AXHD:PUSH 10HPUSH 11HPOP 10HPOP 11HRET问:(1)执行POP 10H后堆栈内容?(2)执行M5A:SJMP M5A后,(SP)= (20H)=已知:片内RAM的20H中为01H,执行下列程序后(30H)=MOV A,20HINC AMOV DPTR,#2000HMOVC A,@A+DPTRCPL AMOV 30H,ASJMP $3.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20HMOV A,@R0MOV @R0,40HMOV 40H,AMOV R0,#35H问执行程序后,R0= A= 4BH= 40H=4.若PSW=00, 执行下列程序后,PSW的各位状态如何?MOV A,#0FBHMOV PSW,#10H1.数据块传送,将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H开始的连续32个单元。

ORG 1000HMOV R7,_____MOV R0, #30HMOV R1,#60HLOOP:MOV A,@R0MOV _____,AINC R0INC R1DJNZ R7, _____SJMP $END2. 将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。

ORG 1000HMOV R7,#04HMOV R0,30HCLR AMOV 41H,ALOOP:ADD A,@R0JNC NEXTINC _____NEXT:INC _____DJNZ R7,LOOPMOV 40H,ASJMP $END3.RAM中40H单元内存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD码的十位和个位放在累加器A中,百位放在R2中。

ORG 2200HMOV A,_____MOV B,#64HDIV ABMOV R2,AMOV A,_____XCH A,BDIV ABSWAP _____ORL A,BSJMP $END4.编程序将片内40H-46H单元内容的高4位清零,保持低4位不变。

ORG 1000HMOV R7,#07HMOV R0,_____LOOP:MOV A,@R0ANL A,_____MOV @R0,AINC R0DJNZ R7,LOOPSJMP $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)=5AH2)执行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 RS11 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 , #11HMOV A , R2ADD A , 20HMOV PSW , #80HSUBB A , P0XRL A , #45HMOV 40H , A2. 已知( R0 )=20H, (20H )=36H, (21H) =17H, (36H) =34H, 执行过程如下:MOV A , @R0MOV R0 , AMOV A , @R0ADD A , 21HORL A , #21HRL AMOV R2 , ARET则执行结束(R0)= (R2)=3. 执行下面一段程序;MOV SP, #60HMOV A, #10HMOV B, #01HPUSH APUSH BPOP APOP BA , B的内容是:(A)= (B)=4. 设在31H单元存有#23H,执行下面程序:MOV A, 31HANL A, #0FHMOV 41H, AMOV A, 31HANL A, #0F0HSW AP AMOV 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)←45H2.(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)=D6H3.(A)=01H (B)=10H4. (41H)=03H (42H)=02H有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。

相关主题