PIC单片机_指_超浓缩.doc

上传人:hs****ma 文档编号:559599199 上传时间:2024-03-16 格式:DOC 页数:9 大小:952.51KB
返回 下载 相关 举报
PIC单片机_指_超浓缩.doc_第1页
第1页 / 共9页
PIC单片机_指_超浓缩.doc_第2页
第2页 / 共9页
PIC单片机_指_超浓缩.doc_第3页
第3页 / 共9页
PIC单片机_指_超浓缩.doc_第4页
第4页 / 共9页
PIC单片机_指_超浓缩.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PIC单片机_指_超浓缩.doc》由会员分享,可在线阅读,更多相关《PIC单片机_指_超浓缩.doc(9页珍藏版)》请在金锄头文库上搜索。

1、 - 7 -PIC8位单片机汇编语言常用指令的识读各大类单片机的指令系统是没有通用性, PIC 8位单片机有三个级别,基本级有指令33条,指令12位字长;中级有指令35条(26),指令14位字长;高级有指令58条,指令16位字长。其指令向下兼容。一、PIC汇编语言指令格式:与MCS51系列单片机汇编语言一样,每条指令由4个部分组成:标号操作码助记符操作数1,操作数2;注释指令间由空格作隔离符,空格可以是1格或多格,1标号代表指令的符号地址。符号地址(即标号)便于查看、修改,尤其是便于指令转移地址的表示。标号是可选项,只有在被其它语句引用时才需标号。无标号时,指令助记符前须留一个或以上空格,否则

2、该助记符会被汇编程序作标号误处理。标号规定第一字符必须是字母或半角下划线“”,后可跟英文和数字字符、冒号(:)制符表等,标号不能用操作码助记符和寄存器的代号表示。标号也可单独占一行。2操作码助记符是指令必选项。可以是指令助记符,伪指令及宏命令组成3操作数是可选项由操作数的数据值或以符号表示的数据或地址值组成。若有两个用逗号(,)分开。是常数时可以是二、八、十或十六进制数。还可以是被定义过的标号、字符串和ASC码等。二进制前冠以字母“B”(Binary),B10011100;八进制数前冠以字母“O”(Octal),例如O257;十进制数前冠以字母“D” (Decimal),例如D122;十六进制

3、数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上0x (Hexadecilna),如H2F可以写成0x2F。寻址方法,即操作数的来源或去向问题。根据操作数来源可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种4注释对程序说明,前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。三、面向字节、常数与控制操作的指令1NOP: (No Operation)空操作指令:使程序计数器PC加1,占用一个机器周期, 常用于写读之间有个稳定时间2 MOVW

4、F f: (Move W to f):W寄存器内容送寄存器f(W内容保持不变), (f为数据寄存器低7位地址下同). 主要用于对数据寄存器赋值.3 MOVF f,d : Move f把数据寄存器内容传送到目的寄存器 d=0/w时,f内容送W; d=1?/f时,f内容送到自身寄存器用于判断本身是否为0, 如为0置位Z标志。(后一个是目标寄存器,应该下同)4 CLRW: W寄存器清零, W为PIC的工作寄存器,相当于MCS51系列单片机中的累加器A.5 CLRF: 数据寄存器清0, 置位Z标志 (DC:辅助进位/借位位, 低4位向高4位进/借位则置1)6 ADDWF f,d: 数据寄存器和W寄存器

5、内容相加, 状态影响标志Z, DC, C.7 SUBWF f,d: (subtract)数据寄存器内容减W寄存器内容, 状态影响标志Z, DC, C, f=d, Z=1; fd,没有借位, C=1; fd, 借位C=0. 过程先求反码再与W相加, 所以借位标志可能与其他单片机不同,要注意.8 IORWF f,d: f和w相或, 状态影响标志Z.9 ANDWF f,d: 数据寄存器和w寄存器内容相与并判0.可以设置任意位为0,影响标志位Z, 如: MOVLW b00001111 / ANDWF PORTC, W 实现只要PORTC低四位是0则Z标志置1.10 XORWF f,d: 异或 影响标志

