优质实用文档精选——Pic 8位单片机汇编指令识读.docx

上传人:高远 文档编号:3600889 上传时间:2020-09-25 格式:DOCX 页数:23 大小:28.46KB
返回 下载 相关 举报
优质实用文档精选——Pic 8位单片机汇编指令识读.docx_第1页
第1页 / 共23页
优质实用文档精选——Pic 8位单片机汇编指令识读.docx_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《优质实用文档精选——Pic 8位单片机汇编指令识读.docx》由会员分享,可在线阅读,更多相关《优质实用文档精选——Pic 8位单片机汇编指令识读.docx(23页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Pic 8位单片机汇编指令识读各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS51系列单片机汇编语言一样,每条汇编

2、语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。1 标号与MCS51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。书写标号时,规

3、定第一字符必须是字母或半角下划线“”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASC码等。具体表示时,规定在二进制数前冠

4、以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。指令的操作数项也是可选项。PIC系列与MCS51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的

5、寻址实例,均可在本文的后面找到。4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。二、清零指令(共4条)1 寄存器清零指令实例:CLRW;寄存器W被清零说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS51系列单片机中的累加器A,CLR是英语Clear的缩写字母。2 看门狗定时器清零指令。实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)说明:WDT是英语Watchdog Timer的缩写字母。CL

6、R见上述说明。注意该两条指令无操作数。3 寄存器f清零指令。指令格式:CLRF f实例:CLRF TMRO;对TMRO清零说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。4 位清零指令。指令格式 BCF f,b实例:BCF REG1,2;把寄存器REG1的D2位清零说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器

7、F的位号(或位地址),所以b的取值为07或D0D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。三、面向字节、常数与控制操作的指令 1传送立即数至工作寄存器W指令 指令格式:MOVLW k;k表示常数、立即数和标号 说明:MOVLW是Move Literal to w的缩写 实例:MOVL 0x1E;常数30送W 2I/O口控制寄存器TRIS设置指令 指令格式;TRIS

8、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口)为输入或输出的语句。可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。 3W寄存器内容送寄存器f(W内容保持不变)指令 指令格式:MOVWF f 说明:MO

9、VWF是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代

10、表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口的内容要读出时,应保证写、读之间有个稳定时间

11、,因此加入了空操作指令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寄存器内容加

12、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某个汇编语言的延时子程序(摘要): BELY MOVLW 0xC5 送延时常数0C5H入W MOVWF COUNT2; 0C5H

13、送入计数器2 CLRF COUNT1; 对计数器1清零 LOOP INCFSZ COUNT1; 计数器1加1计数器1加1结果不为零,跳转循环 GOTO LOOP; DECTSZ CPUNT2 计数2减1计数器2减1结果不为零,跳转循环重复执行第4条指令 GOTO LOOP; RETLW 0 ; 子程序执行结束返回 说明:1当执行第(4)条加1指令结果为零时,就间跳转到执行第(6)条指令。2当执行第(6)条减1指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。3计数器1或2代表PIC中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。 本文关于指令

14、的注释将与前述指令中的略有不同。前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。10 寄程器半字节交换指令指令格式:SWAPFf,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、D

15、5、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 STAT

16、US_TEMP,W; 交换STATUS_TEMP与W的内容 MOVWF STATUS; TATUS复原成原来的状态 SWAPF W_TEMP,F; 交换内容 SWAPF W_TEMP,W; W复原成原来的状态说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。这是初学者应特别注意的。11 子程序调用指令(Subroutine Call)指令格式:CALL k; k为立即地址说明:子程序调用,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址(PC)1)压栈保护,再转入所调用的子程序入口地址执行(与MCS51指令功能相似)。指令格式模式:HERE

17、 CALL DELAY; 调用延时子程序DELAY MOVLW 0x80; 延时子程序 RETLW 0说明:调用指令执行前,PC=地址HERE调用指令执行后,PC=地址DELAY(标号),堆栈指针TOS=HERE1(返回地址)。实例:见下条指令的实例12 寄存器内容取反指令指令格式:COMFf,d说明:COMF是Complement f的缩写。其中d=1时,操作(f)f;d=0时,操作(f)w。功能:寄存器f内容取反后送入W(d=0)或f自身(d=1)。实例: ORG 0x1FF GOTO MAIN ORG 0DELAY MAINMOVLW 0 ;主程序开始 TRTS 5 ;设置RA口为输出

18、BCF 5,0 ;置RA0位为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指

19、令和另外两条位跳步指令(PIC高级产品多增一条f的b位触发转换指令)。(1)位置1指令。指令格式 BSFf,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间跳指令。指令格式 BTFSSf,b说明:BTFSS是

