关于PIC单片机“读-修改-写”的相关说明

发布者:BlossomSunrise最新更新时间:2016-08-26 来源: eefocus关键字:PIC单片机  修改 手机看文章 扫描二维码
随时随地手机看文章

关于PIC单片机“读-修改-写”的相关说明

Topic: I have seen references to "Read-Modify-Write" instructions in your datasheet, but I do not know what that is. Can you explain what it is and why I need to know this?

我曾在数据手册里看到“读-修改-写”的相关说明,但我不知道这是什么。你能解释一下它的含义以及为什么要注意它吗? 

Discussion:

An easy example of a Read-Modify-Write (or RMW) instruction is the bit clear instruction BCF. 一个关于“读-修改-写”的简单例子就是位清零指令BCF。You might think that the processor just clears the bit, which on a port output pin would clear the pin.你可能认为处理器只是清这个位,对于输出端口就是清零这个管脚。 What actually happens is the whole port (or register) is first read, THEN the bit is cleared, then the new modified value is written back to the port (or register). 而实际发生的是整个端口(或寄存器)先被读入,之后相应位被清,然后修改后的新值被写回到这个端口(或寄存器)。Actually, any instruction that depends on a value currently in the register is going to be a Read-Modify-Write instruction. 实际上,任何基于当前寄存器内值的操作指令都是一个“读-修改-写”指令。This includes ADDWF, SUBWF, BCF, BSF, INCF, XORWF, etc... Instructions that do not depend on the current register value, like MOVWF, CLRF, and so on are not RMW instructions.这包括ADDWF,SUBWF,BCF,BSF,INCF,XORWF等等。不基于当前寄存器内值的指令,如MOVWF,CLRF等不是“读-修改-写”指令。

One situation where you would want to consider the affects of a RMW instruction is a port that is continuously changed from input to output and back.如果你不断地改变一个端口的输入输出模式,在这个情形下你应该注意“读-修改-写”指令的影响。 For example, say you have TRISB set to all outputs, and write all ones to the PORTB register, all of the PORTB pins will go high. 例如,如果说你把TRISB设为都作输出,并且将PORTB寄存器都写“1”,所有PORTB的引脚都将变高。Now, say you turn pin RB3 into an input, which happens to go low. 现在,如果说你把RB3变为输入,恰好这时的输入为低。A BCF PORTB,6 is then executed to drive pin RB6 low. 然后你执行一个BCF PORTB,6 的指令把RB6输出低。If you then turn RB3 back into an output, it will also now drive low, even though the last value you put there was a one.这时如果你再把RB3设回输出状态,它将也输出低,尽管你上次你在PORTB里这个位设置的值是“1”。

 What happened was tha the BCF of the other pin (RB6) cause the whole port to be read, including the zero on RB3 when it was an input. 之所以这样,是因为对其他引脚(RB6)做BCF时,整个端口都被读进来了,包括当RB3引脚处于输入态时的低电平。The bit 6 was changed as requested, but since RB3 was read as a zero, zero will also be placed back into that port latch, overwriting the one that was there before. 位6按要求改变了,但是由于RB3读入为“0”,于是在RB3位的“0”也被放回了端口锁存器,修改了原来在这个位置的“1”。When the pin is turned back into an output, the new value was reflected. 当这个引脚重新变为输出态时,这个新值反应出来,输出“0”而不是“1”了。

 

Topic: When I perform a BCF, other pins get cleared in the port. Why?

当我执行一个BCF命令时,端口的其他管脚也被清零,为什么?

Discussion:

