打印

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

[复制链接]
1930|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 | 只看该作者

同情啊

和我合作的兄弟也遇到类似的问题,结果没办法只有换一个管脚,以后尽量少用这种准双向口,希望有高手作答

使用特权

评论回复
5
lyjian| | 2008-9-7 00:08 | 只看该作者

可能是2楼说的原因

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

使用特权

评论回复
6
lyjian| | 2008-9-7 12:04 | 只看该作者

逻辑指令也不行

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

使用特权

评论回复
7
NE5532| | 2008-9-7 12:16 | 只看该作者

你把图发上来看看。

不是所有RA4都是开漏的,而且说开漏就不能拿来用,纯属没有任何道理的。给你的所有引脚都可以用,只看你会不会用。

使用特权

评论回复
8
qq51886469| | 2008-9-8 10:00 | 只看该作者

re

图不会发,描述一下哈:
其实很简单,
RA4接10k上拉,直接输出到c945(npn)基极,射极接地,集电极接发光二极管负极。
电路不会有问题的。

使用特权

评论回复
9
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极。

使用特权

评论回复
10
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

使用特权

评论回复
11
NE5532| | 2008-9-8 20:36 | 只看该作者

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

使用特权

评论回复
12
qq51886469| | 2008-9-16 14:18 | 只看该作者

re

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

虽然有点违反规定,但是解决问题心切!见谅。。。
帖子是同时发的!由于比较忙,一直没再上来看!
您的回复也是刚看到,以后免不了还要向大家请教!再次感谢大家!!!!

使用特权

评论回复
13
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;

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




使用特权

评论回复
14
yppic82| | 2014-2-14 18:32 | 只看该作者
张明峰的书说得很清楚了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

83

帖子

1

粉丝