Rain_King 发表于 2014-11-27 15:02 
我大致明白了点...但是有些说不通啊,你这里说的是操作IO口都会有影响,但是我这里只有连续操作IO口时才有 ...
连续操作才会有端口的寄生电容充放电现象呗
举个栗子:
PORTB初值为0x00
连续操作时:
PORTB=0x0F;//第一步
//单片机读取PORTB为0x00,然后LATAB=0x00^0x0F,得到正确结果0x0F
PORTB=0xF0;//第二步
//单片机读取PORTB为0x00(因为此时单片机引脚上的寄生电容还没充满电还处在相对低电平状态),然后LATAB=0x00^0xF0,得到错误结果0xF0
延时操作时:
PORTB=0x0F;//第一步
//单片机读取PORTB为0x00,然后LATAB=0x00^0x0F,得到正确结果0x0F
delay();//延时等待端口寄生电容充满电,端口电平会达到接近电源电压的水平
PORTB=0xF0;//第二步
//单片机读取PORTB为0x55(因为此时单片机引脚上的寄生电容已经充满电处在相对高电平的状态),然后LATAB=0x0F^0xF0,得到正确结果0xFF
至于木有LATA端口的片子么,要么想办法减少端口寄生电容,要么降低端口速度,能合并在一起的端口变化就不要分开了,比如
PORTA0=1;
PORTA1=1;
PORTA2=1;
就直接合并了
PORTA=0x07;
|