单片机指令部分例题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• /(A)+(DPTR)=2000H+09H=2009H,对应 的查表内容为51H(81)送入累加器A中。
例2:若在外部ROM/EPROM中,从2000H单元开 始依次存放0-9的平方值,以PC作为基址寄存器查 表。设:MOVC指令所在地址(PC)=1FF0H。
• 偏移量=2000H-(1FF0H+1)=0FH • MOV A,#09H ;(A)←09H • ADD A,#0FH ;A←9H+FH=18H(24),作
表首地址
• 解:偏移量=2000H-(1FF0H+1)=0FH • MOV A , # 09H • ADD A , # 0FH • MOVC A , @ A + PC
• 执行结果(PC)=1FF1H

(A) = 51H
4、若 (R0)=30H, (30H) = 4AH , (A) =28H
• XCH A , @R0 ; • XCHD A , @R0 ; • SWAP A ; A=82H
;(R1) ← (A)
• MOV B , @R1 ; (B) ← ((R1))
• MOV @R1 , P1 ;((R1)) ← (P1)
• MOV P2 , P1
;(P2) ← (P1)
• MOV 10H , #20H ; (10H) ← 20H
• 结果:(R0)=30H , (R0)=(A)=40 H , (B)=10H , (40H)=(P1)=(P2)=CAH , (10H)=20H
• XCH A,#R0 • ;结果:(A)=4AH,(30H)=28H
• XCHD A,#R0 • ;结果:(A)=2AH,(30H)=48H
• XWAP A • ;结果:(A)=82H
堆栈操作类指令
• PUSH direct
• ; SP ←(SP) + 1,
(SP) ←(direct)
• / PUSH指令把数据压入堆栈:首先(SP)+1→(SP)
• 指令中的符号(3) • 9. bit 片内RAM及SFR的直接寻址位地址。 • 10. @ 间接寻址寄存器或基地址寄存器的前
缀符号。
• 如:@ R1,@DPTR,表示寄存器间接寻址。 • 11. / 和→ 对该位操作数取反、但不影响该位
原值。→流程。 • 12. ((X)): 表示由X寻址的单元中的内
A=4AH (30H)=28H A=2AH (30H)=48H
5、若外部ROM中2000H单元开始依次存放0~9的平方值, 数据指针(DPTR)=3A00H , 用查表指令取出2003H单元的数据后,要求保持DPTR中 的内容不变。
• MOV A,# 03H • PUSH DPH • PUSH DPL • MOV DPTR , #2000H • MOVC A , @ A+DPTR • POP DPL • POP DPH
容,即(X)作地址,该地址的内容用(X) 表示。

• 指令中的符号(4) • 13. (X) 表示直接地址X中的内容,或由间接寻
址寄存器X指出的地址单元中的内容。
• 14、 A---累加器;
• 15、 B---专用寄存器,用于MUL和DIV指令中 ;
• 16、 C---进位标志或进位位、或布尔处理机中 的累加器;
针。
例:片内RAM 50H单元中存放数值为AAH,设堆栈 指针为30H,把此数值压入堆栈,然后再弹出到40H 单元中。
• MOV SP , #30H • PUSH 50H • POP 40H
例4: 在外部ROM/EPROM中,从2000H单元开始 依次存放0-9的平方值:0、1、4、9、。。。81, (DPTR)=3A00H,用查表指令取出2003H单元的
,指向栈顶上的一个空单元;然后把直接寻址单元的
内容压入所指单元。

POP direct
• ; (direct)←SP ,(SP) ←(SP) - 1
• / POP 指令把堆栈顶的数据弹出到直接寻址指定的单元 中,恢复片内RAM 128)或SFR的内容:首先((SP ))→direct,然后把(SP)-1→SP,形成新的栈顶指
地址调整
• MOVC A,@A+PC ;(A)←((A)+(PC )+1)
• /18H+1FF0H+1=2009H,2009H的内容为51H( 81),送入A中。
• 执行结果:(PC)=1FF1H,(A)=51H(81)
• 例3:设(R0)=30H,(30H)=4AH, (A)=28H,分别执行下述各指令
容为FFH,送累加器A,A=FFH • MOV 30H,A • ;(30H)← (A) 地址30H的内容为FFH • MOV A, #0FH • ;(A)←0FH 累加器A的内容变为0FH • MOVX @DPTR, A • ;((DPTR))←(A) • 累加器A送入0FH内容到地址为0203H的DPTR • 执行结果:(DPTR)=0203H,(30H)=FFH, • (0203H)=(A)=OFH
例如:设内部RAM(30H)40H,(40H)=10H, 端口(P1)=CAH,分析以下程序执行后各单元及寄 存器、P2口的内容
• MOV R0,#30H
;(R0)←30H

/R0=30H
• MOV A,@R0
;(A)←((R0))
• MOV R1,A
;(R1)←(A)

