文章分类

当前位置:首页>技术文章>PIC8位单片机汇编语言常用指令的识读(下)

PIC8位单片机汇编语言常用指令的识读(下)

本文关于指令的注释将与前述指令中的略有不同。前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的 PIC 产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。

10. 寄程器半字节交换指令指令格式:SWAPF f,d 说明:SWAPF 是 Swap f 的合写。符号 f、d 的意义与前述的相同。该条指令的功能是寄存器 f 的高 4 位与低 4 位交换,即指令执行前,若寄存器 f 的 8 位状态为 D7、D6、D5、D4、D3、D2、D1、D0,执行后的 8 位状态变为 D3、D2、D1、D0、D7、D6、D5、D4,其结果存入 W(d=0)或 f(d=1)中。 实例:中断现场保护是中断技术中重要部分。

由于 PIC16C××指令系统中没有进栈 PUSH 和出栈 POP 指令,所以只能用其它指令来实现。因为在主程序中常常用到工作寄存器 W 和状态寄存器 STATUS,所以中断现场保护常要保护寄存器 W 和 STATUS。 下面是对 PIC16C7×系列芯片中断现场保护的实例程序。MOVWF W_TEMP;将 W 内容存入到临时寄存器 W_TEMP 中 SWAPF STATUS,W;交换 STATUS 与 W 内容 MOVWF STATUS_TEMP;将 STATUS 的内容存入到临… 时寄存器 STATUS_TEMP 中中断服务程序…SWAPF STATUS_TEMP,W;交换 STATUS_TEMP 与 W 的内容 MOVWF STATUS;STATUS 复原成原来的状态 SWAPF W_TEMP,F;交换内容 SWAPF W_TEMP,W;W 复原成原来的状态说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。这是初学者应特别注意的。

11. 子程序调用指令(Subroutine Call) 指令格式:CALL k;k 为立即地址说明:子程序调用,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址((PC)+1)压栈保护,再转入所调用的子程序入口地址执行(与 MCS-51 指令功能相似)。指令格式模式:HERE CALL DELAY;调用延时子程序 … DELAY MOVLW 0x80;延时子程序 RETLW 0 说明:调用指令执行前,PC=地址 HERE 调用指令执行后,PC=地址 DELAY(标号),堆栈指针 TOS=HERE+1(返回地址)。 实例:见下条指令的实例

12. 寄存器内容取反指令指令格式:COMF f,d 说明:COMF 是 Complement f 的缩写。其中 d=1 时,操作(f)→f;d=0 时,操作(f)→w。 功能:寄存器 f 内容取反后送入 W(d=0)或 f 自身(d=1)。 实例: ORG 0x1FF GOTO MAIN ORG 0 DELAY … MAIN MOVLW 0;主程序开始 TRTS 5;设置 RA 口为输出 BCF 5,0;置 RA 口 0 位为 0 LOOP CALL DELAY;闪动延时 COMF

5.;RA 口求反(亮—灭— 亮……控制) GOTO LOOP;循环 … 说明:上述指令是一种 PIC16C54 LED 发光控制实验部分程序。其中延时子程序 DELY 未列出,但不影响本条指令的识读。程序中的主程序开始的三条指令,均已介绍过,紧跟着的 CALL 指令是调用执行子程序,其入口地址为标号 DELAY。子程序执行结束后,又执行 COMF 5 的 LED 发光亮—灭…亮—灭……控制指令。后面一条 GOTO LOOP 指令是达到 LED 循环点亮目的。

13. 面向位的操作指令(共 4 条,PIC 高级产品多增一条) 该类指令除一条位清零外,另有一条寄存器 f 位 b 的置 1 指令和另外两条位跳步指令(PIC 高级产品多增一条 f 的 b 位触发转换指令)。

(1)位置 1 指令。指令格式 BSF f,b 说明:BSF 是 Bit Set f 的缩写。F 和 b 的意义与前述相同,该条指令的功能是将寄存器 f 的 b 位置 1。

(2)位测试、为零间跳指令。指令格式 BTFSC f,b 说明:BTFSC 是 Bit Test,Skip if Clear 的缩写。指令功能是测试寄存器 f 位“b”,如为 0,跳过下一条指令;为 1 顺序执行,即当 f(b)=0 时,就不执行当前指令而执行下一条指令(间跳),即用一条空指令 NOP 代替它,所以该条指令占用 2 个指令周期。

(3)位测试、为 1 间跳指令。指令格式 BTFSS f,b 说明:BTFSS 是 Bit Test,Skip if Set 的缩写。其指令的逻辑功能与上条相反,位测试 f(b)=1 就间跳执行,f(b)=0 顺序执行。 上面介绍的 PIC 8 位单片机汇编语言指令仅是部分指令,此外还有循环左、右移指令;W 和寄存器 f 相“加”、相“与”指令和进入睡眠方式等指令。鉴于报纸版面的限制,不在这里一一介绍,今后将在程序的应用试验中再作补充说明。 ?成都史为知识竞赛试题:

13. 请把下列程序加注释,程序中的“5”代表 RA(F5)口;“6”代表 RB(F6)口。 CLRW;MOVLW OFFH TRIS 5 TRIS 6 BCF 5,1 BCF5?0 BSF 5,0 … 右排接左


© 星光电子技术工作室 2021 All Rights Reserved.
如有任何问题、建议、业务、合作,请联系手机/微信:13713820066