PIC 16f627使用引脚同时输入和输出

时间:2011-02-26 03:13:19

标签: io hardware pic master-slave microchip

我正在尝试将两个PIC 16f627芯片(用PICC-Lite编程)连接到一个I / O引脚(RA2,它在已知点改变方向)和一个由其中一个芯片驱动的CLK引脚。

我最初设置它所以有一个主人和一个奴隶。主机将写入一个8位“命令”,i / o引脚的TRIS位将被翻转,从机将响应16位“应答”。

我投入了(暂时的,大的)延迟以确保没有时间问题。

写/读命令工作正常,两端都是翻转状态(TRISA)。但是,此时当主机要从之前写入的引脚读取时,即使引脚实际为1,它也总是读为0!

据我所知,TRISA设置正确(=输入时为bit设置),CMCON(= 7)也是如此,我相信 CONFIG字;对于两个芯片(好的,倒置的)都是一样的,并且输入在从机上工作......我也试图确保两个芯片的TRISA从不为0。

我尝试过的:   - 更改从站,使其不再尝试发回数据,而只是长时间切换其输出引脚的值。这可以在输出线上看到,但不能在输入引脚的值上看到。   - 只需将状态从输入引脚传递到另一个输出引脚(输出保持为零;虚拟放置显示该引脚上的一般输出有效)   - 将PORTA和TRISA的值写入LCD - TRISA是正确的但是PORTA为0(即使引脚的引线为高电平)   - 将I / O线连接到LED指示它正在改变,但端口上的输入值不是   - 连接电压表显示合适的电压(等于V +)   - 我试图更换Master替换(它认为它可能遭受了一些物理伤害),尽管没有区别   - 我已经读过这可能是一个'读 - 修改 - 写'问题,但我找不到建议确保在Pic16上没有这种情况......(没有LAT端口AFAIK?)

我正撞在墙上撞到墙上。任何提示或想法都将受到大力赞赏!我可能不得不使用两个引脚(尽管我希望能够通过单个共享I / O线在某个时刻插入多个从设备......)

2 个答案:

答案 0 :(得分:0)

原帖很旧,但如果有其他人遇到此问题,您可能希望发布您的代码。不是说他/她做了,但原始海报可能已经读取了引脚的锁存值而不是端口值。也就是说,读取最后写入的内容而不是实际在引脚上接收的电压。

在两个处理器之间保持良好的时序,命令和响应之间的时间越长越难。为什么不实现主站和从站在每个位上工作的协议。会导致同步发生的速度比方案OP提出的速度快24倍。

这就是我所看到的:主机使用开漏引脚(我认为在这种情况下为A4)通过电阻器将高电平连接到8位命令。但随后主人继续输出16个零。哦,忘了提一个1是一个更长的lo然后三态(或者因为我们通过一个电阻器被束缚)和0是一个更短的lo然后三态(或者嗨因为我们通过电阻器连接)。另一端的从机接收到8位命令,并且没有观察16个零。现在,每当主设备降低线路时,如果来自从设备的响应在该位位置为零,则从设备将不执行任何操作。但是,如果响应为1,则从设备也将发送一个较长时间的主设备。由于主机和从机是开漏输出,并且通过将这两个引脚连接在一起而产生的电气音符通过电阻器连接,因此没有问题。信号看起来像普通的1.这就是主软件会想到的。也就是说,当主设备输出16个零时,主设备正在读取零和端口值。这一切都取决于奴隶是否会留在外面,因为它希望主人想到零,如果奴隶会跳进去并保持线更长时间导致主人思考,啊,那是一个。

答案 1 :(得分:-1)

如果您只有两个可用的I / O引脚,并且您考虑将来添加更多的从设备,我建议使用标准协议而不是自己制作。 I2C工作正常,但您需要切换到具有MSSP模块的设备。