If this is on a PIC16C7X device, you have not configured the I/O pins properly in the ADCON1 register.如果这发生在PIC16C7X的器件上,可能是因为你没有正确设置ADCON1中的IO管脚属性。 If a pin is configured for analog input, any read of that pin will read a zero, regardless of the voltage on the pin. 如果一个管脚被配置为模拟输入,对这个管脚读将始终为“0”,不管在这个引脚上是否有电压。This is an exception to the normal rule that the pin state is always read. 通常情况下这些管脚始终都是作输入的,不会有这种现象。You can still configure an anolog pin as an output in the TRIS register, and drive the pin high or low by writing to it, but you will always read a zero. 你也可以通过配置TRIS寄存器来改变这些模拟输入管脚作为输出,并且通过写寄存器驱动这些引脚为高或低,但是你将一直读到“0”。Therefore if you execute a Read-Modify-Write instruction (see previous question) all analog pins are read as zero, and those not directly modified by the instruction will be written back to the port latch as zero. 所以当你执行一个“读-修改-写”指令(见前一个问题),所有的模拟管脚读为“0”,并且在没有被指令直接修改的情况下,将端口锁存器的值改为“0”。A pin configured as analog is expected to have values that may be neither high nor low to a digital pin, or floating. Floating inputs on digital pins are a no-no, and can lead to high current draw in the input buffer, so the input buffer is disabled. 一个被配置为模拟口的管脚将被认为有一个可能既非高也非低的值,或者是浮空的,相对于数字口而言。在数字口上的输入也是一种非高非低的状态,并且能够导致输入缓冲器的大电流泄漏,所以输入缓冲器被禁止。

 

Another case where a RMW instruction may seem to change other pin values unexpectedly can be illustrated as follows: 另一种情况下,“读-修改-写”指令好像是违背期望地修改了其他引脚的值,一般能被描述如下:Suppose you make PORTC all outputs and drive the pins low. 假设你把PORTC全作为输出并驱动所有管脚为低。On each of the port pins is an LED connect to ground, such that a high output lights it. Across each LED is a 100uF capacitor. 在这个端口的每个管脚上有一个LED连到地,这样输出高时将点亮LED。并在每一个LED上有一个100uF的电容。Let's also suppose that the processor is running very fast, say 20MHz. 让我们也假设处理器运行得非常快,比如说20MHz。Now if you go down the port setting each pin in order; BSF PORTC,0 then BSF PORTC,1 then BSF PORTC,2 and so on, you may see that only the last pin was set, and only the last LED actually turns on. 现在如果你清端口后依次去置位引脚,如BSF PORTC,0 然后BCF PORTC,1 接着BCF PORTC,2 这样下去,你将看到只有最后的一个管脚被真正置位了,只有一个LED点亮。This is because the capacitors take a while to charge. As each pin was set, the pin before it was not charged yet and so was read as a zero. 这是因为电容需要时间来充电。当一个管脚被置位时,它前面被置位的那个管脚还没有充电完全,所以读到的还是“0”。This zero is written back out to the port latch (RMW, remember) which clears the bit you just tried to set the instruction before. 这个“0”将被写回端口锁存器(读-修改-写),清掉前面你刚用指令来置“1”的那个位。This is usually only a concern at high speeds and for successive port operations, but it can happen so take it into consideration. 这种情况通常只发生在高速并且连续的端口操作中,但这的确会发生,所以要在设计中考虑。

另,明显错误的设计,导致的“读-修改-写”问题,不再赘述。

关键字:PIC单片机  修改 引用地址:关于PIC单片机“读-修改-写”的相关说明

上一篇:有关PIC单片机在线编程器、在线仿真器的问题
下一篇:PIC16F877A.H头文件详细注释

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

为追赶台积电跳过4nm工艺,传三星电子修改芯片工艺路线图
据DigiTimes报道,与其竞争对手台积电在工艺路线上的计划不同,三星电子将跳过4nm工艺,直接由5nm跃升至3nm。台积电计划其4纳米N4工艺有望在2023年完成。据报道,台积电还为其3nm芯片生产设施获得了200亿美元的投资,并计划2021年风险试产,2022年上半年大规模量产。 曾为苹果代工A系列芯片的三星电子,近几年在芯片工艺方面虽然不及台积电,获得的芯片代工订单也不及台积电,但仍是唯一能在工艺上跟上台积电节奏的厂商。台积电在芯片工艺方面近几年一直走在行业前列,7nm和5nm工艺都是率先投产,良品率也相当可观。 目前台积电和三星电子的芯片工艺都已经到了5nm,其中台积电的5nm工艺是已大规模量产;此前传三星电子投资了81
[手机便携]
06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART
移植u-boot-2012.04之建新单板_时钟_SDRAM_UART (1)新建单板目录,以及配置头文件 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2012.04.01 cd board/samsung/ cp smdk2410 smdk2440 –rf cd ../.. cd /include/configs/ cp smdk2410.h smdk2440.h (2) 修改 boards.cfg: 仿照 smdk2410 arm arm920t - samsung s3c24x0 添加: smdk244
[单片机]
06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+<font color='red'>修改</font>时钟+SDRAM+UART
一步步STM32 OS【一】 序言
  一直想写个类似uCOS的OS,近段时间考研复习之余忙里偷闲,总算有点成果了。言归正传,我觉得OS最难的部分首先便是上下文切换的问题,他和MCU的架构有关,所以对于不同的MCU,这部分需要移植。一旦这个问题解决了,整个OS算是成功了一半了,当然,是对于简单的OS。   好了,要写一个OS,首先需要一个开发板和仿真器。我的开发板是STM32F4DISCOVERY,自带ST-LINK V2仿真器,板载MCU为STM32F407VGT6,支持FPU,32位ARM Cortex-M4F核,1024KB FLASH,192 KB RAM,总之很强大。对STM32其他系列,本OS几乎不需修改修改就可使用。开发环境为IAR for ARM 6
