单片机课后作业答案(万福君)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 第 3 章 MCS-51 指令系统
1.1.1 3-4
设(70H)=60H,(60H)=20H,P1 口为输入口,当前输入状态为 B7H,执行下面程序:
MOV MOV MOV MOV MOV MOV R0, #70H A, @R0 R1, A B, @R1 P1, #0FFH @R0, P1 ;给 R0 赋值,R0=70H ;将(70H)单元中的值送入累加器,A=60H ;R1 和累加器的值交换,相当于将 A 的值送入 R1,R1=60H ;将(60H)的值送入 B,B=20H ;P1 口输入前的准备,使 P1 场效应管截止 ;(R0)=(70H)=P1=0B7H
答:((2+1+1)*250+2+2)*10+2=10.042(ms) 在 P1.0 引脚上输出周期为 20ms 的方波。 我觉得应为:((2+1+1)*250+2+2)*10+1+2+2=10045us。
1.1.4 3-7
阅读下列程序,分析其功能。
MOV MOV MOV LOOP: MOVX INC INC DJNZ SJMP R7, #10 A, #30H DPTR, #2000H @DPTR, A A DPL R7, LOOP $ ;设置循环次数 ;第一个值为 40H ;设定外部数据存储器的起始地址 ;将累加器 A 的值传送到外部数据存储器 ;内部数据存储器地址加 1 ;外部数据存储器地址加 1,用 INC TPTR 也可以 ;判断是否将数据传送完 ;结束
MOV MOV MOV NEXT: POP MOV DEC DJNZ SJMP SP, #3FH R0, #40H R7, #10H A @R0, A R0 R7, NEXT $ ;设置堆栈指针 ;设置 R0 的值 ;设置循环次数 ;将堆栈中的值放入 A,SP 自动减 1 ;实际上是将堆栈中的值放入 R0 指向的地址 ;R0 中的地址指针减 1 ;判断是否将数据移完 ;停止
答: (1)将 R3:R2 和 R1:R0 中的两个 16 位数相加,结果存放在 32H:31H:30H 中。 功能:双字节带符号加法。被加数存放在寄存器 R1(存放高八位) 、R0(存放低八位)中,加数存放 在寄存器 R3(存放高八位) 、R2(存放低八位)中,和(共 17 位)由高到低依次存放在 32H(存放最高 一位) 、31H(存放中八位) 、30H(存放低八位)单元中。 (2)用 R5:R4 中的 16 位数减去 R3:R2 中 16 位数,结果存放在 R1:R0 中。 功能:双字节无符号减法。被减数存放在寄存器 R5(存放高八位) 、R4(存放低八位)中,减数存放 在寄存器 R3(存放高八位) 、R2(存放低八位)中,差存放在寄存器 R1(存放高八位) 、R0(存放低八位) 中。 (3)R2:R1 中的 16 位数乘以 R0 中的数,结果存放在 32H:31H:30H 中。 功能:无符号乘法。被乘数 16 位存放在寄存器 R2(存放高八位) 、R1(存放低八位)中,乘数 8 位 存放在寄存器 R0 中,乘积(共 24 位)存放在 32H(存放高八位) 、31H(存放中八位) 、30H(存放低八 位)单元中。
A, R1 B, R0 AB 30H, A 31H, B A, R2 B, R0 AB A, 31H 31H, A A, B A, #0 32H, A $ ;R2×R0 的高 8 位存入(32H) ,考虑了进位标志 ;R2×R0 的低 8 位和 R1×R0 的高 8 位相加后存入(31H) ;R2×R0 → BA ;R1×R0 的低 8 位 →(30H) ;R1×R0 的高 8 位 →(31H)
答:通过堆栈将内部 RAM 地址为 3FH、3EH、……、30H 中的内容移放入地址为 40H、3FH、……、 31H 的单元中。相当于把一段数据整体挪一位。执行完后 SP=2FH。
2
1.1.7 3-10
分析下列程序段执行结果。
XCH MOV ANL MOV MOV SWAP ANL MOV SJMP A, 30H B, A A, #0FH 33H, A A, B A A, #15 34H, A $ ;将(30H)中的值放入 A ;相当于将(30H)中的值放入 B ;相当于取(30H)的低 4 位 ;(30H)的低 4 位放入(33H) ;相当于将(30H)中的值放入 A ;交换(30H)的高 4 位与低 4 位 ;15=0FH,仅保留 A 的低 4 位,相当于取(30H)的高 4 位 ;相当于将(30H)的高 4 位放入(34H)
( 1) ( 2) ( 3) ( 4) ( 5) ( 6) ( 7) ( 8) 81H=10000001B 8CH=10001100B 72H=01110010B 79H=01111001B F9H=11111001B FCH=11111100B 7AH=01111010B 8CH=10001100B A=0ECH A=0F7H A=0DDH A=0E5H A=71H A=6FH A=0F0H A=0DFH CY=0 CY=0 CY=0 CY=0 CY=1 CY=1 CY=1 CY=1 OV=0 OV=0 OV=1 OV=1 OV=0 OV=0 OV=0 OV=1 AC=0 AC=1 AC=0 AC=1 AC=0 AC=1 AC=0 AC=1
1.1.10 3-20
分析以下程序段,何时转向 LABEL1?何时转向 LABEL2?
MOV CPL JZ INC JZ …… A, R0 A LABEL1 A LABEL2
答:R0 中内容为 0FFH 时转向 LABEL1,R0 中内容为 00H 时转向 LABEL2。
1.1.11 3-23
4
有四个变量 U、V、W、X 分别从 P1.0~P1.3 输入,阅读如下程序,写出逻辑表达式并画出逻辑电路 图。请使用 ORG、END、BIT 等伪指令重新编写该程序段。
(2)
CLR MOV SUBB MOV MOV SUBB MOV SJMP
C A, R4 A, R2 R0, A A, R5 A, R3 R1, A $ ;R5 - R3 → R1,同时考虑了 R4 - R2 的借位标志 ;R4 - R2 → R0
(3)
MOV MOV MUL MOV MOV MOV MOV MUL ADD MOV MOV ADDC MOV SJMP
答:将 30H 单元中的数的高四位放入 34H 中,低四位放入 33H 中。 或把(30H)的 BCD 码扩展成非组合 BCD 码存放至 34H、33H 中。
1.1.8 3-13
下列指令执行后,求(A)=?PSW 中 CY、OV、A C 为何值? (1) 当(A)=6BH, ADD A, #81H (2) 当(A)=6BH, ADD A, #8CH (3) 当(A)=6BH、CY=0, ADDC A, #72H (4) 当(A)=6BH、CY=1, ADDC A, #79H (5) 当(A)=6BH、CY=1, SUBB A, #0F9H (6) 当(A)=6BH、CY=0, SUBB A, #0FCH (7) 当(A)=6BH、CY=1, SUBB A, #7AH (8) 当(A)=6BH、CY=0, SUBB A, #8CH 答:6BH=01101011B
答:将 R2:R1:R0 所表示的 24 位二进制数左移 4 位。 (相当×16)
1.1.3 3-6
设系统晶振为 12MHZ,阅读下列程序,分析其功能。
START: NEXT: LOOP2: LOOP1: SETB MOV MOV NOP NOP DJNZ DJNZ CPL AJMP SJMP 31H, LOOP1 30H, LOOP2 P1.0 NEXT $ 1 P1.0 30H, #10 31H, #0FAH ;P1.0 高电平 ;外循环次数(2us) ;内循环次数(2us) ;延时(1us) ;1us ;2us ;2us ;P1.0 电平反转(1us) ;2us
MOV MOV ANL CPL MOV MOV ORL ORL MOV SJMP P1, #0FH C, P1.0 C, P1.1 C ACC.0, C C, P1.2 C, /P1.3 C, ACC.0 F, C $ ;P1.2 | /P1.3 ;P1 作为输入前的准备,使场效应管截止 ;读入 P1.0,存入在进位标志 ;P1.0 & P1.1 ;取反 ;暂存 ACC.0
试分析(70H)、(B)、(R1)、(R0)的内容是什么? 答:(70H)=0B7H、(B)=20H、(R1)=60H、(R0)=70H
1.1.2 3-5
分析下面程序段的执行功能。
CLR MOV MOV LOOP: CLR MOV RLC MOV MOV RLC MOV MOV RLC MOV DJNZ SJMP A R2, A R7, #4 C A, R0 A R0, A A, R1 A R1, A A, R2 A R2, A R7, LOOP $ ;累加器清零 ;R2 清零 ;设置循环次数 ;进位标志清零 ;将 R0 的值放入累加器 A ;累加器 A 的值带进位标志循环左移 1 位 ;R0 左移一位 ;将 R1 的值放入累加器 A ;累加器 A 的值带进位标志循环左移 1 位 ;R1 左移一位 ;将 R2 的值放入累加器 A ;累加器 A 的值带进位标志循环左移 1 位 ;R2 左移一位 ;循环 4 次,总共左移 4 位,相当于乘以 16 ;停止
1.1.12 3-24
用布尔指令,求解逻辑方程。 (1) PSW.5 P1.3 ACC.2 B.5 P1.1 (2) PSW.5 P1.5 B.4 ACC.7 P1.0 答: (1)实际上是求 PSW.5 (P1.3 ACC.2) ( B.5 P1.1) 。注意布尔运算符的优先顺序是“非、 与、或” 。
答:电路图如下:
U V
&
≥1
F
W X
≥1
逻辑表达式: F U V (W X ) 重新整理编写程序如下:
ORG U V W X START: BIT BIT BIT BIT MOV MOV ANL CPL MOV MOV ORL ORL MOV SJMP END 0100H P1.0 P1.1 P1.2 P1.3 P1, #0FH C, U C, V C ACC.0, C C, W C, /X C, ACC.0 F, C $ ;P1.2 | /P1.3 ;P1 作为输入前的准备,使场效应管截止 ;读入 P1.0,存入在进位标志 ;P1.0 & P1.1 ;取反
答: 以内部存储器地址 2FH 作为栈底, 从 30H 开始一直到 7FH, 依次存放外部数据存储器中 2000H~ 204FH 地址中的数据。7FH 作为栈顶。程序完成后 SP=7FH。 (将外部 RAM 中的数据通过堆栈传送到内 部 RAM)
1.1.Байду номын сангаас 3-9
分析下列程序段执行结果,程序执行完后,SP 指向哪里?
答:在外部数据存储器中的以下地址内存放数据: (向外部存储器放数据) (2000H)=30H (2001H)=31H (2002H)=32H ┇ ┇ (2009H)=39H
1.1.5 3-8
简述下列程序段完成的功能,程序完成后 SP 指针应指向哪里?
MOV MOV MOV NEXT: MOVX PUSH INC DJNZ SJMP SP, #2FH DPTR, #2000H R7, #50H A, @DPTR A DPL R7, NEXT $ ;堆栈指针先加 1 再赋值 ;共 50H 个数据 ;设置栈底
1.1.9 3-14
阅读(1) 、 (2) 、 (3)程序段,分析其功能。运算结果存在哪里?
(1) MOV ADD MOV MOV ADDC MOV MOV ADDC MOV SJMP A, R2 A, R0 30H, A A, R3 A, R1 31H, A A, #0 A, #0 32H, A $ ;R2→A ;R2+R0→A ;A→(30H) ,相当于 R2+R0→30H) ;R3→A ;R3+R1+C→A ;A→(31H) ,相当于 R3+R1→(31H) ,带符号位,考虑了 R2 + R0 的进位 ;0→A ;0+C→A ;A→(32H) ,相当于将 R3 + R1 的进位放入(32H) ;结束 3
相关文档
最新文档