20、Bit Test,Skip if Set的缩写。其指令的逻辑功能与上条相反,位测试f(b)=1就间跳执行,f(b)=0顺序执行。上面介绍的PIC 8位单片机汇编语言指令仅是部分指令,此外还有循环左、右移指令;W和寄存器f相“加”、相“与”指令和进入睡眠方式等指令。鉴于报纸版面的限制,不在这里一一介绍,今后将在程序的应用试验中再作补充说明。指令 指令缩写来源ADDWFf,d ADD W and FANDWFf,d AND W with FCLRF f CLeaR FCLRW - CLeaR WCOMF f,d COMplement FDECF f,d DECrement FDECFSZ f,d

21、DECrement F,Skip if 0(Zero)INCF f,d INCrement FINCFSZ f,d INCrement F,Skip if 0(Zero)IORWFf,d Inclusive OR W with FMOVF f,d MOVe FMOVWFf MOV W to FNOP - NO OperationRLCF f,d Rotate Left F through carryRRCF f,d Rotate Right F through carrySUBWFf,d SUBtract W from FSWAPFf,d SWAP nibbles in FXORWFf,d e

22、Xclusive OR W with FBCFf,b Bit Clear FBSFf,b Bit Set FBTFSCf,b Bit Test F,Skip if ClearBTFSSf,b Bit Test F,Skip if SetADDLWk ADD Literal and WANDLWk AND Literal with WCALL k CALL subroutineCLRWDT - CLeaR WatchDog TimerGOTO k GO TO addressIORLWkInclusive OR Literal with WMOVLWk MOVe Literal to WRETFI

23、E - RETurn From IntErruptRETLWk RETurn with Literal in WRETURN - RETURN from subroutineSLEEP - go into SLEEP modeSUBLWk SUBtract Literal from WXORLWk eXclusive OR Literal with W其中,有朋友说,上面指令系统中的RETFIE - RETurn From IntErrupt应理解为RETurn From Interrupt with interrupt EnableADDWF Add WREG to fADDWFC Add

24、WREG and Carry bit to fANDWF AND WREG with fCLRF Clear fCLRW Clear WCOMF Complement fCPFSEQ Compare f with WREG, skip =CPFSGT Compare f with WREG, skip if CPFSLT Compare f with WREG, skip if DECF Decrement fDECFSZ Decrement f, Skip if 0DCFSNZ Decrement f, Skip if Not 0INCF Increment fINCFSZ Incremen

25、t f, Skip if 0INFSNZ Increment f, Skip if Not 0IORWF Inclusive OR WREG with fMOVF Move fMOVFF Move fs (source) to fd (destination)MOVWF Move WREG to fMULWF Multiply WREG with fNEGF Negate fRLCF Rotate Left f through CarryRLNCF Rotate Left f (No Carry)RRCF Rotate Right f through CarryRRNCF Rotate Rig

26、ht f (No Carry)SETF Set fSUBFWB Subtract f from WREG with borrowSUBWF Subtract WREG from fSUBWFB Subtract WREG from f with borrowSWAPF Swap nibbles in fTSTFSZ Test f, skip if 0XORWF Exclusive OR WREG with fBCF Bit Clear fBSF Bit Set fBTFSC Bit Test f, Skip if ClearBTFSS Bit Test f, Skip if SetBTG Bi

27、t Toggle fBC Branch if CarryBN Branch if NegativeBNC Branch if Not CarryBNN Branch if Not NegativeBNOV Branch if Not OverflowBNZ Branch if Not ZeroBOV Branch if OverflowBRA Branch UnconditionallyBZ Branch if ZeroCALL Call subroutineCLRWDT Clear Watchdog TimerDAW Decimal Adjust WREGGOTO Go to address

28、NOP No OperationPOP Pop top of return stack (TOS)PUSH Push top of return stack (TOS)RCALL Relative CallRESET Software device RESETRETFIE Return from interrupt enableRETLW Return with literal in WREGRETURN Return from SubroutineSLEEP Go into Standby modeADDLW Add literal and WREGANDLW AND literal wit

29、h WREGIORLW Inclusive OR literal with WREGLFSR Move literal to FSRxMOVLB Move literal to BSRMOVLW Move literal to WREGMULLW Multiply literal with WREGRETLW Return with literal in WREGSUBLW Subtract WREG from literalXORLW Exclusive OR literal with WREGTBLRD* Table ReadTBLRD*+ Table Read with post-incrementTBLRD*- Table Read with post-decrementTBLRD+* Table Read with pre-incrementTBLWT* Table WriteTBLWT*+ Table Write with post-incrementTBLWT*- Table Write with post-decrementTBLWT+* Table Write with pre-increment第 23 页 共 23 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com