查阅PIC单片机芯片手册,关于进位/借位位的说明为: C:进位/借位位. 1 = 结果的最高位发生了进位 0 = 结果的最高位未发生进位 同时有一条标注:借位的极性是相反的. 通过以上说明,可以将C的分析分为两种情况: 1.加法: 最高位发生了进位:C = 1: 最高位未发生进位:C = 0: 2.减法: 最高位发生了借位:C = 0: 最高位未发生借位:C = 1: 为了加深理解,在MPLAB中写入一段代码,通过观测STATUS寄存器的值来测试以上分析: ;测试SUBWF.ADDWF指令与状态…
PIC中档系列单片机,每条指令14位,共有35条汇编指令,根据操作对象不同,可将其分为三类: 字节操作类指令 位操作类指令 立即数与控制类操作指令 1.字节操作类指令,以MOVF指令为例: 指令:MOVF     f, d 说明: 功能:寄存器f值传送: MOVF为助记符,即操作指令,大小写均可: f代表文件寄存器标识符,即RAM寄存器(PIC单片机基础1中有说明),取值范围为[0, 127] d代表目标标识符,表明指令操作的结果放在何处: d=0:操作的结果放在W寄存器中: d=1:操作的结果…
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位.ARM指令可以根据CPSR中的这些条件标志位来选择性的执行. 2,Q标志位 ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位.主要用于指示增强的DSP指令是否发生了溢出. 3,控制位 I, F, T以及…
因为在标准C语音中是不能获取SP指针的.因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器值输出,同时也可以输出一些想要的各种状态寄存器值.如下: Keil环境汇编封皮: HardFault_Handler\ PROC EXPORT HardFault_Handler [WEAK] IMPORT hard_fault_handler_c TST LR, # ITE EQ MRSEQ R0…
上一节中成功实现了发送多个字节的数据.把需要发送的数据分成多段遵循uart协议的数据依次发送.上一节是使用状态机实现的,每发一次设定为一个状态,所以需要发送的数据越多,状态的个数越多,代码越长,因而冗长且适应范围不广 . 在这里,我通过优化代码,实现了把发送状态固定为3个,并且能适用任意长度的输入数据的功能.只需要修改一个参数即可实现. 学习: 1.error:cannot index into non-array type wire for 'dataN' 出现这个错误是因为dataN没有定义…
1.PIC单片机总线结构——哈佛结构:即指令和数据空间是完全分开的,所以与常见的微控制器不同的一点是,程序和数据总线可以采用不同的宽度.以PIC16F684单片机为例,数据总线是8位的,但指令总线位数是14位. 2.在PIC单片机中,我们将RAM存储器称作文件寄存器(F寄存器). 3.PIC中程序寄存器和数据存储器分开,两者总线不同: 以PIC16F684单片机为例: 1)程序存储器构成:具有一个13位程序计数器,物理上具有2Kx14(0000H-07FFH)存储空间.复位后初始地址为0000H…
1.21个寄存器介绍        51系列单片机内部主要有四大功能模块,分别是I/O口模块.中断模块.定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图: 图1 51单片机结构和功能图 51单片机掌握的好坏,其实就是能否正确操作这四个功能模块,而其操作的实质则又是能否对每个模块所对应寄存器的正确操纵.所以下面重点介绍一下51系列单片机内部的特殊功能寄存器(简称SFR,以下说明以此代替).(关于什么叫特殊功能寄存器,这里先不作介绍,不懂的请查阅51单片机相关资料.) 51单片机内部共…
引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同.正确地使用变量,有利于获得高效的目标代码.下面详细介绍Keil C51中变量的使用方法. 1 CPU存储结构与变量的关系    变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同.    标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CP…
引言:近期由于项目实践需要,开始动手学习相关硬件知识.从PIC单片机入手. 单片机学习核心要点:查数据手册 配置寄存器 一.基于MPLAB X IDE配置位设置 MPLAB X IDE和MPLAB IDE 8不同. MPLAB IDE 8 可以再界限中选择配置位就行.配置选项可以不写在代码中. MPLAB X IDE 如果要配置的话必须在代码中写出配置. 配置字中最重要的配置选项就是: 看门狗配置 如:WDTE<1;0>: 一般选择关闭看门狗. MCLRE复位脚的配置 如:MCLRE:一般选择…
● 计算机执行程序时,在一个指令周期的过程中,为了能够从内存中读指令操作码,首先是将__(9)___的内容送到地址总线上. (9)A.程序计数器PC    B.指令寄存器IR C.状态寄存器SR    D.通用寄存器GR [歪理邪说] 关键词,“计算机执行程序时”,“首先是将”. 参考答案:A [知识点] l 程序计数器是什么? 程序计数器是用于存放下一条指令所在单元的地址的地方. 单片机及汇编语言中常称作PC(program counter). l  PC是什么单词的缩写 Program  C…
PIC单片机之时钟设置 http://blog.csdn.net/superanters/article/details/8541650 内部时钟和外部时钟? PIC单片机有许多型号可以设置成 用外部时钟(如外部接个4MHZ的石英晶振),也可以设置成用内部RC时钟.而且还有许多型号可以选择多种频率的时钟. 如 PICLF1823 内部时钟最高可以到达32MHZ 最低可以达到 31kHz. 这事实上提供了一条降低功耗的新路子.一般的单片机降低功耗常常用的睡眠,而睡眠期间CPU是什么都不做.如果希望…
ARM程序状态寄存器Program State Register 在ARM模式中, 有16个数据寄存器和1或2个状态寄存器是可以随时访问的.在特权模式 (privileged mode) 下, 对应的特殊组寄存器才可以使用. CPSR 当前程序状态寄存器 (Current Program State Register) SPSR 保存的程序状态寄存器 (Saved Program State Register), 有6个,主要是在处理异常的时候使用. 每一种处理器模式下都有一个专用的物理寄存器作…
1- jmp为无条件转移指令,可以只修改IP, 也可以同时修改CS和IP jmp指令要给出两种信息: (1) 转移的目的地址 (2) 转移的距离(段间转移, 段内转移, 段内近转移) 2- 依据位移进行转移的jmp指令 jmp short 标号(转到表号处执行指令) ;段内短转移 -128-127 assume cs:codesg codesg segment jmp short s s:inc ax codesg ends end start 执行后 ax 0001H 2- 根据位移进行转移的…
由于写EFLAGE博文中,有关C位,P位,O位,我觉得我没有描述清楚,而且C位也没有演示过借位情况,P位中也有些坑没讲,我还是决定再补一篇,争取把每个标志位描述清楚,不光是让看我文章的人能看的明白,也是自己对知识的巩固加深,虽然没什么技术性的东西,但我一直觉得,再牛的花招它都是由基础构建而出的,相信经过1年,2年,甚至5,6年的积累,也能极大丰富我的知识视野,尽管不一定会记得,但是好记性不如烂笔头,当我遗忘再次不会时,翻开博文一查,肯定会有一种豁然开朗的感觉,那时,我肯定会感激现在的我.千里之行…
测试中发现使用小鹤双拼,如果不是使用shift切换中英文,效果不理想,留下此文章做个标记 https://www.autoahk.com/archives/8755 输入法状态提示,中文状态提示"中",英文状态提示"EN", 切换中英文状态的时候,或者用鼠标切换到另一个编辑窗口的时候再次提示,循环如此. ;功能:输入法状态提示 ;环境:win10+搜狗输入法,输入法状态切换用默认的shift键. ;作者:sunwind ;时间:2018年9月1日 ;更新链接:htt…
PIC单片机的定时器有3个 timer0 timer1 timer2 定时器的计算方法 256*k*Tcy=定时时间 (256-Init-value)*k*Tcy=定时时间…
Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世纪德国数理哲学大师莱布尼兹发现.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.计算机中的二进制则是一个非常微小的开关,用"开"来表示1,"关"来表示0. 那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神…
状态字 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0               BR CC1 CC0 OV OS OR STA RLO /FC 问题1 关于首次检测位"/FC"我的理解 首先 必须一个前提:状态字是用于存储指令执行后的状态或者结果. S7-200等PLC用LD和LDI表示电路块开始的常开触点和常闭触点,S7-300没有这样的指令,所以得想办法. 于是它引入了状态字"/FC" 解决这一问题. 我的理解是 当一个指令执行完…
译言网 | 使用Python在2M内存中排序一百万个32位整数 使用Python在2M内存中排序一百万个32位整数 译者:小鼠 发表时间:2008-11-13浏览量:6757评论数:2挑错数:0 作者演示了如何在2M内存的环境下,完成对一百万个32位整数排序. 有人开玩笑地问我 如何使用python在2M内存中排序一百万个32位整数.为了应付这个挑战,我学习了一下缓冲I/O.很 明显,这是一个开玩笑的问题.假设是二进制编码,单单是数据就已经占了4M!唯一的解释就是: 给定一个包含一百万个32位整…
今天想在Windows 10系统安装完Virtualbox虚拟机,然后打算装一个CENTOS系统,但是选择安装系统的时候竟然没有64位操作系统的选项,经过一阵Google,终于解决了,在这里盘点一下出现这种情况的几种原因:解决Windows10中Virtualbox安装虚拟机没有64位选项(N种情形盘点) . 这里我的是原因二.…
一.下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的. 我选择Visual Studio 2010和VC6++作为学习OpenGL的环境. 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows环境下的GLUT下载地址:…
Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc(m,n) 直接丢弃,不四舍五入…
请编写一个c函数,该函数给出一个字节中被置为1的位的个数 #include <stdio.h> void fun(char ch) { int i; int temp; int count=0; for(i=0;i<8;i++) { temp=(ch>>i) & 1; if(temp == 1) { count++; } } printf("Ch include 1!\n"); printf("%d\n",count); } i…
本次学习采用PIC16F877A芯片及HJ-5G 开发板 一.IO口操作 1.1 设置I/O口方向:input or output TRISx 方向寄存器 (Transport and Receive Index Storage) 1.2 设置I/O口的数值 PORTx 数值寄存器 端口 P.S.复位后初始状态:输入 数值为1 (记忆方法 input 1:output 0) //流水灯 void main(void) { uint8 i = 0; TRISD = 0X00; // while(1…
单片机如8051有21个SFR,地址为80H~0FFH的128个字节中,可以直接用寻址方式来操作SFR.(类似于sbit) 为了能直接访问这些SFR,keil提供饿了一种自汉族形式的定义方法.这种方法只适用于8051系列单片机进行C编程. 方法:引入关键字“sfr”,语法为:sfr sfr_name=int address 如:sfr SCON=0x98: sfr TMOD=0x89: 具体值应该参照SFR表. 关于sbit的使用有三种方式: 1.sfr PSW=0xD0://   sbit O…
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系…
用MPLAB IDE 对pic16f887进行编程的时候需要配置字 用__CONFIG(0xc3e4);__CONFIG(0xffff); 就可以 但是用MPLAB X IDE 对pic16f887编程的时候老出错 查XC8的使用手册 发现新版的配置字定义已经改了 变成:#pragma config FOSC = INTRC_CLKOUT 可以在软件中>窗口>PIC存储器view>Configuration Bits 然后对pic16f887单片机进行配置…
1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_标号|GPIO_Pin_标号; //管脚位置定义,标号可以是NONE.ALL.0至15. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速度为50MHz GPIO_Init…
我以为这是个很简单的问题,没想到还有一些初学者不会.可能他们也是跟我一样是直接学的如何操作单片机并没有学微机原理么. ARM和RISC-V的机器的系统架构都是哈佛结构的,意思是程序存储器.数据存储器和其他的乱七八糟的外设寄存器啥啥的都是存在同一个地址空间的,他们可以说使用同一个访问的指令去读去写.5…
/* 本例程是C语言的位域操作示例 这里为什么位域结构体与联合体一起使用? -->因为这样定义后,即可以单独使用标志位 也可同时使用整个字节数据 主要应用:单片机C语言 好处:用标志位可以节省RAM空间 操作灵活 执行速度快 */ //====标志位应用 定义联合体实体==== typedef union uFLG{ uint8 Flg ; //定义整形数据 struct FLAG{ //位域定义 uint8 Flg1 : 1; uint8 Flg2 : 1; uint8 Flg3 : 1; u…