我想知道如何读取修改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(端口锁存器......或者它)相同吗? 这是图片,以防有助于解释。
答案 0 :(得分:3)
读PORTA寄存器读取引脚的状态;写给它 将写入端口锁存器。
如上所述,这意味着您要写入的内容将始终写入LAT(锁存寄存器),但并不意味着它将是端口输出的状态。例如,您可能有错误的TRIS配置(设置端口或IO引脚作为输入),或者您的硬件故障会将引脚拉低或拉高等等。这一切都意味着您可以写入端口(LAT)但是您将阅读的结果不必与您编写的结果相同。
无论LAT是什么,从端口读取都将始终返回这些行的当前(物理)状态。