指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
② 指令系统中没有直接为文件寄存器送立即数的指令。
所以,必须通过W来实现立即数的传送。
首先利用MOVF F ,d (d=0)将F中的数据传送 到W,然后再利用MOVWF F 指令将W中的数 据传送到F中。
如:
1. 将RAM的20H单元数据送RAM的30H单元。
2. 又如:将RAM的20H单元送立即数0FH
常数操作类 (立即数操作) 控制操作类 (转移、调用)
操作码
K(程序地址)
13~0 操作码
指令格式小结
在14位二进制的指令格式中:
1.
与立即数有关的指令中,低8位包含了完整的常数;
2.
在直接寻址的指令中,指令中只包含了9位RAM地址中的 低7位,而高2位必须事先预装在STATUS的RP0、RP1 中,或STATUS中的IRP、FSR的D7位(参见53页); 在控制转移类指令中(GOTO、CALL),指令中仅包含 ROM13位转移地址中的低11位,其高2位地址码需要事 先预装在PCLATH的D4:D3两个位中(参见54页); 可见,PIC16F系列的指令系统14位宽度还略显不足,理 论上可以通过继续增加指令的宽度解决上述的不便。
【解1】
ADDWF 05H,1
或: PORTA EQU 05H ADDWF PORTA,1 【解2】 ADDWF 01H,0
或: TMR0 EQU 01H ADDWF PORTA,0 使用寄存器的名称(PROTA、TMR0)来取代其地址使程 序具有良好的可读性。但在PIC的指令寻址方式中,没有 “寄存器寻址”的方式(不同于MCS51),因此必须事 先使用伪指令(EQU)来定义其寄存器。
面向字节类的指令详解
1,寄存器加法指令:ADDWF F,d ; F+W →F (d=1) F+W→W (d=0) 【例1】:将W寄存器与RAM的20H中的数据相加,结果送W。
【例2】:将W寄存器与RAM的30H中的数据相加,结果送 30H。
【解题思路】:
1.
2.
选择指令:ADDWF
确定d的值(d=1时,结果数据送回F;d=0时结果送W)
4. 对于大多数指令来说,指令是单周期的,但是如果执行象 GOTO或条件转移等发生跳转的指令,由于PC的值需要 重新设定,所以需要两个周期的时间。
3.2 指令系统概述
1.
指令码 (操作数)中常用符号说明(表3.3、表3.4 、表3.5): 说
工作寄存器(即累加器) 用大写字母代表7位文件寄存器单元地址(范围128个单元) 用大写字母表示某一位在寄存器内部8位数据中的位置(位地址) 8位数据常数或11位地址常数 用小写 f 代表文件寄存器7位地址码F当中的一位地址 用小写 k 代表常数或地址码K当中的一位 用小写 b 代表文件寄存器中的某一位数据3位地址码B中的一位 用小写 d 代表目标寄存器:d=0.目标寄存器为W;d=1目标为F 表示运算结果送目标寄存器
或:
FSR
INCF
EQU
04H
FSR,1 ;修改数据指针
借助于伪指令使指令具有根好的可读性.
【思考题】:INCF 20H,0 的结果是什么?
3,寄存器减法指令:SUBWF F,d ; F - W →F(d=1) F - W→W(d=0) 【注意】:指令 SUBWF F,d 是 F – W 这与51单片机截然 相反。 【举例】:将RAM20H单元中的数据与W中的数据相减,结 果存20H单元中。(如果结果存W中,指令如何编写?)
【解1】 MOVF MOVWF 20H,0 30H ;20H内容送W ;W内容送RAM的30H单元
【解2】 MOVLW 0FH
MOVWF 20H
;立即数0FH送W ;W内容送RAM的20H单元
13, 递增跳转指令 ————(加一、判跳复合指令)
INCFSZ F,d ;F +1 → F(d=1) ; F +1 → W(d=0) ; 结果=0 则跳过下一条指令,否则不跳。 14, 递减跳转指令 ————(减一、判跳复合指令) DECFSZ F,d ;F -1 →F (d=1) ; F -1→W (d=0) ;结果=0 则跳过下一条指令,否则不跳。 【注意】 1. DECFSZ指令相当于MCS-51单片机的 DJNZ Rn,rel往往作 为循环程序中的循环控制语句。 2. 与51单片机指令不同,在PIC系统的所有条件判跳语句都是 “跳一步 —— skip ‖。
F-W→d
F–1 →d F∧W→d F∨W→d F⊕W→d F 取反 → d
C,DC,Z
Z Z Z Z Z
ANDWF F,d IORWF F,d XORWF F,d COMF F,d
面向字节操作类指令(表二)
助记符 CLRF CLRW MOVF INCFSZ F ,d F 操作说明 0→F 0→W F→d
符 号
W Fra Baidu bibliotek B K f k b d →
明
∧
∨ ⊕
代表逻辑“与”运算
代表逻辑“或”运算 代表逻辑“异或”运算
2.
三种类型指令码的分配格式(重点:操作数)
类 型 14位指令码D13~D0的分配格式 13~8(6bit) 操作码 7 (1bit) d 6~0 (7bit) F(寄存器地址)
面向字节操作类
【解】 SUBWF 20H,1 ;20H单元内容-W寄存器内容 ; 结果送回20H 或: SUBWF 20H,0 ;20H单元内容-W寄存器内容 ;结果送W中
4, 寄存器减一指令:
DECF F,d F - 1 →F(d=1) F - 1 →W(d=0) 5, 寄存器逻辑与指令 :ANDWF F,d F ∧ W →F(d=1) F ∧ W →W(d=0) 6,寄存器逻辑或指令 :IORWF F,d F ∨ W →F(d=1) F ∨ W →W(d=0) 7,寄存器逻辑异或指令 :XORWF F,d F ⊕ W →F(d=1) F ⊕ W →W(d=0)
PIC单片机指令时序
1. 2. 3.
4.
5.
若单片机采用4MHz的外接晶体,则单片机的系统时钟 频率fosc= 4MHz 、时钟周期Tosc=1/4 μs ; 由4个时钟周期构成一个由Q1~Q4的“机器周期‖; 严格的讲:PIC单片机执行一条指令所用的时间应当是2 个“机器周期”,即”取指周期”和”执行周期” ; 由于“流水作业”的特点,在运行第N条指令时同时提 取第N+1条指令.将两条指令的时间“压缩”三个机器周 期。同理,若有M条指令运行时间为M+1个机器周期.这 样当M比较大时可以认为M条指令的运行时间是M个机 器周期.所以资料上也称机器周期为“指令周期‖; 当外接晶体采用4MHz频率时,则执行一条指令的时间 是 1/4 μs × 4 =1 μs 。
2.
①
将 W中的数据与定时器TMR0中的值相加,结果存W中。
【提示】 首先确定指令的类型(ADDWF);
②
③
确定d的取值,决定数据的最终去向(d=0或d=1)
指令中的F应当为7位地址(PORTA的地址=05H;TMR0 的地址=01H)
④
在指令中也可以直接使用寄存器的名称,但是必须事先使 用伪指令 EQU 来为寄存器名赋值。
C
D7 D6 D5 D4 D3 D2 D1 D0
F文件寄存器 (d=1时,在F中移位并保留结果)
(d=0时,移位结果送W,而F本身 的内容不变)
D7 D6 D5 D4 D3 D2 D1 D0
W工作寄存器
16,寄存器带进位的循环右移指令:RRF F,d ;将寄存器F 带C循环右移,结果存入F本身(d=1)或存入W(d=0)。 结果影响C。
C D7 D6 D5 D4 D3 D2 D1 D0
17,寄存器半字交换指令:SWAPF F,d ;F中的高4位与低 4位交换,结果存入F本身(d=1)或存入W(d=0)。
3.
面向字节操作类指令
指令所处理的数据为8位的字节数据; 如: 文件寄存器(RAM)中的数据; W工作寄存器中的数据等。
3.3 面向字节操作类指令(表一)
助记符 ADDWF F,d INCF F,d 操作说明 F+W→d F+1→d
对STATUS的影响
C,DC,Z Z
SUBWF F,d
DEC F,d
指令的运行特点
1.
2. 3.
第一个机器周期取指令,后面的机器周期译码、执行该指 令(如图所示)—— 流水作业。
在一个机器周期中,Q1节拍上升沿程序计数器PC+1,Q4 节拍时取指并放入指令寄存器,下一个周期执行该指令。 实际上一条指令仍占用两个指令周期,但是这是一种在“ 取指”与“执行”相互“嵌套” 的运行方式(如图),即 “流水作业” 方式从整体上讲是实现了单字节、单周期的 快速运行方式。可以想象一下,如果不采用“流水方式” 要执行10条指令需要20个指令周期,而采用“流水作业” 后,可以只用11个指令周期的时间了。
第三章:指令系统
一种单片机所能识别的全部指令的集合,就称之为该单 片机的指令系统或指令集。 PIC16F87X共有35条指令,长度均是为14位的单字节指 令。按照指令操作对象的不同可将指令分为三类:
1. 2.
面向字节操作类 面向位操作类
______________ (17条); _______________ ( 4条);
对STATUS的影响
Z Z Z
MOVWF F
DECFSZ F,d
W→F
F-1 →d,结果若为0则跳一步
-
F ,d F+1 →d,结果若为0则跳一步
RLF
RRF SWAPF
F ,d
F,d F,d
F 带C左移 → d
F 带C右移 → d F 半字交换 → d
C
C -
重点注意:指令格式中的操作数和操作数的表示方法!
(对寄存器 操作)
面向位操作类
对寄存器的某一位
13~10(4bit)
操作码 带8位常数 带11位常数的 CALL 和 GOTO 不带常数
9~7(3bit)
B 13~8(6bit) 操作码 13~11(3bit)
6~0 (7bit)
F(寄存器地址) 7~0 (8bit) K(数据) 10~0 (11bit)
2, 寄存器加一指令: INCF F,d ; F+1 →F(d=1) F+1→W(d=0)
【举例】:在一个循环程序中,使用RAM中的某一个文件寄存器(即一 个RAM存储单元)作数据指针,在循环体中就要有修改指针的操作。
如:选择FSR寄存器作指针时,在程序的循环体中有:
INCF 04H,1 ;间址寄存器加一并送回FSR
3.
常数操作类指令和控制操作类指令 __(14条)。
3.1 指令的时序 ---- CPU执行指令的时间、顺序
OSC1
Q1 Q2
Q3
Q4 PC PC PC+1 PC+2
提取第n条指令 执行第n-1条指令
提取第n+1条指令 执行第n条指令
提取第n+2条指令 执行第n+1条指令
提取第n条指令与执行第n-1条指令的相互嵌套的“流水作业”模式
INCFSZ F ,d 与 DECFSZ F ,d 在循环语句中的控制
LOOP
循环体
F±1→F Z=1? Z=0
Z=1时SKIP
1. 2.
PIC单片机指令系统中所有的 条件判跳指令都是: 条件满足时:程序“跳一 步”; 条件不满足时:顺序执行下 一条指令(PC+1→PC)。
GOTO LOOP
15,寄存器带进位的循环左移指令: RLF F,d ;将寄存器F带C循环左移,结果存入F本身 ;(d=1)或存入W(d=0)。结果影响C
;F →F (d=1)
;F →W(d=0)
12,W寄存器传送指令:MOVWF F ;W → F(W不变)
【注意】 第12条是 W→F 的专用指令,所以指令中没有d;
第11、12条指令是PIC编程中使用频率最高的两条。这是 因为: ① PIC指令中,文件寄存器F之间的数据不能直接传送,只 能通过工作寄存器W连接各个文件寄存器;
解:指令中 ADDWF F,d 的 F代表7位文件寄存器的地址. d 用来表示指令数据的目标地址:
① d=0时,数据送W工作寄存器;
② d=1时,数据存F寄存器中. 所以:上述问题的答案是: ① ADDWF ② ADDWF 20H,0 30H,1
练习题
1.
将W中的数据与PORTA中的数据相加,结果送回到PORTA 中。
8, 寄存器取反指令: COMF F,d F 取反 →F(d=1) F 取反 →W(d=0) 9,寄存器清零指令: CLRF F ;F内容全部清零 ( Z=1)
10, 工作寄存器W清零:CLRW ;W的内容全部清零( Z=1) 【注意:】:本指令是0→W的专用指令,所以指令中没有d.
11,F寄存器传送指令:MOVF F,d