9.4.1 PIC16F84A单片机指令集
9.4.2 PIC16F84A单片机伪指令
伪指令在源程序中的作用是为完成汇编程序作各种准备工作的(实际上是给PC机汇编的注释),这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
在汇编程序MPASM中,有四类伪指令:数据伪指令、列表伪指令、控制伪指令和宏汇编指令。
现在,我们将对前两类中的常用伪指令予以说明,后两类伪指令等到在具体程序中出现时,再加以说明。
(1)ORG 存放单元起始地址
格式:<标号>ORG<地址表达式>
说明:ORG用于指定该伪指令后面的源程序存放的起始地址,也就是汇编后的目标机器码存放的首地址。若ORG后面不带地址参数,则默认为0。若ORG带标号,则地址参数也赋值给该标号。在一个源程序中,可以根据需要多次使用ORG伪指令来定位。
例:ORG 1FFH DELAY
GOTO MAIN MOVLM 2
;…… ……
ORG 0 END
右排接左
说明:指令末的伪指令END是通知汇编程序MPASM结束对源程序(ASM)的汇编,即使后面还有语句,也不再予以汇编。在一个源程序中必须有END伪指令,而且只能有一个END,且放在整个程序的最后。
(2)EQU 是对寄存器f和标号赋值
格式:<标号>EQU<表达式>
说明:给标号或寄存器赋值,标号一旦由EQU赋值,其值便不能再重新定义。
举例:label EQU 0x20
注意:这里操作数中的0x表示十六进制,即0x20相当于20H。
(3)LIST 列表选择指令
格式:LIST<选择项>,…,<选择项>
说明:用来设置各种汇编参数以控制汇编过程,或对列表文件进行格式化。此伪指令的所有参数只能在一行内完成,参数的数值都用十进制数设置。
LIST列表选择伪指令可以选用的部分参数如下。
参数名 默认值 作 用
f=<格式> 1NHX8M;规定固化编程文件格式(INHX16,INHX32或INHX8M)1NHX8M适于把目标码输入到大多数的EPROM编程器中。
P=<类型> 无 设置单片机类型,如16F84
r=<基数> HEX 设置常数数制的基数(如hex十六进制;dec十进制等)
例:LIST f=1NHX8M,r=DEC,P=16F84
(4)PROCESSOR<处理器类型>
说明:用于选择所用单片机的型号。
(5)INCLUDE 包含其它外部源文件
格式:INCLUDE “文件名”
INCLUDE <文件名>
说明:用于把指定文件读入源程序中作为源程序代码的一部分,直到检测到文件结束符时为止,再恢复到原源程序中的代码处。此伪指令可允许嵌套使用,最多可嵌套6层。文件名必须用双引号或尖括号给出。
举例:include “c:\PIC\sysdefs.inc”
include
9.4.3 PIC16F84A单片机程序设计的基本格式
为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84AINC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。
TITLE“This is……” ;程序标题
;程序说明
LIST P=16F84,F=1NHX8M
;
include
-config_RC_Qsc &_WDT_0FF…
;资源定义和变量定义
STATUS EQU 03
FSR EQU 04
PORTA EQU 05
PORTB EQU 06
J EQU 01F
K EQU 01E
;…………………
ORG 0000 ;
goto MAIN ;跳过中断矢量
ORG 0004
goto INTSRV ;子程序入口地址
;……………………………………
MAIN ;从0005H开始放主程序
call Initports ;端口初始化
call InitTimers ;定时器初始化
…
INTSRV … ;中断服务程序区
SVBRTH … ;子程序区
END ;程序结束符
当然,在编写程序时可根据实际情况加以调整。下面是一份实际程序清单,要求将数据88H写入PIC16F84A单片机内部EEPROM的20H单元,而后再从20H单元将其读出。
LIST P=16F84,F=INHX8M
;……………………………
STATUS EQU 03 ;定义寄存器
EEDATA EQU 08
EEADR EQU 09
INTCON EQU 0BH
EECON1 EQU 88H
EECON2 EQU 89H
;…………………………
RD EQU 0 ;定义位
WR EQU 1
RP0 EQU 5
GIE EQU 7
;…………………………
ORG 0
GOTO WRSTART
;……………………………
ORG 10H
WRSTART ;写入操作开始
CLRW ;清W,使W=0
BCF STATUS,RP0 ;选BANK0
MOVLW 20H
MOVWF EEADR ;地址→EEADR
MOVLW 88H
MOVWF EEDATA ;写入数据→
;EEDATA
BSF STATUS,RP0 ;选BANK1
BSF EECON1,2 ;写操作使能允许
BCF INTCON,GIE ;关闭所有的中断
MOVLW 0X55
MOVWF EECON2 ;55H→EECON2
MOVLW 0XAA
MOVWF EECON2 ;AAH→EECON2
BSF EECON1,WR ;启动写操作
BSF INTCON,GIE ;恢复开中断
RDSTART ;读出操作开始
BCF STATUS,RP0
MOVLW 20H
MOVWF EEADR ;地址→EEADR
BSF STATUS,RP0
BSF EECON1,RD ;启动读操作
BCF STATUS,RP0
MOVF EEDATA,W ;将EEPROM
;数据读入W
END
附:在阅读PIC 8位单片机有关资料时,常遇到一些字母符号和功能,也简介如下:
1) OTP 一次性编程。OTP是One Time Program的缩写。
2) RISC 简称精简指令集。RISC是Reduced Instruction Set Computer的缩写。
3) SSP 同步串行口。SSP是Synchronous Serial Port的缩写。
4) SCI 串行通信接口。SCI是Serial Communication Interface的缩写。
5) USART 全双工通用串行异步接收发送系统。USART是Universal Serial Aosynchronous Receiver Transmitter的缩写。
6) UART 通用异步接收发送器。
7) POR 上电复位功能。POR是Power On Reset的缩写。
8) OST 振荡器起振定时器。OST是Oscillator Start-up Timer的缩写。
9) PWRT 上电延时定时器。PWRT是Power-up Timer的缩写。
10) SFR 专用寄存器。SFR是Special Function Register的缩写。
11) PWM 脉宽调制器。PWM是Pulse Width Modulation的缩写。
12) MIPS 每秒可执行百万条指令。MIPS是Million Instructions Per Second的缩写