查阅PIC单片机芯片手册,关于进位/借位位的说明为:

  C:进位/借位位。

   1 = 结果的最高位发生了进位

   0 = 结果的最高位未发生进位

   同时有一条标注:借位的极性是相反的。

  通过以上说明,可以将C的分析分为两种情况:

  1、加法:

   最高位发生了进位:C = 1;

   最高位未发生进位:C = 0;

  2、减法:

   最高位发生了借位:C = 0;

   最高位未发生借位:C = 1;

  为了加深理解,在MPLAB中写入一段代码,通过观测STATUS寄存器的值来测试以上分析:

 ;测试SUBWF、ADDWF指令与状态寄存器C标志位的关系

 LIST        P=16F684
include "P16F684.INC" Sub_Register_Small EQU 20H
Sub_Register_Large EQU 21H
Add_Register EQU 22H
Small_Status EQU 23H
Large_Status EQU 24H
Add_Status EQU 25H ;被减数 < 减数
MOVLW 54H
MOVWF Sub_Register_Small
MOVLW 66H
SUBWF Sub_Register_Small, F SWAPF STATUS, W ;保存状态寄存器值
MOVWF Small_Status
SWAPF Small_Status, F ;被减数 > 减数
MOVLW 77H
MOVWF Sub_Register_Large
MOVLW 66H
SUBWF Sub_Register_Large, F SWAPF STATUS, W ;保存状态寄存器值
MOVWF Large_Status
SWAPF Large_Status, F ;加法进位
MOVLW 77H
MOVWF Add_Register
MOVLW 0BBH
ADDWF Add_Register, F SWAPF STATUS, W ;保存状态寄存器值
MOVWF Add_Status
SWAPF Add_Status, F END

  启用仿真后,查看内存23H、24H、25H(保存的是以上三种操作后的STATUS)的值,结果如下:

  Small_Status  : 00011000B,对应C=0(最高位发生了借位)

  Large_Status : 00011011B,对应C=1(最高位未发生借位)

  Add_Status    : 00011011B,对应C=1(最高位发生了进位)

  为了简单便于记忆,可以把C的进/借位规则记为:加柴(1)做煎(减)蛋(0)!

PIC单片机状态寄存器中的C(进位/借位位标志)的更多相关文章

  1. PIC单片机基础2

    PIC中档系列单片机,每条指令14位,共有35条汇编指令,根据操作对象不同,可将其分为三类: 字节操作类指令 位操作类指令 立即数与控制类操作指令 1.字节操作类指令,以MOVF指令为例: 指令:MO ...

  2. 令状态寄存器访问指令(MRS,MSR)

    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative) ...

  3. Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器

    因为在标准C语音中是不能获取SP指针的.因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器 ...

  4. 串口应用:遵循uart协议发送N位数据(状态优化为3个,适用任意长度的输入数据,取寄存器中的一段(用变量作为边界))

    上一节中成功实现了发送多个字节的数据.把需要发送的数据分成多段遵循uart协议的数据依次发送.上一节是使用状态机实现的,每发一次设定为一个状态,所以需要发送的数据越多,状态的个数越多,代码越长,因而冗 ...

  5. PIC单片机基础1

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

  6. 51单片机SRF寄存器

    1.21个寄存器介绍        51系列单片机内部主要有四大功能模块,分别是I/O口模块.中断模块.定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图: 图1 51单片机结构和功能图 ...

  7. [51单片机] Keil C51中变量的使用方法详解

    引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量 ...

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

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

  9. 系统架构师考试——程序计数器 PC, 指令寄存器IR、状态寄存器SR、通用寄存器GR

    ● 计算机执行程序时,在一个指令周期的过程中,为了能够从内存中读指令操作码,首先是将__(9)___的内容送到地址总线上. (9)A.程序计数器PC    B.指令寄存器IR C.状态寄存器SR    ...

随机推荐

  1. Fiddler简介

    官网:http://www.telerik.com/fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的HTTP通讯,设置断点,查看所有的" ...

  2. 《Java从入门到放弃》入门篇:hibernate查询——HQL

    不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...

  3. fs模块(一)

    模块的使用,必须先引入模块 var fs = require('fs'); 1. readFile 和 readFileSync var fs = require('fs'); //01 readFi ...

  4. JAVAWEB项目如何实现验证码 (转)

    JAVAWEB项目如何实现验证码 2012-12-21 21:19 56026人阅读 评论(36) 收藏 举报 .embody { padding: 10px 10px 10px; margin: 0 ...

  5. servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

    html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&g ...

  6. 安装Hadoop 2.7.3的过程中遇到的一些问题及解决方法。

    1. 启动hadoop 时发现namenode 没有启动起来 出现以下错误: Incorrect configuration: namenode address dfs.namenode.servic ...

  7. ThreadLocal类分析

    首先试想一个场景: 多个线程都要访问数据库,先要获得一个Connection,然后执行一些操作.为了线程安全,如果用synchronized锁定一个Connection对象,那么任何时候,都只有一个线 ...

  8. zabbix上监控docker

    说明 第一种方案,借助docker的python版的api,然后通过自己封装自定义脚本来做,稍微麻烦点,但是可以达到个人自定义的效果. 第二种借助国外的一位大神已经封装好的模板来做,简单省事情,不过功 ...

  9. Porita详解----Items

    Items(项目) 一个item是指从目标网站上爬取的一条单独的数据.例如从京东网站上爬取的一款小米6手机的信息.大家应该对 item (项目)和 item definition(项目定义)做一个区分 ...

  10. java常量池中基本数据类型包装类的小陷阱

    想必大部分学过java的人都应该做过这种题目: public class Test { public static void main(String[] args) { //第一个字符串 String ...