Answers:
锁存器是一种记忆。
让我们使用手册中的图片:
当您在I / O引脚中写入一位时,就是将该位从数据总线存储到数据寄存器(D-FlipFlop)。如果该位的TRISx为0,那么来自数据寄存器Q的数据将在I / O引脚中。在LATx或PORTx中写入是相同的。参见以下红色:
另一方面,从LATx读取的内容与从PORTx读取的内容不同。
从LATx读取数据时,您正在读取数据寄存器(D-FlipFlop)中的内容。参见下面的绿色图片:
从PORTx读取数据时,您正在读取的是实际I / O引脚值。见下面蓝色:
PIC使用read-modify-write进行写操作,这可能是一个问题,因此他们使用此影子寄存器来避免它。
为避免读取-修改-写入问题,您应该整体写入端口,而不是设置或重置端口中的各个位。RMW问题可能会导致某位未置位,或者另一个输出变高,特别是在输出引脚拉出或吸收大量电流的情况下。
通常使用“影子寄存器”。设置或重置其中的位,然后将其输出到端口,以避免RMW问题。
通过使用单独的锁存器,使用18F PIC可以避免此问题,其中的各个位可以不受惩罚地设置和复位。