pic18f为什么要使用LATx?阅读修改写入说明

时间:2016-07-17 11:48:49

标签: microcontroller pic microchip

我想知道如何读取修改PORTx工作上的写入指令,以及它们为什么会导致问题。我之前使用过pic12f683而且在写GPIO时我不记得有任何问题。为什么有些例子有效,有些则没有?

//works
while(1) {
  LATA++;
  Delay_ms(1000);
}

//works
char i = 0;
while(1) {
  PORTA = i++;
  Delay_ms(1000);
}


//doesn't work
while(1) {
  PORTA++;
  Delay_ms(1000);
}

//doesn't work
char i = 0;
while(1) {
  i = PORTA;
  PORTA = i++;
  Delay_ms(1000);
}

//doesn't work either for some reason (PORTA seems to be read as 0 always)
char i = 0;
while(1) {
  i = PORTA;
  LATA = i++;
  Delay_ms(1000);
}

//neither does this one
char i = 0;
while(1) {
  i = LATA;
  LATA = i++;
  Delay_ms(1000);
}

pic18f4550数据表第10节说:

  

读PORTA寄存器读取引脚的状态;写给它   将写入端口锁存器。

这并不意味着写入PORTA与写入LATA(端口锁存器......或者它)相同吗? 这是图片,以防有助于解释。

enter image description here

1 个答案:

答案 0 :(得分:3)

  

读PORTA寄存器读取引脚的状态;写给它   将写入端口锁存器。

如上所述,这意味着您要写入的内容将始终写入LAT(锁存寄存器),但并不意味着它将是端口输出的状态。例如,您可能有错误的TRIS配置(设置端口或IO引脚作为输入),或者您的硬件故障会将引脚拉低或拉高等等。这一切都意味着您可以写入端口(LAT)但是您将阅读的结果不必与您编写的结果相同。

无论LAT是什么,从端口读取都将始终返回这些行的当前(物理)状态。