本帖最后由 Light_David 于 2011-9-23 00:41 编辑
嘿嘿,这么早就结贴啦:D,
你使用RC3,4口做I2C模拟,是把对应的PORTC3/4清零,然后对trisc3/4置1 or 0来完成高低电平的吧?
(只有这样才能真正做到‘线与’),
那刚好你又使用RC1口线来模拟PWM,(其实此时你用C口不管做什么都会产生你说的灵异情况)
原因是 ‘读-修改-写’ 的问题!
--当你PWM程序对RC1置1,清0时;其实会对整个C口读回-修改后-再写入,也就是会将RC3,4的电平也读回然后再写入! 呵呵,若此时用于模拟I2C的RC3/4在高电平状态,被读回并再次写入了RC3/4,你一开始初始化RC3/4为0的状态被破坏,这时使用TRISC3/4 置1和清0 来控制I2C电平的方法就失效了....
只要想办法在你的PWM模拟程序中对RC1置1和清0时 保证PORTC3/4都会写入0,就OK了。。
其实此时对C口的任一引脚做电平改变时,都要注意到这个问题;
此乃 PIC16系列芯片模拟I2C最容易搞出问题注意的地方,只有经历了,才能真正明白‘读-修改-写’,
|