还剩4页未读,继续阅读
文本内容:
位单片机汇编指令识读Pic8各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的PIC8位单片机共有三个级别,有相对应的指令集基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长其指令向下兼容在这里笔者介绍PIC8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下标号操作码助记符操作数1,操作数2;注释指令格式说明如下指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令1标号与MCS-51系列单片机功能相同,标号代表指令的符号地址在程序汇编时,已赋以指令存储器地址的具体数值汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理书写标号时,规定第一字符必须是字母或半角下划线它后面可以跟英文和数字字符、冒号()制符表等,并可任意组合再有标号不能用操作码助记符和寄存器的代号表示标号也可以单独占一行2操作码助记符该字段是指令的必选项该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时;指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之3操作数由操作数的数据值或以符号表示的数据或地址值组成若操作数有两个,则两个操作数之间用逗号(,)分开当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数还可以是被定义过的标号、字符串和ASCH码等具体表示时,规定在二进制数前冠以字母B;例如B;八进制数前冠以字母“0”,例如0257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以H:例如H2F在这里PIC8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成OOx2F指令的操作数项也是可选项PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种所以PIC系列单片机指令中的操作数常常出现有关寄存器符号有关的寻址实例,均可在本文的后面找到4注释用来对程序作些说明,便于人们阅读程序注释开始之前用分号⑺与其它部分相隔当汇编程序检测到分号时,其后面的字符不再处理值得注意在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用
二、清零指令(共4条)1寄存器清零指令实例CLRW;寄存器W被清零说明该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母2看门狗定时器清零指令实例CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)说明WDT是英语Watchdog Timer的缩写字母CLR见上述说明注意该两条指令无操作数3寄存器f清零指令指令格式CLRFf实例CLRF TMRO;对TMRO清零说明在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址F取值按PIC系列不同型号而不同,一般为0x00-0x1F/7F/FFo TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO4位清零指令指令格式BCF f,b实例BCFREG1,2;把寄存器REG1的D2位清零说明BCF是英语Bit ClearF的缩写指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为〜7或D0-D7o实例中REG是Register的缩写实例中的2代表指令格式中的b=2即寄存器REG1的D2位通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式初学者没有必要死记指令,重要是理解和实践本文关于指令的注释将与前述指令中的略有不同前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么或指令的作用而不是说指令的直接功能鉴于上述原因,下述的指令注释将改变过去的注释方法用程序应起的作用作注释10寄程器半字节交换指令指令格式SWAPF f,d说明SWAPF是Swap f的合写符号f、d的意义与前述的相同该条指令的功能是寄存器f的高4位与低4位交换,即指令执行前,若寄存器f的8位状态为D
7、D
6、D
5、D
4、D
3、D
2、DI、D0,执行后的8位状态变为D
3、D
2、DK DO、D
7、D
6、D
5、D4,其结果存入Wd=0或fd=l中实例中断现场保护是中断技术中重要部分由于PIC16Cxx指令系统中没有进栈PUSH和出栈POP指令,所以只能用其它指令来实现因为在主程序中常常用到工作寄存器W和状态寄存器STATUS,所以中断现场保护常要保护寄存器W和STATUSo下面是对PIC16c7x系列芯片中断现场保护的实例程序MOVWF W_TEMP;将W内容存入到临时寄存器W_TEMP中SWAPF STATUS,W;交换STATUS与W内容MOVWF STATUS_TEMP;将STATUS的内容存入至I」临...时寄存器STATUS_TEMP中中断服务程序SWAPF STATUS_TEMP,W;交换STATUS_TEMP与W的内容MOVWF STATUS1TATUS复原成原来的状态SWAPF W_TEMP,F;交换内容SWAPF W_TEMP,W;W复原成原来的状态说明上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及这是初学者应特别注意的11子程序调用指令Subroutine Call指令格式CALL k;k为立即地址说明子程序调用,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址PC+1压栈保护,再转入所调用的子程序入口地址执行与MCS—51指令功能相似指令格式模式HERE CALLDELAY;调用延时子程序DELAY MOVLW0x80;延时子程序RETLW0说明调用指令执行前,PC=地址HERE调用指令执行后,PC二地址DELAY标号,堆栈指针TOS=HERE+1返回地址实例见下条指令的实例12寄存器内容取反指令指令格式COMF f,d说明COMF是Complement f的缩写其中d=l时,操作⑴一f;d=O时,操作⑴一w功能寄存器f内容取反后送入Wd=0或f自身d=l实例ORG OxIFFGOTO MAINORG0DELAY...MAIN MOVLW0;主程序开始TRTS5;设置RA口为输出BCF5,0;置RA口0位为0LOOP CALLDELAY;闪动延时COMF5;RA口求反亮一灭一亮……控制GOTO LOOP;循环•••说明上述指令是一种PIC16c54LED发光控制实验部分程序其中延时子程序DELY未列出,但不影响本条指令的识读程序中的主程序开始的三条指令,均已介绍过,紧跟着的CALL指令是调用执行子程序,其入口地址为标号DELAY子程序执行结束后,又执行COMF5的LED发光亮—灭・・・亮—灭・・・・・・控制指令后面一条GOTO LOOP指令是达到LED循环点亮目的13面向位的操作指令共4条,PIC高级产品多增一条该类指令除一条位清零外,另有一条寄存器f位b的置1指令和另外两条位跳步指令PIC高级产品多增一条f的b位触发转换指令⑴位置1指令指令格式BSF f,b说明BSF是BitSetf的缩写F和b的意义与前述相同,该条指令的功能是将寄存器f的b位置lo2位测试、为零间跳指令指令格式BTFSC f,b说明BTFSC Bit Test,Skip ifClear的缩写指令功能是测试寄存器f位“b”,如为0,跳过下一条指令;为1顺序执行,即当fb=O时,就不执行当前指令而执行下一条指令间跳,即用一条空指令NOP代替它,所以该条指令占用2个指令周期3位测试、为1间跳指令指令格式BTFSS f,b说明BTFSS是BitTest,Skip ifSet的缩写其指令的逻辑功能与上条相反,位测试fb=l就间跳执行,fb=O顺序执行上面介绍的PIC8位单片机汇编语言指令仅是部分指令,此外还有循环左、右移指令;W和寄存器f相加”、相与”指令和进入睡眠方式等指令鉴于报纸版面的限制,不在这里一一介绍,今后将在程序的应用试验中再作补充说明PIC单片机汇编指令详细来源2009-05-0922:08在前面的一系列文章中,我们详细学习了单片机中最基本的MCS-51系列从本文开始,我们进入PIC单片机的学习部分,在接下来的文章中,ANY电子将带你详细学习PIC单片机的汇编语言以及PIC C语言,带你进入一个新的单片机世界首先,我们先来了解一下PIC单片机的指令系统,为了方便记忆,我们就从PIC单片机指令系统的来源开始这一系列的文章需要注意的是,此处指令系统的来源由相关资料和书籍整理,仅供参考,以帮助理解记忆,尽快掌握PIC单片机的指令系统指令令缩写来源ADDWF ANDWFCLRF RF CLRWW C0MF FDECF tF DECFSZF,Skip if0Zero INCFent FINCFSZ指F,Skip if0Zerof,dI0RWF ADDW andFf,dOR Wwith FAND Wwith FfMOVFCLeaMOVWFNOP CLeaR0Operationf,dRLFCOMplementate LeftF throughf,dcarryDECremenRRFf.date RightF throughDECrementcarrySUBWFf,dfrom FSWAPFINCremnibbles inFf,dTNCrementf,dInclusivef,dMOVe FMOVW toFNRotRotSUBtract WXORWFwith FBCFf,d exclusiveOR WClearF BSFit SetFBTFSCf,b BitF,Skip ifClearBTFSSf,b BF,Skip ifSetADDLW andW ANDLWf,bBit TestwithW CALLsubroutineCLRWDTf,bBit TestWatchDogTimerGOTO addressIORLWkADD LiteralkANDLiteralkCALLCLeaRkGO TOkInclusiveOR Literal with WMOVLWkMOVeLiteral toWRETFIE-RETurnFrom IntErruptRETLWkRETurnwith Literalin WRETURN-RETURNfrom subroutineSLEEPintoSLEEP modegoSUBLWkLiteral fromWSLBtractXORLW kORLiteralwithWexclusive其中,有朋友说,上面指令系统中的RETFIE RETurnFromIntErrupt应理解为RETurn FromInterrupt withinterrupt Enable。