/(R1、A=40H)
• MOV B,@R1
• 5. direct 8位片内数据存储器RAM单元地址 (0-127/256)的直接寻址的地址。或特殊功能 寄存器SFR的地址、I/O端口、控制寄存器、状 态寄存器等。
• 指令中的符号(2)
• 6. addr11 11位目的地址,用于子程序绝对调用 ACALL和绝对转移指令AJMP指令中。目的地 址应与下一条指令处于同一2K存储器空间范围 内。
• 例:若(A)=10110101B
效,用作外部RAM的读选通信号。
• MOVX @DPTR,A ; ((DPTR))←(A)
• MOVX @Ri ,A
:((Ri))←(A)
• 作用:/输出(写),在P3口(P3.6)输出WR写有 效,用作外部RAM的写选通信号。
例:设外部RAM(0203H)=FFH。分析指令
执行结果:
• MOV DPTR,#203H • ;(DPTR)←0203H 确定DPTR地址为0203H • MOVX A ,@DPTR • ;(A)←((DPTR))/地址为0203H的DPTR的内
–外部RAM单元只能使用间接寻址方法,通过累加器 A来完成。
–DPTR (16位 )和Ri作间址寄存器。 – 数据传送通过P0和P2口完成。
• /(P0传送低8位地址,P2传送高8位地址;数 据总线8位有P0 口与地址线分时双向传送)
• 指令操作码助记符:MOVX
• 指令: • MOVX A ,@DPTR ;(A)← ((DPTR)) • MOVX A ,@Ri ;(A)← ((Ri)) • 作用:/输入(读),在P3口(P3.7)输入RD读有
数据后,保持DPTR 中的内容不变。
• MOV A,#03H ;(A)←03H • PUSH DPH ;保护DPTR,高8位入栈 • PUSH DPL ;保护DPTR,低8位入栈 • MOV DPTR,#2000H ;(DPTR)←2000H • MOVC A,@A+DPTR ;(A)←((
2000H+3H)) • POP DPL ;弹出DPTR低8位 • POP DPH ;弹出DPTR高8位
• INC • INC • INC • INC • INC • INC
@R0 R0 @R0 DPTR DPTR DPTR
; (R0)=0H ; (R0)=7FH ; (R0)=38H ; 10FF ; 1100 ; 1101
8、逻辑“与” 补充
• 逻辑“与”用于屏蔽(置0)字节中的某些位: • 清除某位,用“0”相与 • 保留某位,用“1”相与 • 例:(P1)=C5H=11000101B , 屏蔽P1口高4位 • ANL P1 , #0FH
• 结果: (P1)=00000101B
9、逻辑 “或”补充
• 逻辑“或”用于字节中的某些位置“1” :
• 清除某位,用“1”相或
• 保留某位,用“0”相或
• 例:若(A)=10110101B , (P1)=01101010B。要求P1 口高3位保持不变。
• ANL A , # 00011111B ; 屏蔽A的高3位
1、设外部RAM(0203H)=FFH 分析运行结果
• MOV DPTR , #0203H • MOVX A , @ DPTR • MOV 30H , A • MOV A , #0FH • MOVX @DPTR , A
• (DPTR)=0203H (30H)=FFH (0203H)=(A)=0FH
• 7. addr16 16位目的地址,用于子程序无条件长 调用指令LCALL和无条件长转移指令LJMP指 令中。目的地址在全部程序存储器64K范围中 。
• 8. rel 8位带符号地址偏移量,以补码形式表示 偏移地址,范围:-128-+128。用于条件相对短 转移指令SJMP和所有的无条件转移指令中。
;(B)←((R1))

/B=10H
• MOV @R1,P1
;(R1)←(P1)
• MOV P2,P1
;(P2)←(P1)

/(40H)=(P1)=(P2)=CAH
• MOV 10H,#20H
;(10H)←20H

/(10H)=20H
外部数据存储器数据传送指令
• 功能:单片机CPU对外扩数据存储器RAM或I/O 口进行数据传送。
– 先进后出原则。
加法见讲义
• 例:设内部RAM(30H)=40H,(40H)=10H, (10H)=00H,端口(P1)=CAH.
• 分析下面程序执行后各单元及存储器、P2口的内容。
• MOV R0, #30H ;(R0)← 30H
• MOV A,R0 ;(A) ← ((R0))
• MOV R1, A
单片机指令部分
例题
指令中的符号(1)
• 1. Rn :当前工作寄存器区中的工作寄存器: RR0S—0)R和7。PS由W状.4(态RS控1)位制决寄定存。器 PSW 中 的 PSW.3(
• 2. Ri :R0或R1。 • 3. #data:#表示立即数。#data:为8位立即常
数。
• 4. #data16:为表示16位立即常数。
2、在外部ROM / EPROM 中,从2000H单 元开始存放0~9的平方数,要求依据累加 器A的值(0~9)来查表所对应的平方值。 分析程序运行结果
• MOV DPTR , #2000H • MOV A , #09H • MOVC A , @A+DPTR
3、同于(2),以PC作为基址寄存器进行查 表。若MOVC指令所在地址(PC)=1FF0H。
• 17、 DPTR---数据指针,可用于16位的地址寄 存器。
例 MOVC A , @A + DPTR ;(A)←((A)+(DPTR))
• 执行前:A=A4H, DPTR=1234H
• 执行中:(A)+( DPTR) =A4H+1234H=12D 8H
• 12D8H 的 数 据 为 :3FH
• 执行后:A=3FH
6、双字节无符号数加法
(R0R1)+ (R2R3)
(R4R5)
• MOV • ADD • MOV • MOV • ADD • MOV
A , R1 A , R3 R5 , A A , R0 A , R2 R4 , A

7、设(R0)=7EH, (7EH)=FFH , (7FH)=38H , (DPTR)=10FEH P.58
• ANL P1 , # 11100000B ; 保留P1高3位
)=00010101B
(P1)=01110101B
10、逻辑“异或”: 两个操作数不一致时结果为1
• 逻辑“异或”用于对字节中的某些位取反操作:
• 某位取反,用“1”相异或
• 保留某位,用“0”相异或
例1:在外部ROM/EPROM中,从2000H单元开始依 次存放0-9的平方值:0、1、4、9、。。。81, 依据累加器A中的值(0-9)查找对应的平方值。
• MOV DPTR,#2000H

;(DPTR)←2000H
• MOV A,#09H

;(A)←09H
• MOVC A,@A+DPTR

;(A)←((A)+(DPTR))
相关文档
最新文档