1 / 23

MCS-51 习题

MCS-51 习题. 题目: 设 (A)=0FH , (R0)=30H 内部 RAM (30H)=0AH , (31H)=0BH (32H)=0CH 请写出在执行各条列指令后,所示单元的内容 MOV A,@R0 ; (A)= MOV @R0,32H ; (30H)= MOV 32H, A ; (32H)= MOV R0,#31H ; (R0)=

love
Download Presentation

MCS-51 习题

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. MCS-51习题 题目:设 (A)=0FH , (R0)=30H 内部RAM (30H)=0AH, (31H)=0BH (32H)=0CH 请写出在执行各条列指令后,所示单元的内容 MOV A,@R0 ;(A)= MOV @R0,32H ;(30H)= MOV 32H, A ;(32H)= MOV R0,#31H ;(R0)= MOV A, @R0 ;(A)=

  2. 题目:用数据传输指令来完成下列要求的数据传送。题目:用数据传输指令来完成下列要求的数据传送。 (1)R0内容输出到R1; (2)外部RAM 20H单元的内容传送到A; (3)内部RAM 30H单元的内容送到R0; (4)外部RAM 30H单元的内容送内部RAM 20H; (5)外部RAM 1000H单元的内容送内部RAM 20H ; (6)程序存储器ROM 2000H单元的内容送到R1; (7)程序存储2000H单元的内容送内部RAM 20H; (8)程序存储器2000H单元的内容送外部RAM 30H (9)程序存储2000H单元的内容送外部RAM 1000H

  3. MOV DPL,#00H MOV R7, #0FFH LOOP: MOV DPH,#10H MOVX A, @DPTR MOV DPH,#20H MOVX @DPTR,A INC DPL ;此题中DPL可公用 DJNZ R7,LOOP END 题目:编写程序,把外部RAM 1000H~10FFH区域 内的数据逐个搬到从2000H开始的区域。

  4. 题目:设内部RAM (30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,请注释每条指令执行后的结果 MOV R0,#30H ;(R0)= MOV A, @R0 ;(A)= MOV R1, A ;(R1)= MOV B, R1 ;(B)= MOV @R1, P1 ;(5AH)= MOV A, P1 ;(A)= MOV 40H, #20H ;(40H)= MOV 30H, 40H ;(30H)=

  5. MOV R0, #20H MOV R7, #10H ;循环次数 LOOP: MOV @R0, #00H INC R0 DJNZ R7, LOOP ; END 题目:编写一循环程序,将内部RAM的20H~2FH共16个连续单元清零。

  6. 题目:分析下面个程序段中指令的执行结果 (1) MOV SP,#50H MOV A,#0F0H MOV B,#0FH PUSH ACC ;(SP)=;(51H)= PUSH B ;(SP)=;(52H)= POP B ;(SP)=;(B)= POP ACC ;(SP)=;(A)=

  7. (2) MOV A,#30H MOV B,#0AFH MOV R0,#31H MOV 30H,#87H XCH A,R0 ;(A)=;(R0)= SWAP A ;(A)=

  8. (3) MOV A, #83H MOV R0H, #47H MOV 47H, #34H ANL A, #47H ;(A)= ORL 47H, A ;(A)=;(47H)= XRL A, @R0 ;(A)=

  9. 题目:编写一循环程序,求出内部RAM 20H单元二进制数中含"1"的个数,并将结果存入21H单元。 MOV 21H,#00H MOV A, 20H MOV R7, #08H LOOP: RLC A ;左循环一位,最高位到C JNC NEXT ;C为0 INC 21H ;C为1,21H内容+1 NEXT: DJNZ R7,LOOP END

  10. 题目:编写一循环程序,查找内部RAM 30H~50H单元中出现FFH个数,并将查找搭结果存入51H单元。 MOV R0, #30H ;数据区首地址 MOV R7, #20H ;数据个数 MOV 51H,#00H ;先设只有0个0ffh LOOP: MOV A, @R0 INC R0 CJNE A,#0FFH,NEXT ;比较,不等于0ffh转NEXT ;等于0ffh,继续执行 INC 51H NEXT: DJNZ R7,LOOP END

  11. 4.3 查表程序设计 1. 用DPTR查表(查0~9平方表) 1000 C083 TA: PUSH DPH 1002 C082 PUSH DPL 1004 902000 MOV DPTR, #TAB 1007 93 MOVC A, @A+DPTR 1008 D082 POP DPL 100A D083 POP DPH 100C 22 RET ORG 2000H TAB: DB 00H, 01H, 04H, 09H 2000 00 2001 01 2002 04 2003 09

  12. 2. 用PC查表(查0~9平方表) ORG 1000H 1000 C083 TA: ADD A, #01H ; # 01H 为偏移量 1002 83 MOVC A, @A+PC 1003 22 RET 1004 00 DB 00H, 01H, 04H, 09H 1005 01 END 1006 04 1007 09 偏移量=表首地址-(查表指令下一条指令地址) =1004H - 1003H =01H

  13. 4.4 循环程序设计 1. 延时50ms程序 DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2: DJNZ R6, DEL2 ;125*2=250us DJNZ R7, DEL1 ; 0.25ms*200=50ms RET 使用12MHz晶振时,一个机器周期为1us, 执行DJNZ指令为2us,加其他指令的时间 (250+1+2)*200+1=50.301ms 精确计算见 P327

  14. 2. 计算几个数据的和 例题:对内部RAM 50h开始的10个无符号数求和。

  15. 源程序: ADD1: MOV R7, #10 ;循环次数n=10 MOV R3, #0 ;存放结果的高8位 MOV R4, #0 ;存放结果的低8位 MOV R0, #50H ;求和的数据存放在从内部RAM 50h开始的 ;单元中,。注意:(50h)=?不知道 LOOP: MOV A, R4 ; ADD A, @R0 ;(R4)+(5?H)→A MOV R4, A ; 结果送回R4 CLR A ; ADDC A, R3 ; 把进位位C加到高8位去 MOV R3, A INC R0 ; 为下一轮循环作准备 DJNZ R7, LOOP END

  16. 解释: 高8位 低8位 (R3) (R4) + (50h) C (A) MOV A, R4 ADD A, @R0 MOV R4, A CLR A ADDC A, R3 MOV R3, A (50h)中是什么,不知道, 不能用ADD A,#50H

  17. CJNE A,#data,rel;(A)=#data,继续 Cy←0 (A)>#data, 转 Cy←0 (A)<#data, 转 Cy←1 特点:只有<时,Cy←1 4.5 分支程序设计 • CJNE A, #14H, LOOP • LOOP: JC NEXT … … 基本分支程序: (1)若(A)< 14H, 转NEXT,否则继续执行 (2)若(A)≤ 14H, 转NEXT, 否则继续执行 (3)若(A)≥ 14H, 转NEXT, 否则继续执行 (4)若(A)> 14H, 转NEXT, 否则继续执行 (A)≤ 14H 相当于(A) < 15H • CJNE A, #15H, LOOP • LOOP: JC NEXT … … • CJNE A, #14H, LOOP • LOOP: JNC NEXT … … (A)> 14H 相当于(A) ≥ 15H • CJNE A, #15H, LOOP • LOOP: JNC NEXT … …

  18. 例1:按下面公式编写程序, x为无符号数,存在20h单元 y存放在21h单元。 ORG 0030H MOV A, 20H CJNE A, #21H, LOOP1 LOOP1: JC NEXT1 CJNE A, #40H, LOOP2 LOOP2: JNC NEXT2 MOV B, #2 MUL AB AJMP NEXT2 NEXT1: CPL A NEXT2: MOV 21H, A END 最终结果存在 21h中 分支程序例1

  19. 从内部RAM 22h单元开始存有一个无符号数数据块,长度n存于21h中。求出数据块中的最小数,存于20h中。 ORG 0030H MOV R0, #22H ;数据块起始地址 MOV R1, 21H ;数据个数n MOV 20H,#0FFH ; 最大数 LOOP: MOV A, @R0 ; 取新数 INC R0 ; 为取下一个新数作准备 CJNE A, 20H, LOOP1 ; 与原最大数比较 LOOP1:JNC NEXT ; 大,原最小数保留 MOV 20H, A ; 小,改变最小数 NEXT: DJNZ R1, LOOP ;循环 END 初始化 取新数 y N N y y <x n-1=0? y END y → x 分支程序例2:

  20. 例:行李计价: 当G≤5,M=G×3; 当G>5,M=G×3+(G-5)×(5-3) FRT: MOV A,40H ;取行李重量G放在40H MOV R3,A MOV B,#03H ;M=G×3 MUL AB MOV R2,A ;暂存3 × G在R2 MOV A,R3 ;取回G CJNE A,#06H,L1 ;G≤5 ? L1: JC WETC ;是,转至WETC SUBB A,#05H ;否则M=3G+2(G-5) RLC A ADD A,R2 WETC:MOV 41H,A ;最后结果M存41H end

  21. 根据R7中的内容,转向各个子程序。 R7=0,转入Prog0 R7=1,转入Prog1 R7=2,转入Prog2 …… R7=n,转入Progn ORG 0030H JUMP1: MOV DPTR, #TAB CLR A MOV A, R7 ADD A, R7 AJMP @A+DPTR ORG 0100H TAB: AJMP Prog0 AJMP Prog1 AJMP Prog2 …… R7= ? n 1 0 处理 n 处理 1 处理 0 4.6 散转程序设计 *AJMP … 即把PC指向子程序的起始地址; *R7 x 2 是AJMP @A+DPTR的机器码匹配;此处 n<127; *如用LJMP @A+DPTR,则R7 x 3, 程序还要作相应修改。

  22. 例:8位二进制转换成BCD码。(用十进制表达的二进制码)例:8位二进制转换成BCD码。(用十进制表达的二进制码) ;程序名:BINBCD1 ;功能: 0~FFH内的二进制数转换为BCD数 ;入口: A存要转换的二进制数 ;出口: R0 存放BCD数 百、十、个位数的地址 BINBCD1: MOV B, #100 DIV AB MOV @R0, A INC R0 MOV A, #10 XCH A, B ;(A)=原(B),(B)=10 DIV AB MOV @R0, A INC R0 XCH AB MOV @R0, A RET 4.7 数制转换程序设计

  23. 祝同学们国庆节愉快!Happy National Day!

More Related