PIC单片机汇编指令

发布者:少年不识愁滋味最新更新时间:2012-12-18 来源: 21ic 关键字:PIC单片机  汇编指令  RA口 手机看文章 扫描二维码
随时随地手机看文章

PIC 8位单片机汇编指令识读

各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。

PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。

在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。

一、PIC汇编语言指令格式

PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:

标号 操作码助记符 操作数1,操作数2;注释

指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。

1 标号 与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。

书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。

2 操作码助记符 该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。

3 操作数 由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。

指令的操作数项也是可选项。

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清零指令。指令格式:CLRF f

实例:CLRF TMRO;对TMRO清零

说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00~Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。

4 位清零指令。指令格式 BCF f,b

实例:BCF REG1,2;把寄存器REG1的D2位清零

说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为0~7或D0~D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。[page]

通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。

本文关于指令的注释将与前述指令中的略有不同。前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。

10 寄程器半字节交换指令

指令格式:SWAPF f,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、D5、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 STATUS_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)压栈保护,再转入所调用的子程序入口地址执行(与MCS-51指令功能相似)。

指令格式模式:HERE CALL DELAY;调用延时子程序

DELAY MOVLW 0x80 ;延时子程序

RETLW 0

说明:调用指令执行前,PC=地址HERE

调用指令执行后,PC=地址DELAY(标号),堆栈指针TOS=HERE+1(返回地址)。

实例:见下条指令的实例

12 寄存器内容取反指令

指令格式:COMF f,d

说明:COMF是Complement f的缩写。其中d=1时,操作(f)→f;d=0时,操作(f)→w。

功能:寄存器f内容取反后送入W(d=0)或f自身(d=1)。

实例:  ORG   0x1FF

GOTO MAIN

ORG   0

DELAY …

MAIN MOVLW 0 ;主程序开始

TRTS 5 ;设置RA口为输出

BCF 5,0  ;置RA口0位为0

LOOP   CALL DELAY;闪动延时

COMF 5 ;RA口求反(亮—灭—

亮……控制)

GOTO LOOP ;循环

…[page]

说明:上述指令是一种PIC16C54 LED发光控制实验部分程序。其中延时子程序DELY未列出,但不影响本条指令的识读。程序中的主程序开始的三条指令,均已介绍过,紧跟着的CALL指令是调用执行子程序,其入口地址为标号DELAY。子程序执行结束后,又执行COMF 5的LED发光亮—灭…亮—灭……控制指令。后面一条GOTO LOOP指令是达到LED循环点亮目的。

13 面向位的操作指令(共4条,PIC高级产品多增一条)

该类指令除一条位清零外,另有一条寄存器f位b的置1指令和另外两条位跳步指令(PIC高级产品多增一条f的b位触发转换指令)。

(1)位置1指令。指令格式 BSF f,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间跳指令。指令格式 BTFSS f,b

说明:BTFSS是Bit Test,Skip if Set的缩写。其指令的逻辑功能与上条相反,位测试f(b)=1就间跳执行,f(b)=0顺序执行。

上面介绍的PIC 8位单片机汇编语言指令仅是部分指令,此外还有循环左、右移指令;W和寄存器f相“加”、相“与”指令和进入睡眠方式等指令。鉴于报纸版面的限制,不在这里一一介绍,

在前面的一系列文章中,我们详细学习了单片机中最基本的MCS-51系列。从本文开始,我们进入PIC单片机的学习部分,在接下来的文章中,ANY电子将带你详细学习PIC单片机的汇编语言以及PIC C语言,带你进入一个新的单片机世界。

首先,我们先来了解一下PIC单片机的指令系统,为了方便记忆,我们就从PIC单片机指令系统的来源开始这一系列的文章。需要注意的是,此处指令系统的来源由相关资料和书籍整理,仅供参考,以帮助理解记忆,尽快掌握PIC单片机的指令系统。

在前面的一系列文章中,我们详细学习了单片机中最基本的MCS-51系列。从本文开始,我们进入PIC单片机的学习部分,在接下来的文章中,ANY电子将带你详细学习PIC单片机的汇编语言以及PIC C语言,带你进入一个新的单片机世界。
首先,我们先来了解一下PIC单片机的指令系统,为了方便记忆,我们就从PIC单片机指令系统的来源开始这一系列的文章。需要注意的是,此处指令系统的来源由相关资料和书籍整理,仅供参考,以帮助理解记忆,尽快掌握PIC单片机的指令系统。
指令                                 指令缩写来源
ADDWF        f,d                 ADD W and F
ANDWF        f,d                 AND W with F
CLRF             f                  CLeaR F
CLRW            -                  CLeaR W
COMF           f,d                COMplement F
DECF            f,d                DECrement F
DECFSZ        f,d                DECrement F,Skip if 0(Zero)
INCF             f,d                INCrement F
INCFSZ         f,d                INCrement F,Skip if 0(Zero)
IORWF          f,d                Inclusive OR W with F
MOVF           f,d                 MOVe F
MOVWF        f                   MOV W to F
NOP              -                   NO Operation
RLF               f,d                Rotate Left F through carry
RRF               f,d                Rotate Right F through carry
SUBWF         f,d                 SUBtract W from F
SWAPF          f,d                SWAP nibbles in F
XORWF         f,d                eXclusive OR W with F
BCF               f,b                Bit Clear F
BSF               f,b                 Bit Set F
BTFSC           f,b                Bit Test F,Skip if Clear
BTFSS           f,b                Bit Test F,Skip if Set
ADDLW         k                  ADD Literal and W
ANDLW         k                  AND Literal with W
CALL            k                   CALL subroutine
CLRWDT       -                   CLeaR WatchDog Timer
GOTO            k                  GO TO address
IORLW          k                   Inclusive OR Literal with W
MOVLW        k                   MOVe Literal to W
RETFIE         -                    RETurn From IntErrupt
RETLW          k                  RETurn with Literal in W
RETURN       -                    RETURN from subroutine
SLEEP           -                   go into SLEEP mode
SUBLW         k                   SUBtract Literal from W
XORLW         k                  eXclusive OR Literal with W
其中,有朋友说,上面指令系统中的
RETFIE         -                    RETurn From IntErrupt
应理解为RETurn From Interrupt with interrupt Enable

