1 / 25

程序一:用 SUBB 指令;将 RET 放在子程序最后。 P85- 例4.2

程序一:用 SUBB 指令;将 RET 放在子程序最后。 P85- 例4.2. 假定在外部 RAM 中有 ST1、ST2 和 ST3 共3个连续单元,其中 ST1 和 ST2 单元中分别存放着两个8位无符号二进制数,要求找出其中最大的数并存入 ST3 单元。 ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR ; MOV R2,A INC DPTR MOVX A,@DPTR ; SUBB A, R2 JNC BIG1 XCH A,R2

osmond
Download Presentation

程序一:用 SUBB 指令;将 RET 放在子程序最后。 P85- 例4.2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程序一:用SUBB指令;将RET放在子程序最后。P85-例4.2程序一:用SUBB指令;将RET放在子程序最后。P85-例4.2 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中分别存放着两个8位无符号二进制数,要求找出其中最大的数并存入ST3单元。 ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR ; MOV R2,A INC DPTR MOVX A,@DPTR ; SUBB A, R2 JNC BIG1 XCH A,R2 BIG0: INC DPTR MOVX @DPTR,A; RET BIG1: MOVX A,@DPTR ; SJMP BIG0 ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR; MOV R2,A INC DPTR MOVX A,@DPTR ; SUBB A, R2 JC BIG0 MOVX A,@DPTR ; SJMP BIG1 BIG0: MOV A,R2 BIG1: MOVX @DPTR,A ; EXIT: RET ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR ; MOV R2,A INC DPTR MOVX A,@DPTR ; SUBB A, R2 JNC BIG1 XCH A,R2 BIG0: INC DPTR MOVX @DPTR,A; SJMP EXIT BIG1: MOVX A,@DPTR ; SJMP BIG0 EXIT: RET

  2. 程序二:用CJNE指令;如果两数相等,置F0为1; 将RET放在子程序最后 ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR ; MOV R2,A INC DPTR MOVX A,@DPTR ; SUBB A, R2 JNC BIG1 XCH A,R2 BIG0: INC DPTR MOVX @DPTR,A ; RET BIG1: MOVX A,@DPTR ; SJMP BIG0 ORG 0100H START: CLR C MOV DPTR,#ST1 MOVX A,@DPTR ; MOV R2,A INC DPTR MOVX A,@DPTR ; CJNE A, 02H, BIG SETB F0 SJMP BIG1 BIG: JNC BIG1 MOV A,R2 BIG1: INC DPTR MOVX @DPTR,A ; EXIT: RET

  3. MOV A, R3 ;分支转移值送A MOV DPTR,#BRTAB ;分支入口地址表首址 MOVC A,@A十DPTR;查表 JMP @A十DPTR;转移 BRTAB: DB BR0_BRTAB;4 04H DB BRl_BRTAB ;7 07H DB BR2_BRTAB ;10 0AH DB BR3_BRTAB ;19 13H BR0: MOV A,@R0 ;1 SJMF BRE ;2 BR1: MOVX A,@R0 ;1 SJMP BRE ;2 BR2: MOV A,R1;1 ANL A,#0FH;2 ANL P2,#0F0H ;3 ORL P2,A ;2 MOVX A,@R0 ;1 BR3: MOV DPL,R0 ;从外部RAM 64KB取数 MOV DPH,R1 MOVX A,@DPTR BRE: SJMP $ 差值表(补充作业)

  4. 设A=0A8H,R0=25H,(25H)=43H,执行下列指令后,A=?要求写出过程。设A=0A8H,R0=25H,(25H)=43H,执行下列指令后,A=?要求写出过程。 ANL A,#25H;(A)=10101000/\00100101 ORL 25H,A;(25H)=01000011\/00100000 XRL A,@R0;(A)= 00100000 01100011 CPL A;A=/(01000011)=10111100=BCH

  5. 下面程序执行后,SP=?,A=?,B=?,解释每一条指令的作用,并翻译成机器代码:下面程序执行后,SP=?,A=?,B=?,解释每一条指令的作用,并翻译成机器代码: ORG 2000H; ORG 2100H; MOV SP,#40H; SUB1: MOV A,#30H; MOV DPTR,#2009H; LCALL SUB1; PUSH DPL; ADD A,#04H; PUSH DPH; MOV B,A; RET; L1:SJMP L1; ORG 2000H; ORG 2100H; 2000H:MOV SP,#40H; SUB1: MOV DPTR,#2009H ; 2003H:MOV A,#30H; PUSH DPL; 2005H:LCALL SUB1; PUSH DPH; 2008H:ADD A,#04H; RET; 200AH:MOV B,A; 200CH: L1:SJMP L1; (A)=(B)=31H (SP)=42H

  6. 设C的初值为1,ACC.7=0,P1口的内容为: 0101 1101B,P3口的内容为:1011 0110B,问执行下列程序段后,C,P1,P3口的内容有何变化? ORL C, ACC.7; (C)=1 MOV P1.0, C; P1.0=1 MOV C, P3.7; (C) =1 ANL C, ACC.7; (C) =0 MOV P3.7, C; P3.7=0 MOV C, P1.0; (C) =1 MOV P3.5, C; P3.5=1 P1=01011101B P3=00110110B

  7. Q=(X*Y+G)+(D+E)*F;其中变量X,Y,G分别为P1.0,P1.1,定时器0溢出标志TF0, D,E,F分别为20H.0, 20H.2, 外部中断方式标志IF0,输出变量Q为P1.3。请编写软件实现上述逻辑功能的程序段。 X BIT P1.0 Y BIT P1.1 G BIT TF0 D BIT 20H.0 E BIT 20H.1 F BIT IF0 Q BIT P1.3 MOV C,X ANL C,X ORL C,G MOV G,A MOV C,D ORL C,E ANL C,F ORL C,G MOV Q,C

  8. MCS-51有哪几种无条件转移指令?绝对调用和长调用指令有何区别?MCS-51有哪几种无条件转移指令?绝对调用和长调用指令有何区别? 无条件转移:LJMP addr16 AJMP addr11 SJMP rel JMP @A+PC 绝对调用:ACALL addr11 长调用 :LCALL addr16

  9. 设CY=1, A=55H,请问执行下列指令,程序的转向何处? JNC ROUT0; CPL C; JNC LOOP1; MOV A, #0FFH; LJMP ROUT1; NOP; LOOP1: JB ACC.1, LOOP2; SETB ACC.1; LOOP2: JNB ACC.3,ROUT2;转向何处ROUT2 CLR ACC.3; LOOP3: JNC ACC.4, ROUT3;

  10. 8、编程查找内部RAM的30H~50H单元中是否有0FFH这个数,若查到,则将51H单元置为01H,若没有找到,则将51H单元置为00H。8、编程查找内部RAM的30H~50H单元中是否有0FFH这个数,若查到,则将51H单元置为01H,若没有找到,则将51H单元置为00H。 MOV R0,#30H MOV R2,#21H MOV 51H,#0 LOOP: MOV A,@R0 CJNE A,#0FFH,NEXT INC 51H SJMP BCK NEXT: INC R0 DJNZ R2,LOOP BCK: RET ; 或 SJMP $ MOV R0,#30H MOV R2,#21H MOV 51H,#0 LOOP: MOV A,@R0 INC A JNZ NEXT INC 51H SJMP BCK NEXT: INC R0 DJNZ R2,LOOP BCK: RET ; 或 SJMP $

  11. 9、编程将外部RAM单元中的高3位清零,第4位、第0位置1,其余位求反。9、编程将外部RAM单元中的高3位清零,第4位、第0位置1,其余位求反。 MOVX A,@DPTR CPL A ANL A,#1FH ORL A,#11H MOV @DPTR,A

  12. P112-1、把长度为10H的字符串 从内部RAM的输入缓冲区inbuf向外部RAM的输出缓冲区outbuf进行传送,一直进行到遇见回车符CR或整个字符传传送完毕。 MOV R0,#inbuf MOV DPTR,#outbuf MOV R2,#10H LOOP:MOV A,@R0 CJNE A,#0DH,LP SJMP EXIT LP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,LOOP EXIT:RET

  13. P112-4、把一个8为二进制数以ASCII表示之(亦即“0”的位用30H表示,“1”的位用31H表示)。该数存放在内部RAM中的byte单元,变换后存放在外部RAM以buf开始的存储单元中。P112-4、把一个8为二进制数以ASCII表示之(亦即“0”的位用30H表示,“1”的位用31H表示)。该数存放在内部RAM中的byte单元,变换后存放在外部RAM以buf开始的存储单元中。 MOV R0,#buf MOV R2,#8 MOV A,byte LOOP:RLC A JC ONE MOV @R0,#30H SJMP LP1 ONE:MOV @R0,#31H LP1:INC R0 DJNZ R2,LOOP SJMP $

  14. P112-7、在外部RAM首地址table的数据表中,有十个字节的数据。编程将每个字节的最高位无条件的置1。P112-7、在外部RAM首地址table的数据表中,有十个字节的数据。编程将每个字节的最高位无条件的置1。 MOV DPTR,#table MOV R2,#10 LOOP:MOVX A,@DPTR ORL A,#80H MOVX @DPTR,A INC DPTR DJNZ R2,LOOP SJMP $

  15. P112-8、将8000H开始的有200个字节的源数据区,每隔一个单元送到4000H开始的数据区。在目的数据区中,每隔两个单元写一个数据。如遇OD(回车)则传送结束。P112-8、将8000H开始的有200个字节的源数据区,每隔一个单元送到4000H开始的数据区。在目的数据区中,每隔两个单元写一个数据。如遇OD(回车)则传送结束。 MOV DPTR,#8000H MOV R2,#100 MOV R1,#40H MOV R0,#00H LOOP: MOVX A,@DPTR CJNE A,#0DH,N1 SJMP EXIT N1: PUSH DPH PUSH DPL MOV DPH,R1 MOV DPL,R0 MOVX @DPTR,A INC DPTR INC DPTR INC DPTR MOV R1,DPH MOV R0,DPL POP DPL POP DPH DJNZ R0,N2 SJMP EXIT N2: INC DPTR INC DPTR LJMP LOOP EXIT: SJMP $

  16. 单片机用内部定时方法产生频率为100KHz等宽矩形波,假定单片机的晶振频率为 12MHz,请编程实现。 1、计算初值:因为晶振频率为 12MHz 所以1T机=1us 定时时间=0.5*10-5S=5us 方式0 :(213-x)*1us=5 x=8187D=1FFBH TH=FFH TL=1BH 2、TMOD=00H 3、程序 MOV TMOD,#00H MOV TH0,#0FFH MOV TL0,#1BH SETB TR0 LOOP: JBC TF0,LP1 SJMP LOOP LP1: MOV TL0,#1BH MOV TH0,#0FFH CPL P1.0 SJMP LOOP 1、计算初值:方式2 :(28-x)*1us=5 x=251D=FBH TH=FBH TL=FBH 2、TMOD=02H 3、程序 MOV TMOD,#02H MOV TH0,#0FBH MOV TL0,#0FBH SETB TR0 LOOP: JBC TF0,LP1 SJMP LOOP LP1: CPL P1.0 SJMP LOOP

  17. 有晶振频率为6MHz的MCS—51单片机,使用定时器0以定时方法在P1.0输出周期为400us 占空比为1 : 10的矩形脉冲,以定时工作方式2编程实现。方法一: 1、计算初值: 因为晶振频率为 6MHz 所以1T机=2us 定时时间=40us 方式2: (28-x)*2us=40 x=236D=ECH TH0=TL0=ECH 2、TMOD=02H 3、程序 MOV TMOD,#02H MOV TH0,#0ECH MOV TL0,#0ECH SETB TR0 START: SETB P1.0 MOV R2,#10 LP: JBC TF0,LP1 SJMP LP LP1: CLR P1.0 DJNZ R2,LP SJMP START

  18. 有晶振频率为6MHz的MCS—51单片机,使用定时器0以定时方法在P1.0输出周期为400us 占空比为1 : 10的矩形脉冲,以定时工作方式2编程实现。方法二: 3、程序 MOV TMOD,#02H SETB TR0 START: MOV TH0,#0ECH MOV TL0,#0ECH SETB P1.0 LP: JBC TF0,LP1 SJMP LP LP1: CLR P1.0 MOV TL0,#04CH MOV TH0,#04CH LP2: JBC TF0, START SJMP LP2 1、计算初值: 因为晶振频率为 6MHz 所以1T机=2us 定时时间=40us 方式2: (28-x)*2us=40 x=236D=ECH TH0=TL0=ECH (28-x)*2us=360 x=76D=4CH TH0=TL0=4CH 2、TMOD=02H

  19. 以定时器/计数器1进行外部事件计数。每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后,又转为计数方式,如此循环不止。假定单片机晶振频率为6MHz,请使 用方式1编程实现。 3、程序 START:MOV TMOD,#50H MOV TL1,#18H MOV TH1,#0FCH SETB TR1 LP JBC TF1,LP1 SJMP LP LP1: MOV TMOD,#10H MOV TL1,#78H MOV TH1,#0ECH LP2: JBC TF1, START SJMP LP2 1、计算初值: 因为晶振频率为 6MHz 所以1T机=2us 定时时间=10mS 方式1: (216-x)*2us=10×1000us x=60536D=EC78H TH1=ECH TL1 =78H 计数1000 方式1:(216-x)=1000 x=64536D=FC18H TH1=FCH TL1 =18H 2、定时:TMOD=10H 计数:TMOD=50H

  20. 假定单片机晶振频率为6MHz,要求每隔100ms,从外部ROM以data开始的数据区传送一个数据到Pl 输出,共传送l00个数据。要求以两个定时器串行定时方法实现。 MOV TMOD,#26H MOV TL1,#06H MOV TH1,#06H MOV TL0,#38H MOV TH0,#38H MOV DPTR,#data MOV R2,#100 SETB TR0 START: SETB TR1 LP: JBC TF1,LP1 SJMP LP LP1: SETB P3.0 CLR P3.0 LP2: JBC TF0, LP3 SJMP LP LP3: CLR TR1 MOVX A,@DPTR MOV P1,A INC DPTR DJNZ R2,START SJMP $ 4、程序: 1、计算初值: 因为晶振频率为 6MHz 所以1T机=2us 定时时间=100mS 两个定时/计数器串行定时 一个定时500us 一个计数200次 采用方式2: 方式2: (28-x)*2us=500us x=6D=06H TH1=TL1 =06H 计数200 方式2:(28-x)=200 x=56D=38H TH0= TL0 =38H 2、TMOD=26H 3、定时时刻到时,P3.0口输出脉冲信号给T0引脚,定时/计数器0开始计数,

  21. 每隔1秒钟读一次P1.0,如果所读的状态为“l”,内部RAM 10H单元加1;如果所读的状态为“0”,则内部RAM11H单元加1。假定单片机晶振频率为12MHz,请以软硬件结合方法定时实现之。 3、程序 MOV TMOD,#10H CLR A MOV 10H,A MOV 11H,A SETB TR1 START: MOV R2,#20 RE: MOV TL1,#0B0H MOV TH1,#3CH LP: JBC TF1,LP1 SJMP LP LP1: DJNZ R2,RE SETB P1.0 MOV C,P1.0 JC LP2; JB P1.0,LP2 INC 11H SJMP START LP2: INC 10H SJMP START 1、计算初值: 因为晶振频率为 12MHz 所以1T机=1us 计时时间1S 方式1最大定时小于100ms 所以取定时时间=50mS ;循环20次 方式1: (216-x)*1us=50000us x=15536D=3CB0H TH1=3CH TL1 =B0H 2、定时:TMOD=10H

  22. 以2片Intel2716给805l单片机扩展一个4KB的外部程序存储器,要求地址空间与8051的内 部ROM相衔接,请画出逻辑连接图。 P2.3 CE CE 74LS373 P0 A7~A0 A7~A0 G 2716 I 2716 II ALE D7~D0 D7~D0 80C51 P2.2~P2.0 A10~A8 A10~A8 PSEN OE OE +5V EA 1800H~1FFFH 1000H~17FFH P2.7 P2.6 P.25 P2.4 P.23 P2.2 P.21 P2.0 P0 X X X 1 0 0 0 0 00H X X X 1 0 1 1 1 FFH X X X 1 1 0 0 0 00H X X X 1 1 1 1 1 FFH 0000H~0FFFH

  23. WR RD PSEN WR OE 试以一片Intel2716和一片Intel6116组成一个既有程序存储器又有数据存储器的存储器 扩展系统,请画出逻辑连接图,并说明各芯片的地址范围。 CE CE 74LS373 A7~A0 P0 A7~A0 G 2716 6116 ALE D7~D0 D7~D0 80C51 P2.2~P2.0 A10~A8 A10~A8 OE GND EA 0000H~07FFH 0000H~07FFH 有32个映像区 P2.7 P2.6 P.25 P2.4 P.23 P2.2 P.21 P2.0 P0 X X X X X 0 0 0 00H X X X X X 1 1 1 FFH X X X X X 0 0 0 00H X X X X X 1 1 1 FFH 2716: 0000H~0FFFH 6116:

  24. WR RD PSEN OE WR 试以一片Intel2716和一片Intel6116组成一个既有程序存储器又有数据存储器的存储器 扩展系统,请画出逻辑连接图,并说明各芯片的地址范围。 P2.4 CE CE 74LS373 A7~A0 P0 A7~A0 G 2716 6116 ALE D7~D0 D7~D0 80C51 P2.2~P2.0 A10~A8 A10~A8 OE +5V EA 1000H~17FFH 0000H~07FFH 有16个映像区 有32个映像区 P2.7 P2.6 P.25 P2.4 P.23 P2.2 P.21 P2.0 P0 X X X 1 X 0 0 0 00H X X X 1 X 1 1 1 FFH X X X X X 0 0 0 00H X X X X X 1 1 1 FFH 2716: 0000H~0FFFH 6116:

  25. Y3 P2.7 Y2 P2.5 G 74HC139 P2.6 B Y1 P2.4 A Y0 P2.3 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 A12 CE CE CE CE CE CE CE CE CE CE CE CE CE CE CE CE A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 A11 P2.2 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 A10 P2.1 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 6116 6116 6116 6116 P2.0 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 A8 I Q7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 A7 G 74HC373 ALE Q0 D7-D0 D7-D0 D7-D0 D7-D0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 80C51 OE OE OE OE OE OE OE OE OE OE OE OE WE OE OE OE OE WE WE D7 WE D0 P0 +5V EA WR RD 以译码编址方式,把4片Intel 6116组成8KB的数据存储器,请画出逻辑连接图,并说明各芯片地址范围。 I II III IV P.27 P2.6 P.25 P2.4 P.23 P2.2 P.21 P2.0 P0 X X 0 0 0 0 0 0 00H X X 0 0 0 1 1 1 FFH X X 0 0 1 0 0 0 00H X X 0 0 1 1 1 1 FFH X X 0 1 0 0 0 0 00H X X 0 1 0 1 1 1 FFH X X 0 1 1 0 0 0 00H X X 0 1 1 1 1 1 FFH I: II: III: IV:

More Related