看到这篇文章的朋友,想必大家对 pic 单片机均具备一定兴趣,或对 pic 单片机具备一定使用需求。前文中,小编曾对 pic 单片机汇编语言进行过部分讲解。本文中,将对 pic 单片机的清零等指令加以讲解,以帮助大家更好掌握 pic 单片机编程。
一、清零指令
1. 寄存器清零指令
实例:CLRW;寄存器 W 被清零
说明:该条指令很简单,其中 W 为 PIC 单片机的工作寄存器,相当于 MCS-51系列单片机中的累加器 A,CLR 是英语 Clear 的缩写字母。
2. 看门狗定时器清零指令。
实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)
说明:WDT 是英语 Watchdog Timer 的缩写字母。CLR 见上述说明。注意该两条指令无操作数。
3. 寄存器 f 清零指令。指令格式:CLRF f
实例:CLRF TMRO;对 TMRO 清零
说明:在 PIC 系列 8 位单片机中,常用符号 F(或 f)代表片内的各种寄程器和 F 的序号地址。F 取值按 PIC 系列不同型号而不同,一般为 Ox00~Ox1F/7F/FF。TMRO 代表定时器 / 计数器 TMRO,所以 CLRF 对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器 TMRO。
4. 位清零指令。指令格式 BCF f,b
实例:BCF REG1,2;把寄存器 REG1 的 D2 位清零
说明:BCF 是英语 Bit Clear F 的缩写。指令格式中的 F,同上说明;符号 b 是表示 PIC 片内某个 8 位数据寄存器 F 的位号(或位地址),所以 b 的取值为 0~7 或 D0~D7。实例中 REG 是 Register 的缩写。实例中的 2 代表指令格式中的 b=2 即寄存器 REG1 的 D2 位。
通过上述四条清零指令格式和实例,可以说明,学习 PIC 系列 8 位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。
二、面向字节、常数与控制操作的指令
1. 传送立即数至工作寄存器 W 指令
指令格式:MOVLW k;k 表示常数、立即数和标号
说明:MOVLW 是 Move Literal to w 的缩写
实例:MOVL 0x1E;常数 30 送 W
2.I/O 口控制寄存器 TRIS 设置指令
指令格式;TRIS f
说明;TRIS f 是 Load TRIS Register 的缩写。其功能是把工作寄存器 W 的内容送入 I/O 口控制寄存器 f。当 W=0 时,置对应 I/O 口为输出;W=1,置 I/O 口为输入。
实例:MOVLW 0x00 ;把 00H 送入 W
TRIS RA ;置 PIC RA 口为输出
MOVLW 0xFF ;把 FFH 送入 W
TRIS RB ;置 PIC RB 口为输入
说明:这是 PIC 汇编语言中常用的几条指令,即设置某个 I/O 口(这里是 RA 口和 RB 口)为输入或输出的语句。可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。
3.W 寄存器内容送寄存器 f(W 内容保持不变)指令
指令格式:MOVWF f
说明:MOVWF 是 Move W to f 的缩写
实例:MOVLW 0x0B;送 0BH 送 W
MOVWF 6 ;送 W 内容到 RB 口
说明:第一条指令 0x0B(常数 11)送工作寄存器 W,第二条指令,把 W 内容常数 11 送到寄存器 F6 中,查表 F6 即为 RB 口,所以 PORT_B(B 口)=0BH=D11
4. 寄存器 f 传送指令
指令格式:MOVF f,d
说明:MOVF 是 Move f 的缩写。F 代表 PIC 中的某个寄存器。指令中的 d 规定:d=0 时,f 内容送 W;d=1 时,f 内容送寄存器。
实例:MOVF 6,0 ;RB 口内容送 W
MOVWF 8 ;RB 口内容送 f8
说明:第一条指令中的 6 代表寄存器 f=6,查寄存器表 f=6 为 RB 口;0 代表 d=0,代表选择的目标为寄存器 W。第二条指令中的 8 代表寄存器 f=8。所以两条指令结果是把 RB 口的内容送 f8。至于 f8 内容是多少?还应在汇编语言开始时附加指令,这里从略。
5. 空操作指令
指令格式:NOP
说明:NOP 是英语 No OperaTIon 的缩写。NOP 无操作数,所以称为空操作。执行 NOP 指令只使程序计数器 PC 加 1,所以占用一个机器周期。
实例:MOVLW 0xOF;送 OFH 到 W
MOVWF PORT_B ;W 内容写入 B 口
NOP ;空操作
MOVF PORT_B,W ;读操作
说明:该三条指令是一种对 I/O 口的 B 口连续操作的实例,其目的达到写入 B 口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令 NOP。
6. 无条件跳转指令
指令格式:GOTO k
说明:执行该条指令时,将指令转移到指定的地址(跳转)。指令中的 k,常与程序中的标号联系起来。
实例:见第 9 条指令中
7. 寄存器内容减 1,结果为零的间跳指令
指令格式:DECFSZ f,d
说明:DECFSZ 是英语 Decrement f,Skip of not 0 的缩写。符号 f,d 代表的意义,前述已作说明。该条指令是指寄存器的内容减 1 存入 W(d=0)或 f(d=1)中。若指令执行结果减 1 不为零,指令顺序执行;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令 NOP),实际指令中,当 d=1 时,该项常被略去。
8. 寄存器内容加 1,结果为零间跳指令
指令格式:INCFSZ f,d
说明:INCFSZ 是英语 Increment f,Skip of 0 的缩写。该条指令与上一条(7)指令差别仅在于1上,即执行这条指令时,寄存器 f 内容加 1,若结果不为零,则指令顺序执行;为零则指令间跳执行。执行这条指令的其它逻辑关系与上条相同。
9. 子程序返回指令
指令格式:RETLW k
说明:RETLW 是 Return Literal to W 的缩写。该指令代表子程序返回,返回前先把 8 位立即数送 W。
以上便是小编此次想和大家分享的内容,希望大家喜欢。
免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,信息仅供参考之用。