[单片机]
手把手教你程序
手把手教你写程序: 内容:从最简单的程序入手,手把手教你写程序,让同学们拿到一个复杂的程序或者任务,能快速找到切入点,写出程序,再在此基础上优化程序。当拿到一个单片机任务时,不要急于动手写程序,先仔细分析它的以下几个点: 1、它要单片机整体实现什么功能 2、功能细分(模块化),先干什么,再干什么,最后干什么 3、画初步流程图,(把几个模块画出即可) 4、模块之间的分析:一个模块到另一个模块之间,怎么变换,怎么连接(优化流程图) 5、单个模块分析:每个模块要做什么(流程图细化) 6、所有模块结合连接,细化所有流程图 7、分析单个模块每步要用到的方法或者指令 8、总流程图定型 9、纸上写程序,对照流程图分析其可行性
[单片机]
霍尼韦尔推出全新工业级DPM码器 HF800
《财富》全球500强之一 的多元化、高科技先进互联工业企业 霍尼韦尔 (纽交所代码: HON)近日推出首款工业级DPM读码器 HF800。凭借优秀的DPM解码能力、更广的工作范围及支持高速运动解码的强大功能,HF800可有效降低数据录入错误、节省管理时间和成本,助力电子行业自动化生产流水线、物流自动化分拣线、食品加工行业流水线和汽车制造流水线等多种工业场景产品管理过程更高效。 随着工业信息化的发展,条码信息化技术在工业领域内的应用日益广泛。许多行业对于产品质量回溯和跟踪管理环节的要求越来越高,直接零部件标识(DPM)在工业领域的使用愈加普遍。目前,DPM已被广泛运用于制造业、食品药品监管、航空航天等各行业的生产环节中,并通过激
[测试测量]
霍尼韦尔推出全新工业级DPM<font color='red'>读</font>码器 HF800
PIC单片机和AVR单片机与51单片机的优缺点分析
1、51系列单片机的优缺点分析 51系列是应用最广泛的单片机,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。 51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算
[单片机]
<font color='red'>PIC单片机</font>和AVR单片机与51单片机的优缺点分析
MPLAB X汇编代码包含自己的头文件然后编译错误的问题
例:我的工程里有一个用汇编写的算法,当我调用它的时候,我发现这个算法里包含了一些.h文件,这些.h文件一直无法编译通过。 解决方法: 当前工程- 右键- 属性 xc16-as - ASM include dirs 选择你的头文件路径 - OK - 应用 Done
[单片机]
MPLAB X汇编代码包含自己<font color='red'>写</font>的头文件然后编译错误的问题
PIC单片机与51系列单片机的区别
PIC单片机的型号繁多,对初学者来说实在不好应付,容易混淆,以下作一简单分类,希望有助于初学者学习: 初档8位单片机:PIC12C5XXX/16C5X系列 PIC16C5X系列是最早在市场上得到发展的系列,因其价格较低,且有较完善的开发手段,因此在国内应用最为广泛;而PIC12C5XX是世界第一个八脚低价位单片机可用于简单的智能控制等一些对单片机体积要求较高的地方,前景十分广阔。 中档8位单片机:PIC12C6XX/PIC16CXXX系列 PIC中档产品是Microchip近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到200ns,带A/D,内部E2PROM数据存储器,双时钟
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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