本帖最后由 QuakeGod 于 2010-11-18 04:10 编辑
外部的强上拉将IO口钳位在了高电平,真纳闷,LED怎么不接限流电阻呢?不怕烧掉吗?
而P12^=1,视乎C语言优化的程度,结果有所不同,
假如编译成汇编为
MOV C,P12
CPL C
MOV P12,C
或
MOV C,P12
RLC A
XRL A,#01H
RRC A
MOV P12,C
那么因为读的是IO状态,就会造成读取的数值不准确。
假如编译成汇编变成
CPL P12
或者
XRL P1,#04H
那么因为 读-修改-写 指令读取的是端口寄存器的值,不涉及端口具体状态,那么就会得到正确的结果。
当然,我们写程序的时候,要尽量避免这种状态,
原则就是,凡是输出的端口,就不要试图去读它的状态。
|