6、位Z. (任何数与1异或结果为其反码, 故可以将任意位数据反转, 或判别数据寄存器内容是否为一特定值.11 DECF f,d: (decremente) 数据寄存器的内容递减一, 影响状态标志位Z, 12 INCF f,d: (increase) 数据寄存器的内容递加一, 影响状态标志位Z.13 COMF f,d: (Complement)寄存器内容取反, 影响状态标志位Z. 求补码就是先求反在加一就是补码了.14 DECFSZ f,d: (Decrement f,Skip of not zero) 寄存器内容减1,结果为零的间跳指令, 影响状态标志位Z, 如减1不为零,指令顺序执行;为零时,

7、就间跳下一条指令执行,常用记数控制.15 INCFSZ f,d: (increase f,Skip of not zero) 寄存器内容加1,结果为零间跳指令. 其它逻辑关系与上条相同.16 RRF f,d: (rotate right f through carry)数据寄存器带进位位右移(C变成最高位): 影响状态标志位C, 常用于除2运算:(RRF data, w / RRF data, f)17 RLF f,d: (rotate left f through carry) 数据寄存器带进位位左移(C变成最低位): 影响状态标志位C, 常用于乘2运算: (RLF data, w / RL

8、F data,f)18 SWAPF f,d: (swap f)寄存器半字节交换: 实例:中断现场保护是中断技术中重要部分。由于PIC16C指令系统中没有进栈PUSH和出栈POP指令,所以只能用其它指令来实现。因为在主程序中常常用到工作寄存器W和状态寄存器STATUS,所以中断现场保护常要保护寄存器W和STATUS。下例PIC16C7中断现场保护 MOVWFW_TEMP ;将W内容存入到临时寄存器W_TEMP中 SWAPFSTATUS,W ;交换STATUS与W内容 MOVWF STATUS_TEMP;将STATUS的内容存入到临时寄存器STATUS_TEMP中中断服务程序/SWAPFSTATU

9、S_TEMP,W ;交换STATUS_TEMP与W的内容MOVWF STATUS ;TATUS复原成原来的状态 SWAPFW_TEMP,F ;交换内容SWAPFW_TEMP,W ;W复原成原来的状态/说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。初学者应特别注意.位操作指令19 BCF f,b: (bit clear f)数据寄存器中指定位清0, b为数据位编号(07)。20 BSF f,b: (bit set f) 数据寄存器中指定位置1.21 BTFSC f,b: (bit test f, skip if clear) 位测试、为零间跳指令

10、. 即当f(b)=0时,就不执行当前指令而执行下一条指令(间跳)22 BTFSS f,b: (bit test f, skip if set) 位测试,为1间跳指令: 位测试f(b)=1就间跳执行.立即数操作指令23 MOVLW k: (move literal to w) 传送立即数至工作寄存器W, (k表示常数、立即数和标号)24 ADDLW k: w寄存器和八位立即数相加, 状态影响标志Z, DC, C25 SUBLW k: 立即数减去w寄存器. 与SUBWF基本相同.26 IORLW k: w寄存器和八位立即数相或. 状态影响标志Z27 ANDLW k: w寄存器和八位立即数相与. 状

11、态影响标志Z,28 XORLW k: w寄存器和八位立即数相异或, 状态影响标志Z.控制指令29 GOTO m: 无条件跳转 (m为11位立即数指定的地址或标号)目的地址由本指令的11和特殊寄存器PCLATCH中的位4:3一起构成完整的13位地址.30 CALL m: (Subroutine Call) 子程序调用, 不同芯片实现方法不尽相同,共同点是首先将返回地址(PC)1)压栈保护,再转入所调用的子程序入口地址执行(与MCS51指令功能相似).31 RETURN: 子程序返回指令, 把硬件堆栈栈顶的内容(子程序调用时的返回地址)弹出到PC内,但寄存器PCLATH的内容不变.32 RETLW

12、 k: 子程序返回返回前先把8位立即数送W.常用于查表功能中.33 RETFIE: (return from interrupt)中断服务程序结束并返回. 把硬件堆栈栈顶的内容弹出到PC内并自动将中断寄存器INTCON中的第七位即全局中断使能位置重新置一响应中断时该位自动清0, 然后回到中断发生时的下一条指令处继续运行.34 CLRWDT: (clear watch dog timer) 清除看门狗计数器. 状态影响标志TO PD:STATUS寄存器标志位TO PD置1. 芯片烧写时如启用了片上独立的看门狗电路,程序运行一段时间需执行此指令,如长时期没执行计数器溢出时会复位.程序从复位处重新运

13、行, 它不能通过软件关闭.休眠时照样工作, 故可作退出休眠的方式,开启看门狗可避免软件死循环,主循环中一般只出现一次,绝不能把这条指令放到中断服务程序中.35 SLEEP: 进入低功耗休眠模式. 状态影响标志TO PD: STATUS寄存器标志位TO置1, PD置0.MPASM的伪指令: 伪指令不会产生可执行汇编指令但可帮助管理编写的程序增加可读性和可维护性.1 #include或include: 把另一个文件内容全部包含复制到本伪指令所在的位置, 通常是内部特殊功能寄存器定义的包含头文件,扩展名是.inc, 它们放在MCHIP_Tools目录下; 也可把现有其它程序文件作一代码模块状直接包含

14、进来作为自己程序的一部分:尖括号引用: 让编译器去默认路径下即安装目录下寻找该文件; “”双引号引用: 从引号中指定的全程文件路径下寻找该文件, 如没有指定在当前项目下寻找,找不到就报错. 尽量用标准头文件定义的寄存器符号便于理解. 如此上述首行#include伪指令应是PIC编程标准必备.2 list: 设定程序编译时的一些信息,如单片机的型号, 缺省数制, 项目管理模式等:3 _config: 设置配置字.4 _idlocs: 标记单元独立于其它存储器,此标记无法用软件读到, 读写只有用编程器实现, 无读保护, 可用于存放程序的版本或日期, 5 errorlevel: 控制编译时输出信息的

15、级别, 分0, 1, 2共3级: 0显示所有包括错误警告提示; 1 显示错误和警告, 2显示错误信息.在任何大级别上通过在中标号前用+-来打开关闭这类信息:6 #define/ #undefine: 定义常数符号, 用符号变量(不能是纯数字)替换另一符号串或变量, #undefine可注销已定义的符号变量或声明某一符号没被定义,常用在需要条件控制的编译场合.7 equ: 等于,类似#define但它只能替换立即数, 如替换符号,则符号必须是已定义替换了的立即数: 在绝对定位编程模式中, equ常用于定义用户自己的变量, 即用一符号代替固定的存储单元地址, 其符号在汇编后可生成相关的调试信息, 可通过各变量观察的方式显示此符号所代表的内存地址处的数据内容, 而#define则不生成调试信息,只是简单的符号数字替换而已. 看对符号w_temp的理解:8 Cblock / endc: 变量块连续定义: cblock定义变量块的起始地址, endc声明变量块定

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

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号