PIC系列单片机的汇编语言是以助记符表示指令、用助记符指令编写程序的。这种助记符指令组合的程序称为PIC单片机的源程序。
学习PIC单片机时,首先应学会建立源程序。用汇编语言建立源程序时,需要对PIC单片机内部所用的硬件资源进行详细了解,并作必要的安排。再按设计功能选择助记符指令,进行配搭、组合,才能建立具有一定功能的PIC单片机源程序。
1.工作寄存器W和传送立即数(K)指令
PIC单片机内部的工作寄存器W是一个8位的不可寻址的寄存器,相当于一般微处理机的累加器A。在建立PIC单片机的源程序中,W的使用率很高,所以是一个很繁忙的寄存器。如果要把立即数K送至W,可用以下的一条指令。
说明:
(1)MOVLW即为助记符指令,K称为操作数。因W是8位的,所以立即数的取值为0≤K≤255。
(2)上述指令的功能是K送W(3)实例1:MOVLW。;把0→+W。
实例2:MOVLWB00011111’;把二进制数的000送W的高三位,1111:1送到W的低五位。
2.特殊功能寄程器TRISB、PORTB、TRISA、PORTA和W的内容送寄存器f指令。
PIC单片机端口A、B(或C、D……)在汇编语言中的表达式分别为PORTA、PORTB,对PIC16F84,PORTA是一个五位的I/O(双向)寄存器;PORTB是一个8位I/O寄存器;PIC16F627的PORTA、PORTB均是8位寄存器。若要求A或B口为输入(IN)或输出(OUT),必须给端口的控制寄存器TRIS(A或B)送相应的数。I/O端口控制寄存器TRISX(X可代表A、B、C、D……)是一个特殊功能只写寄存器,其功能是直接控制PIC单片机的各端口为输入或输出。当写入TRISX寄存器的位(可以是1~8位)为1时,则X口被设置成输入口;为0时,X口被设置成输出口。写入TRISX数的方法,由工作寄存器W完成。为此特介绍一条W内容(常数K)送寄存器f的指令:
说明:(1)上述指令功能是把W的内容(可以是常数K)传送至寄存器f,f可以是一种RAM,也可以是特殊功能寄存器。
3.状态寄存器STATUS和寄存器体选BANK0、BANK1……的方法
PIC单片机内部的状态寄存器STATUS也是一种特殊功能寄存器。状态寄存器可作任何指令的操作数(被写对象),以完成STATUS的多种控制功能。不同型号的PIC单片机其对应的状态寄存器略有不同,差别很小。下图是PIC16CXX(包括PIC16F84)的状态寄存器每位的专用功能符号,且每位的符号均有一定的控制功能。这里主要介绍RP1、RP0(第6、5位)的功能。
PIC16F84芯片内部有些特殊功能寄存器是处于存储体BANK1中,如TRISA、TRISB,在建立源程序它们被派上用场时,必须首先利用指令选择它们的所在的存储体(寻址),此时需要设置状态寄存器STATUS的RP1、RP0(第6、5位)的两位状态置,即可完成指定寄存器的体选功能。选择的方法如下图所示。为此介绍两条PIC单片机面向位的指令
说明:上述指令功能是寄存器f可代表特殊功能寄存器)位的清零指令,其中b是寄存器(8位的)的位地址,b取值为0≤b≤7
说明:上述指令功能是寄存器f位的置1指令,b的意义同上。
实例:当PIC16F84的控制寄存器TRISA、TRISB被派上用场时,因控制寄存器TRIS在PIC16F84内部硬件资源的存储体BANK1中,所以在建立相关的源程序时,应进行体选,即有下述一组选体指令:
说明:上述的指令组合完成了两个功能,(1)对状态寄存器第5、6位的置数,达到了选取控制寄存器TRIS所在的存储体BANK1(寻址);(2)设定了PIC16F84的B口为输出、A口为输入。
4.建立PIC16F84可执行的源程序实例。利用伪指令和助记符指令的基本知识,即可建立PIC16F84单片机具有简单功能的源程序:
说明
(1)上述PIC16F84源程序是可执行的。所谓可执行是指:当把该源程序在PC机上编辑(用键盘敲入源程序字符)再命名和选择了盘符路径后,即可在MPLAB集成开发软件中进行汇编,汇编生成目标码hex文件,即可在PIC编程器中将源程序固化,再用实验板做相应的实验。
(2)该源程序的功能是设置PIC16F84的B口输出相间的高电平。若用实验编程器的实验板做实验,一旦在实验板的插座上插入PIC16F84芯片,再插入适配器电源,实验板上的8只LED(B口接的),则会间亮。读者还可将源程序中MOVLW B’l0101010’的二进制数任意改写,可使B口外接的LED按你需要点亮。
(3)从上述源程序中可以看出,PIC单片机源程序的格式为:
标号助记符指令操作数;注释其中标号代表指令的符号地址,可表示转移指令(如GOTO)中转移的地址。在实际的源程序中,不一定每条指令都需加标号,只有在需要时,才需加上标号。标号可用英语字符组成(自定义)。
(4)源程序中的注释,是不参与汇编的,主要供编程者便于查看。所以注释应简短,说明问题即可。注释应以该条指令在源程序中的功能为主,而不是指指令本身的功能。注释之前定加“;”分号。此外,书写指令时,标号、助记符指令、操作数、注释之间至少应有一空格。若一行语句无标号,则助记符指令前至少应留一个空格。注意:源程序的书写最好排列整齐,以便阅读。
(5)书写源程序时,若操作数为特殊功能寄存器,应用大写英语字母,否则汇编不会成功。所以为了书写方便,建议在书写源程序时,所有的英语符号(包括助记符指令)均用大写为好。
(6)在源程序中常用了各种语句的符号如“,”“,”“;”“’”等,不同的指令语句,其符号不同,切勿错用,否则汇编不会成功。
(7)源程序建立完后,还需命名。源程序名由主文件名和扩展名组成。主文件名可自定义,扩展名定义为.ASM。
上一篇:信号数据的FFT变换介绍