关于pic16f87x的奇怪问题,超级迷茫。。。

[复制链接]
3419|13
 楼主| QQ51886469 发表于 2008-9-6 12:27 | 显示全部楼层 |阅读模式
程序很简单
RB3 = 1;
RA4 = 1;   //开灯
RA3 = 1;
RA2 = 1;
RA1 = 1;
RA4 = 1;
RA3 = 1;

奇怪现象出现了:
其他管脚置一
RA4就被清零,
但是其他管脚之间却不影响
RA4还能再打开,但是其他管脚置一,还是再次被清零

RA4上拉,管脚输入输出设置,io设置都没有问题。。。。。
用的是picmate2004仿真,仿真环境是mplab8.02

很迷茫。。。。。。。。。。。。。。。
bcaiyo 发表于 2008-9-6 12:36 | 显示全部楼层

出在读-修改-写的问题上了.

出在读-修改-写的问题上了.
RA4输出是集电极开路的.最好不要输出高电平.要不读A端口时读入的总是低.不过外电路设计好也可以做到没有问题.
 楼主| QQ51886469 发表于 2008-9-6 14:02 | 显示全部楼层

re

但是还是不知道为什么其他口会影响RA4的输出呢?
JerryGE 发表于 2008-9-6 16:34 | 显示全部楼层

同情啊

和我合作的兄弟也遇到类似的问题,结果没办法只有换一个管脚,以后尽量少用这种准双向口,希望有高手作答
lyjian 发表于 2008-9-7 00:08 | 显示全部楼层

可能是2楼说的原因

改用逻辑指令来置位或清零试试。
如果RA4输出的高电平外面拉低了,你用位操作指令操作其IO时就会把0写入RA4(PIC的读-修改-写指令的弊端,51就没有这样的问题)。
关于这点,PIC的规格书上有很清楚的描述。
lyjian 发表于 2008-9-7 12:04 | 显示全部楼层

逻辑指令也不行

重新看了一下PIC的指令,逻辑指令也是读-修改-写指令,还是会有同样的问题。

NE5532 发表于 2008-9-7 12:16 | 显示全部楼层

你把图发上来看看。

不是所有RA4都是开漏的,而且说开漏就不能拿来用,纯属没有任何道理的。给你的所有引脚都可以用,只看你会不会用。
qq51886469 发表于 2008-9-8 10:00 | 显示全部楼层

re

图不会发,描述一下哈:
其实很简单,
RA4接10k上拉,直接输出到c945(npn)基极,射极接地,集电极接发光二极管负极。
电路不会有问题的。
lyjian 发表于 2008-9-8 10:11 | 显示全部楼层

这样的连接很明显就是因为"读-修改-写"问题造成了

RA4输出高电平时也被C945的B极拉到了0.6V,在执行"读-修改-写"指令时肯定会重写"0"到RA4了。
给RA口在RAM中建一个映射字节RA_MAP,操作IO时操作RA_MAP,然后再写RA4=RA_MAP。
或者更改RA4外面的电路连接:如上拉改为1K,串个4K7的电阻后再接C945的B极。
yewuyi 发表于 2008-9-8 12:01 | 显示全部楼层

~~

到处乱发很烦人,告诉你原因了你也不好好想,怎么干好技术?

在下面的连接中已经告诉你原因和解决办法了,要么是硬件修改,要么是软件改动,想根本上解决就改PCB,想做做实验就改软件。


另:良好的软件习惯就应该采用缓冲驱动的方式,I 服了 YOU 。。。
相关链接:https://bbs.21ic.com/club/bbs/list.asp?boardid=6&t=3086428&tp=%u5173%u4E8Epic16f87x%u7684%u5947%u602A%u95EE%u9898%uFF0C%u8FF7%u832B%u3002%u3002%u3002
NE5532 发表于 2008-9-8 20:36 | 显示全部楼层

读-修改-写的问题,同意9L

qq51886469 发表于 2008-9-16 14:18 | 显示全部楼层

re

10楼兄弟,消消气儿,呵呵!
不好意思。最近刚上手pic,活也比较紧,有些细节的东西没仔细看。我的错!在此谢谢啦!

虽然有点违反规定,但是解决问题心切!见谅。。。
帖子是同时发的!由于比较忙,一直没再上来看!
您的回复也是刚看到,以后免不了还要向大家请教!再次感谢大家!!!!
qq51886469 发表于 2008-9-17 09:52 | 显示全部楼层

re

9楼: 这样的连接很明显就是因为"读-修改-写"问题造成了 

RA4输出高电平时也被C945的B极拉到了0.6V,在执行"读-修改-写"指令时肯定会重写"0"到RA4了。
给RA口在RAM中建一个映射字节RA_MAP,操作IO时操作RA_MAP,然后再写RA4=RA_MAP。
或者更改RA4外面的电路连接:如上拉改为1K,串个4K7的电阻后再接C945的B极。
 
 

RA4=RA_MAP???
把字节送给RA4????没这么用过。。。孤陋了

uchar RA_MAP;
RAMP = 1;
RA4 = RA_MAP;

是这样?这就是影子寄存器的用法?




yppic82 发表于 2014-2-14 18:32 | 显示全部楼层
张明峰的书说得很清楚了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

83

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部