¿Qué sucede cuando se escriben datos en LATCH?

Esto es lo que encontré en la hoja de datos PIC16F1947:

Leer el registro PORTB lee el estado de los pines, mientras que escribir en él escribirá en el latch PORT. Todas las operaciones de escritura son operaciones de lectura, modificación y escritura. Por lo tanto, una escritura en un puerto implica que se leen los pines del puerto, este valor se modifica y luego se escribe en el latch de datos del PUERTO (LATB).

Soy desarrollador de firmware y mi experiencia es informática. Todavía me cuesta entender la electrónica y la lógica a nivel de hardware. Solo tengo los conocimientos básicos.

Entonces, quiero entender qué sucede cuando los datos se escriben para bloquearse en el nivel de hardware.

Gracias.

Respuestas (2)

Latch es una especie de memoria de un bit.

Usemos la imagen en el manual:

Operación del puerto de E/S genérico

Cuando escribe un bit en un pin de E/S, está almacenando este bit desde el bus de datos al registro de datos ( D-FlipFlop ). Si TRISx de este bit es 0, los datos de Q del registro de datos estarán en el pin de E/S. Escribir en LATx o PORTx es lo mismo. Ver abajo en rojo:

Escritura de operación de puerto de E/S genérica

Por otro lado, leer desde LATx es diferente a leer desde PORTx.

Cuando estás leyendo desde LATx, estás leyendo lo que está en el registro de datos ( D-FlipFlop ). Vea la imagen a continuación en verde:

Operación de puerto de E/S genérica Leer LATx

Y cuando lee desde PORTx, está leyendo el valor real del pin de E/S. Ver abajo en azul:

Operación de puerto de E/S genérica Leer PORTx

PIC usa operaciones de lectura-modificación-escritura para escribir y esto puede ser un problema , por lo que usan este registro de sombra para evitarlo.

+1 para vincular a un lugar que describe claramente el problema (y la solución) (lectura-modificación-escritura)[ techref.massmind.org/techref/readmodwrite.htm] .
Vaya, gran explicación.
Los dos enlaces al problema de lectura-modificación-escritura están rotos.
@Randomblue, he puesto otro enlace. El problema con el otro enlace es el carácter ']' al final. Simplemente elimínelo en la dirección de su navegador.

Para evitar problemas de lectura, modificación y escritura, debe escribir en el puerto como un todo, en lugar de establecer o restablecer bits individuales en el puerto. Un problema de RMW puede resultar en que no se configure un bit, o que otra salida suba, especialmente si los pines de salida están generando o absorbiendo mucha corriente.

Normalmente se utiliza un "registro de sombra". Establezca o restablezca bits en eso y envíelo al puerto para evitar problemas de RMW.

El problema se evita con los PIC 18F mediante el uso de un pestillo separado, bits individuales que se pueden configurar y restablecer con impunidad.

pero supongo que no necesito escribir en el registro del pestillo, ya que escribir en el registro del puerto original escribirá en el pestillo, ¿verdad?
@Donotalo, tienes razón. También puede escribir en el registro del puerto. No importa.
@Donotalo: es posible escribir en el registro del puerto, pero recomendaría como hábito escribir en los registros LATx en aquellos procesadores que los tienen, y considerar los registros PORTx como de solo lectura. Un almacenamiento "ciego" en un registro PORTx (p. ej., PORTB = 0x42;) no se comportará de manera diferente que uno en LATBx, y una lectura-modificación-escritura en un registro PORTx (p. ej., PORTB |= 0x02;) tendrá un efecto que ser igual que LATx o diferir de una manera probablemente indeseable. Por cierto, algunos de los últimos PIC anteriores a Microchip ofrecieron LATx; No sé por qué Microchip tardó años (¿décadas?) en hacerlo.
+1 por mencionar que los chips PIC18F (también conocidos como "PIC de instrucción de 16 bits) tienen el registro LAT, mientras que los chips PIC16F (también conocidos como "PIC de instrucción de 14 bits") requieren simular el registro LAT en el software ("registro de sombra").