×
单片机 > 单片机程序设计 > 详情

pic单片机汇编语言讲解(下)

发布时间:2020-08-25 发布时间:
|

看到这篇文章的朋友,想必大家对 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。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会