关键字:PIC单片机  汇编指令  RA口 引用地址:PIC单片机汇编指令

上一篇:PIC单片机常见14问
下一篇:PIC单片机与MCS-51系列单片机有哪些区别?

推荐阅读最新更新时间:2024-03-16 13:15

PIC单片机驱动步进电机先正转后反转
//************************************************** //实验目的: //熟悉PIC单片机驱动步进电机,先正转后反转 //************************************************** //************************************************** //硬件设置: //1、把步进电机接在J10位置上 //2、5脚是5V电源脚,1-4接步进电机线圈 //************************************************** //*********************
[单片机]
PIC单片机使LCD面板产生闪烁效果的设计
使用LCD面板,信息可以通过多种方式显示。例如,如何将用户的注意力吸引到LCD面板的特定部分?一种不需要任何附加段的方式是产生闪烁效果。 以常见的时钟(见下图)应用为例。小时和分钟之间的“:”通常每秒闪烁一次(显示半秒,隐藏半秒)。 在缺少滴答声或通常伴随模拟外观时钟的秒针时,这可以显示时钟正在计时。它起到一种重要的作用,让用户知道时钟正在工作。 如果电源的电能即将耗尽,则通常整个时钟显示会开始闪烁。这使用户可以立即了解时钟不再显示正确的时间。 在用户设置时间时,通常使用闪烁来显示已进入了新模式,例如闪烁小时来指示正在设置小时,或者闪烁分钟来指示正在设置分钟。在简单时钟中,闪烁用于多种不同用途。如果没有闪烁效果,则
[单片机]
<font color='red'>PIC单片机</font>使LCD面板产生闪烁效果的设计
PIC单片机之中断程序
什么是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。 中断事件 什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如
[单片机]
PIC单片机-PWM波
一、编写程序,使用RC2的PWM功能生成频率250Hz的正弦波 #include htc.h #define uint8 unsigned char #define uint16 unsigned int __CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //设置配置位 //WDTE_OFF:disable watchdog timer 看门狗禁止 //LVP_OFF:low voltage programming disabled 低电压编程禁止 //FOSC_HS:high speed crystal/resonator 4M以上晶振选择HS高
[单片机]
<font color='red'>PIC单片机</font>-PWM波
PIC单片机在ICD1上做LED灯的循环闪烁程序
;************************************************* ;* FLASH.ASM * ;************************************************* ;************************************************* ;* 本程序是一个LED灯的循环闪烁程序,用INT键来切换* ;* 闪烁模式 * ;************************************************* include p16f877.inc ;*---- MODESEL equ 20h MODESELB equ 21h
[单片机]
PIC单片机开发过程中软、硬件设计一些经验、技巧
本文总结了作者PIC单片机开发过程中一些经验、技巧,供同行参考。 1 怎样进一步降低功耗 功耗,电池供电仪器仪表中是一个重要考虑因素。PIC16C 系列单片机本身功耗较低(5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,保证满足工作要求前提下,可采用降低工作频率方法,工作频率下降可大大降低功耗(如PIC16C 3V,32kHz下工作,其电流可减小到15 A),但较低工作频率可能导致部分子程序(如数学计算)需占用较多时间。这种情况下,当单片机振荡方式采用RC电路形式时,可以采用中途提高工作频率办法来解决。 具体做法是闲置一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。
[单片机]
基于PIC单片机的4×4行列式键盘工作原理简介
PIC单片机的4×4行列式键盘工作原理: (1)单片机系统键盘原理 行列式键盘的接法比独立式键盘的接法复杂,编程实现上也会比较复杂。但是,在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,其原理图如图1所示。 图1 4×4行列式键盘的原理图 实际的工程中,可能会使用PIC16C5X这种通用的可编程的键盘、显示接口器件,使用PIC16C5X单片器件就能够完成键盘输入和显示控制两种功能。 行列式键盘的工作方式是先用列线发送扫描字,然后读取行线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,可以和具有64个按键的矩阵键盘相连接,能对键盘不断扫描、自动消抖、自动识别按下的
[单片机]
基于<font color='red'>PIC单片机</font>的4×4行列式键盘工作原理简介
PIC单片机通用同步异步收发器的编程应用
0 引言 PIC18Fxx8单片机是美国微芯公司推出的16位RISC指令集的高级产品,由于芯片内含有A/D、内部E2PROM存储器、I2C和SPI接口、CAN接口、同步/异步串行通信(USART)接口等强大的功能,具有很好的应用前景。但是,目前介绍其应用和以C语言编程的中文参考资料很少。本文将探讨该型单片机异步串行通信的编程应用,程序用HI-TECH PICC-18 C语言编写,并在重庆大学-美国微芯公司PIC单片机实验室的PIC18F458实验板上通过。 1 PIC18FXX8单片机同步/异步收发器(USART) 通用同步/异步收发器(USART)模块是由PIC18FXX8内的三个串行I/O模块组成的器件之
[单片机]
<font color='red'>PIC单片机</font>通用同步异步收发器的编程应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved