PIC中档系列单片机,每条指令14位,共有35条汇编指令,根据操作对象不同,可将其分为三类:

  • 字节操作类指令
  • 位操作类指令
  • 立即数与控制类操作指令

1、字节操作类指令,以MOVF指令为例:

指令:MOVF     f, d

说明:

  • 功能:寄存器f值传送;
  • MOVF为助记符,即操作指令,大小写均可;
  • f代表文件寄存器标识符,即RAM寄存器(PIC单片机基础1中有说明),取值范围为[0, 127]
  • d代表目标标识符,表明指令操作的结果放在何处;

   d=0:操作的结果放在W寄存器中;

   d=1:操作的结果放在f寄存器中;

  • 影响状态位:Z
  • 指令周期:1(执行本指令需要的时间)

实例1:

假设执行指令前,F寄存器22H的值为05H,W寄存器内的值为00H

MOVF    22H, 0

由于d=0,指令执行后结果存入W寄存器:

  22H(F寄存器)= 05H;

  W =  05H;

  Z =  0;

指令应用:由于PIC指令中,不存在F寄存器之间的值传递操作指令,这种操作需要借助W寄存器作为中介,并且此指令也可以直接给W寄存器赋值;

实例2:

假设执行指令前,F寄存器22H的值为05H,W寄存器内的值为00H

MOVF    22H, 1

由于d=1,指令执行后结果存入F寄存器(即22H):

  22H(F寄存器)= 05H;

  W =  00H;

  Z =  0;

指令应用:指令操作以后,寄存器值大小、位置都没变,那么这种指令有什么用呢?答案是:通过状态位Z判断寄存器的值是不是0。

在PIC的汇编指令中,我们没有高级语言中if (var == 0)这样方便的判断操作,想要判断一个寄存器的值是不是0,只有通过状态寄存器中的Z位来判断。当某条可以影响Z状态位的指令执行后,如果Z=0,则说明指令执行的结果非0;如果Z=1,则说明执行的结果为0。

上面的指令操作后Z=0,所以判断22H中的值非0。

2、位操作类指令,以BCF指令为例:

指令:BCF    f, b

说明:

  • 功能:f寄存器的位b清零;
  • BCF和f不在赘述,命令中的b表示f寄存器的位b,从零开始,取值范围为0~7;
  • 影响状态位:无(PIC的所有位操作指令都不影响状态位);
  • 指令周期:1;

示例:

假设执行指令前,FLAG_REG寄存器的值为0xFF(1111 1111b)

BCF    FLAG_REG, 3

注意:位是从0开始的,指令中的位3,实际对应的是寄存器的第四位

执行后:

FLAG_REG = 0xF7(1111 0111b)

指令应用:在程序中,我们经常会用到很多标志位,通过标志位来确定某项功能的当前状态,标志位的状态可通过位操作实现。

3、立即数与控制类操作指令,以MOLW指令为例:

指令:MOVLW    k

说明:

  • 功能:立即数k送入W寄存器;
  • K为立即数,取值范围为[0, 255];
  • 影响状态位:无;
  • 指令周期:1;

以下通过两个具体示例,说明对于立即数k的理解:

示例1:

假设执行指令前W寄存器值为00H

MOVLW    30H

执行后:

W = 30H

这种操作,明显直接。

示例2:

假设执行指令前寄存器UD_REG的地址为25H,寄存器的值为45H,W寄存器的值为00H

MOVLW    UD_REG

执行后:

W = 25H

先说一下寄存器、寄存器地址、寄存器值、寄存器名的关系:

寄存器:我们可以把它当做一个个的盒子;

寄存器地址:由于盒子(寄存器)太多,我们需要给每个盒子加一个编号,00,01,…,这样便于我们描述要找的是哪一个盒子,这个编号就是寄存器地址;

寄存器值:在这些盒子里面,我们可以放鞋子、袜子…,这些放在盒子里面的东西就是寄存器的值;

寄存器名:为了让人便于知道盒子里面装的是什么,我们可以给盒子起一个别名,比如01编号里面装的是运动鞋,那么可以把它叫做运动鞋盒,以后说运动鞋盒,就是指01编号盒子,上面的UD_REG就是这个道理;

在示例2中,执行指令后W寄存器的值是寄存器UD_REG的地址。所以在执行此类操作时,一定要小心谨慎,不能被寄存器的值忽悠了。

以上是对三类命令的大体分析,完整的指令列表详见单片机的数据手册或指令集说明手册。

PIC单片机基础2的更多相关文章

  1. PIC单片机基础1

    1.PIC单片机总线结构——哈佛结构:即指令和数据空间是完全分开的,所以与常见的微控制器不同的一点是,程序和数据总线可以采用不同的宽度.以PIC16F684单片机为例,数据总线是8位的,但指令总线位数 ...

  2. 【PIC单片机】Pic单片机基础知识

    本次学习采用PIC16F877A芯片及HJ-5G 开发板 一.IO口操作 1.1 设置I/O口方向:input or output TRISx 方向寄存器 (Transport and Receive ...

  3. PIC单片机状态寄存器中的C(进位/借位位标志)

    查阅PIC单片机芯片手册,关于进位/借位位的说明为: C:进位/借位位. 1 = 结果的最高位发生了进位 0 = 结果的最高位未发生进位 同时有一条标注:借位的极性是相反的. 通过以上说明,可以将C的 ...

  4. 【PIC单片机】MPLAB X IDE快速入门指南

    引言:近期由于项目实践需要,开始动手学习相关硬件知识.从PIC单片机入手. 单片机学习核心要点:查数据手册 配置寄存器 一.基于MPLAB X IDE配置位设置 MPLAB X IDE和MPLAB I ...

  5. PIC单片机之时钟设置

    PIC单片机之时钟设置 http://blog.csdn.net/superanters/article/details/8541650 内部时钟和外部时钟? PIC单片机有许多型号可以设置成 用外部 ...

  6. PIC单片机的定时器

    PIC单片机的定时器有3个 timer0 timer1 timer2 定时器的计算方法 256*k*Tcy=定时时间 (256-Init-value)*k*Tcy=定时时间

  7. PIC单片机的XC8

    用MPLAB IDE 对pic16f887进行编程的时候需要配置字 用__CONFIG(0xc3e4);__CONFIG(0xffff); 就可以 但是用MPLAB X IDE 对pic16f887编 ...

  8. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

    关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...

  9. MOS管使PIC单片机不能正常运行

    程序: #include "led.h" void InitLed(void) { TRISB &= ~0x70; ANSELB &= ~0x70; } void ...

随机推荐

  1. Python实现批量新建SecureCRT Session

    最近因为工作需要,我需要在ssh的时候保存几千台网关的session,工作量相当大(也就是ssh的时候需要记住用户名和密码,然后还要再session选项中录入enable密码,相当繁琐),而且设备的用 ...

  2. 安装VirtualBox中的增强功能包VBoxLinuxAdditions

    首先,增强功能包VBoxLinuxAdditions有什么作用呢?请看: (1)实现客户机和主机间的鼠标切换. (2)与主机实现文件共享. (3)自动调整客户机分辨率. (4)与主机共享剪贴板的内容. ...

  3. Spring Cloud实践:降级、限流、滚动、灰度、AB、金丝雀的实现思路

    端口:8888,方便起见直接读取配置文件,生产环境可以读取git.application-dev.properties为全局配置.先启动配置中心,所有服务的配置(包括注册中心的地址)均从配置中心读取. ...

  4. 你不知道的JavaScript--Item8 函数,方法,构造函数调用

    1.函数调用 Function绝对是JavaScript中的重中之重.在JavaScript中,Function承担了procedures, methods, constructors甚至是class ...

  5. 玩转spring mvc(六)---自定义异常跳转页面

    本文主要是关于如何在出现异常 如404时,跳转到自定义的异常页面,当然这不是spring的知识,但可以整合进去. 在web.xml中新增如下代码,里边的路径可以根据实际情况进行修改 <!-- 7 ...

  6. 玩转JPA(一)---异常:Repeated column in mapping for entity/should be mapped with insert="false" update="fal

    最近用JPA遇到这样一个问题:Repeated column in mapping for entity: com.ketayao.security.entity.main.User column: ...

  7. Linux 上一些常用命令

    切换权限: sudo chown -R 权限名: 文件 tar -zcvf 文件夹.tar 文件夹--exclude=要过滤的文件夹路径 重启crontab :service crond restar ...

  8. js算法初窥04(算法模式01-递归)

    终于来到了有点意思的地方--递归,在我最开始学习js的时候,基础课程的内容就包括递归,但是当时并不知道递归的真正意义和用处.我只是知道,哦...递归是自身调用自身,递归要记得有一个停止调用的条件.那时 ...

  9. B20J_4027_[HEOI2015]兔子与樱花_树形DP

    B20J_4027_[HEOI2015]兔子与樱花_树形DP 题意: 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编 ...

  10. CentOS 7下单机部署RabbltMQ环境的操作记录

    一. RabbitMQ简单介绍 在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息 ...