PHILIPS不建议采用IOPIN控制IO,主张用IOSET或IOCLR.感觉确实不方便,特别是在IO翻转时,肯定用Px->IOPIN ^= (1 << IOx)比if (Px->IOSET & (1 << IOx)) Px->IOCLR = (1 << IOx);else Px->IOSET = (1 << IOx);方便和快捷.一般不会出现问题情况...(软件仿真都不会出现问题!!!)但通过这2天的产品开发,发现用其IO翻转时,会清除其他IO...例:(前天出现没在意,认为不可能连续2行这样的语句)Px->IOPIN ^= (1 << IOx1);Px->IOPIN ^= (1 << IOx2);发现IOx1得不到翻转.Px->IOPIN ^= (1 << IOx2);Px->IOPIN ^= (1 << IOx1);发现IOx2得不到翻转.注意: 2个IO一高一低翻转无事!!!改为:if (Px->IOSET & (1 << IOx1)) Px->IOCLR = (1 << IOx1);else Px->IOSET = (1 << IOx1);_delay_loop_(1);//1uSif (Px->IOSET & (1 << IOx2)) Px->IOCLR = (1 << IOx2);else Px->IOSET = (1 << IOx2);IOx1,IOx2都可翻转.今天又出现了:// WDPORT->IOPIN ^= (1 << WDI);//不敢用!!!应该换成下列2行 if (WDPORT->IOSET & (1 << WDI)) WDPORT->IOCLR = (1 << WDI); else WDPORT->IOSET = (1 << WDI);发现用IOPIN翻转P0.31被莫名其妙地清零!!!想自己还是菜鸟,还是请教老鸟,但老鸟加了上拉电阻...当时虽知道P0.31可作为只出的IO使用,通过现象怀疑是开漏输出(晕菜)...加上拉及小电容都未果!!!检查了所有操作P0.31的地方,只有初始化一处!!!后来就想可能与前天IOPIN翻转IO有关,改成IOSET或IOCLR后,立即见效!!!哈哈,程序开始稳定地运行了...看来违法乱纪的事情还是少做为妙...

评论