何谓读-修改-写,导致的问题及其解决之道:
只要PICmicro的命令,所处理的FILE (暂存器,内存,和I/O的统称),其最终的值,和命令处理前的值有关,那么,这种命令便是所谓的读-修改-写命令。因为这类命令的操作,可以再细分为三个小步骤,即是读(READ),修改(MODIFY),接著才是写(WRITE)。
如:ADDWF,DECF,IORWF,XORWF,BSF,BCF,‥‥等等皆是。
在使用这类命令的时候,如果所处理的FILE是I/O, 就必须要特别小心。因为,假设任务电压为5V;而您在PORTB的8支脚,没有串接电阻,分别接了8颗二极管(也许是LED)到地。如果,您在先前下了"BSF PORTB,0"这条命令,使得PORTB第0脚上的LED亮了。当您再运行了”BSF PORTB,1"这条命令后,虽然PORTB第1脚上的LED亮了,但是,PORTB第0脚上的LED却会熄掉。原因是因为,运行”BSF PORTB,1”时,会先将整个PORTB的值往回读,而它读到的PORTB第0脚,却是相当於低电位(被二极管拉为0.7V)。当它再把整个PORTB的值写出去的时候,PORTB第0脚就被写成低电位,自然灯就熄了。
解决之道是:串电阻,或者不要直接对I/O作读-修改-写命令。
另外还有一类要注意的状况是:如当您将”BSF PORTB,0”和”BSF PORTB,1”两条命令连在一起,没有空运行时,纵使您没有上一段所述线路设计不良之状况,有时候您也会发现PORTB, 0的高电位也会不见了。导致这个现象的原因是:因为也许您这两支脚的外面接了长导线,有相当大的电容、电感性会阻止电位的变化;而且,PIC命令运行是在最后1/4周期时”写出”,而在第一个1/4周期时”读入”,PORTB,0还来不及升至高电位,便被下一个命令读回去了。
解决之道是:通常在两道命令间插入个NOP命令就可以了。
关键字:PIC单片机 PICmicro FILE
引用地址:
PIC单片机的读/修改/写问题及解决方案
推荐阅读最新更新时间:2024-03-16 13:01
PIC单片机的命名规则详细介绍
pic单片机是常用器件之一,每位学习pic单片机的朋友在学习过程中总会遇见各种难题,如pic单片机选型问题。对于pic单片机选型,小编曾带来过简单介绍。而在本文中,将对pic单片机选型进行详细阐述,以帮助大家扫清选型难点。 pic单片机相当于一个小的计算机,pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,pic 共享的部分相当于人的神经系统。pic单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于pic的类型。但是它们的最高操作频率大
[单片机]
用PIC16F877单片机实现的IC卡读写器
引言 本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。 图1是本设计的电路图,图中电源变换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通信数据线的保护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,从而保证数据线上的电压在0V~+5V之间,
[单片机]
少走弯路,PIC单片机中断总结
PIC单片机有多个中断源,16系列只有一个中断入口,18系列有两个中断入口,不同编译器下书写格式又不大一样。网上资源千篇一律,也不够系统,只是简单的罗列程序,代码生存的环境不一样也少有说明。在此做个简单的总结,因为又走了弯路... 1.先说18系列(MCC18编译器下): MPLAB C18不自动把中断服务程序放在中端向量处。通常将GOTO指令放在中断向量处,从而把控制权转交给相应中断服务程序。 void low_isr(void); void high_isr(void); *****************************低级中断入口及服务子程序***************************
[单片机]
PIC单片机的大数组RAM分配错误解决
在编译程序时出现 Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x00000606 Errors : 1 询问高人得知该错误为RAM分配超过256B。 解决方法为: 1、打开18f452.lkr 即所选MCU的lkr文件 lkr文件所在位置为:C:\Program Files\Microchip\mplabc18\v3.40\bin\LKR,用记事本打开。 其关于RAM分配的为 ACCESSBANK NAME=accessram
[单片机]
PIC单片机-测试例程汇总
目录: 一、端口的定义与while(1)的使用 二、延时 1、通过语句延时程序(带参数) 2、通过语句延时程序(不带参数) 3、C程序延时时间计算 4、keil时间调试 三、外设 1、单按键检测与蜂鸣器发声(可控制发几声) 2、I2C端口模拟 3、DS18B20数字温度传感器(数码管显示) ----------------------------------------- PIC单片机C语言之PIC16F887(4MhZ晶振) --------------------------------------------------------------------------------------------------
[单片机]
PIC单片机之IO口映射问题
我们可以在手册上看到管脚分布表: 和管脚映射有关的是:RP0~RP31(双向映射,既能够做输出映射也能够作为输入映射),共32个管脚 RPI32~RPI43(只能够作为输入映射,不能够作为输出映射),共12个管脚 拥有映射功能的一共是44个管脚 对于输入方向的映射方法是这样的: RPINR0~RPINR27这些寄存器中的 和 都对应着某个功能要映射到的RPINR 管脚,比如RPINR0 就对应着INT1(外部中断1)要映射到的管脚数,如果RPINR0 =0,那么RP0就映射给了中断1,也就是说功能是定死的,但是这个功能要映射到哪个管脚是可以配置的 输出映射的方法和输入映射的方法恰恰相反,对于输出来说,管脚是定
[单片机]
PIC单片机中晶体选择的注意
对于一个高可靠性的系统设计,晶体的选择非常重要。在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。尤其在设计带有睡眠唤醒(往往用低电压以求低功耗)的系统中,若还是随手拿一颗晶体就用,你的系统可能会出问题。 这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。在睡眠唤醒时,电路的扰动要比上电时小得多得多,起振变得很不容易。 有人评价:PIC单片机对晶体的要求怎么这么高,用51好象从来就没有这么麻烦,手里抓到什么就用什么,也不见有问题呀?且慢,这样比较前提并不一样,同样在睡眠时,有谁
[单片机]
PIC单片机与触摸屏串行通信的MODBUS协议实现
摘要:介绍一种在PIC单片机与触摸屏之间采用Modbus协议实现异步串行通信的方法。简单介绍了Modbus通信协议,给出了硬件电路连接图、程序流程图以及用PIC单片机C语言编写的部分通信程序。实际使用证明该方法数据传输稳定可靠,并提供了良好的人机交互环境。
关键词:触摸屏 PIC单片机 Modbus协议 通信
工控中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国M
[单片机]