PIC8位单片机汇编语言常用指令的识读(中)
三、面向字节、常数与控制操作的指令
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。 实例:PIC 某个汇编语言的延时子程序(摘要):
(1)BELY MOVLW 0xC5;送延时常数 0C5H 入 W(2) MOVWF COUNT2;0C5H 送入计数器 2(3) CLRF COUNT1;对计数器 1 清零(4)LOOP INCFSZ COUNT1;计数器 1 加 1 计数器 1 加 1 结果不为零,跳转循环(5) GOTO LOOP;
(6) DECTSZ CPUNT2;计数 2 减 1 计数器 2 减 1 结果不为零,跳转循环重复执行第 4 条指令(7) GOTO LOOP;
(8) RETLW 0;子程序执行结束返回说明:程序中的注释已分别对每条指令的功能作了说明,补充说明 1?当执行第(4)条加 1 指令结果为零时,就间跳转到执行第(6)条指令。
2. 当执行第(6)条减 1 指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。
3. 计数器 1 或 2 代表 PIC 中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。 ?成都史为知识竞赛试题:
12. 请计算上文中(1)~(8)延时程序的延时时间。已知所用的某个 PIC 芯片的晶振为 20MHz,每个指令周期执行时间为 0?2μs,除跳转指令是双周期外,其它指令是单周期指令。