Microchip
直播中

赵晓敏

7年用户 210经验值
私信 关注
[问答]

怎么在MPLABX IDE上使用pic16F873-04和XC8?

大家好。我仍在我的项目“自动化”我的铁路立体图N刻度。我在MPLABX IDE上使用pic16F873-04和XC8。请不要问我为什么使用这个设备。我已经在其他线程中回复了很多次。我想把4个控制器连接到一个主控上,现在我正在尝试开发i2c通信,但是我有一些问题。将来可能切换到RS485,但现在i2c是我的目标。在下一张图片中会有一些传感器,并且每个需要告诉其他控制器wich传感器在网络中激活:例如,排除pic1(master),pic2会有sens2,pic3 sens3,pic4 sens4……d,通过主推,发送SeN2和SeN4到PIC3的状态。我想这是很清楚的。我不解释其他的组合。因此,在网络中,必须运行从主节点开始的指令,或者通过从节点发送的指令。目前我正试图将主节点连接到一个从节点。请看这个但是不关心eprom。我想通过按主开关来接通从机上的led。转发主从机的代码。它来自这里,http://EndoRo.COM/I…Mealer-MPLAB-XC8/,并根据我的需要进行修改。传输在这个链接上是可见的HTTPS://www. Youtub.com /手表?V=W56PNRPU144。您可以通过主控和接收PROP来检查寻址组。在这个视频中,主开关在RC0上,现在在RC1上。在第二组中,您可以看到0x31上的寻址,并且数据总是由接受者发送到ON上。我认为这是不好的,因为相同的信号就像没有奴隶连接。我认为主代码有一些问题,我不能为这个问题从奴隶那里找到答案。有人能帮我找到解决办法吗?对不起,很多评论都是意大利语。

回帖(18)

吴键洪

2020-3-17 07:42:43
P.S.为什么要把总线速度作为参数传递给I2CJMaskIn()函数?这不必要地使事情复杂化。仅仅使它恒定,并且让编译器执行计算比在运行时执行要容易得多。
举报

张毕鹄

2020-3-17 07:49:58
那么,你有什么建议吗?你对这个问题有什么看法?你有什么建议?你可以写一些代码吗?
举报

吴键洪

2020-3-17 08:01:18
不,这有两点不对。第一,我说了“等待”,即等到前一个动作完成,然后接收的ACK状态将处于ACKSTAT位,ACKDT用于发送,而不是接收。只读一次。如果它是高的(那是NAK),那么奴隶就没有反应。没有必要等待它变低,以后再也不会这样了,所以中止并报告一个错误。你有什么建议?你可以写一些代码吗?不要将32位值作为参数“c”传递给init代码(这相当低效),只需在C filethen中早一点进行更改,现在表达式中的所有数字在编译时都是已知的,所以编译器只需计算所需的常数值就可以写入SSPADD,.她在运行时必须进行32位计算。8位处理器中的32位运算总是低效的。
举报

张毕鹄

2020-3-17 08:08:56
不,这有两点不对。第一,我说了“等待”,即等到前一个动作完成,然后接收的ACK状态将处于ACKSTAT位,ACKDT用于发送,而不是接收。只读一次。如果它是高的(那是NAK),那么奴隶就没有反应。没有必要等待它变低,之后它永远不会变低,所以中止并报告一个错误。好的,你的意思是简单地_u._us(10)或者更多,或者最好添加一个“I2C_Master_Wait()”,其中它呈现SSPCON2:4位4ACKEN:Acknowledge Sequence Enable bit(仅在I1415C主模式下)在Ma中ster接收模式:1=在SDA和SCL管脚上启动Acknowledge序列并发送ACKDT数据位。由硬件自动清除。0=Acknowledge序列空闲。也许将来我会这么做,在优化时刻,我习惯于分组定义和数据区中的其他内容…所以,现在我不关心这个,不管怎么理解,这对我来说是新的。谢谢,我不知道所有的程序员都在耍花招。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分