Quiero poder enviar datos correctos desde el microcontrolador al registro de desplazamiento 74HC595 sin usar las líneas de reloj por separado. Este esquema coincide con mis ideas para 16 bits de datos:
El micro que estoy usando está basado en 8051 (at89C2051).
Si las líneas RCK y SCK estuvieran conectadas al microcontrolador por separado, mi código para enviar los datos sería el siguiente:
RCK equ P1.1
SCK equ P1.2
DATA equ P1.3
LOWBYTE equ 20h
HIGHBYTE equ 21h
clr SCK
clr RCK
mov A,HIGHBYTE
mov R1,#8h
send1:
rlc A
mov DATA,C
nop
setb SCK
nop
clr SCK
djnz R1,send1
mov A,LOWBYTE
mov R1,#8h
send2:
rlc A
mov DATA,C
nop
setb SCK
nop
clr SCK
djnz R1,send2
setb RCK
nop
clr RCK
Pero no tengo suficientes pines GPIO en mi micro para permitir líneas de reloj separadas y no tengo suficiente espacio en la placa para un micro más grande. Así que intenté codificar con las líneas unidas de la siguiente manera. Aquí, CK significa todos los relojes unidos:
CK equ P1.2
DATA equ P1.3
LOWBYTE equ 20h
HIGHBYTE equ 21h
clr CK
mov A,HIGHBYTE
mov R1,#8h
send1:
rlc A
mov DATA,C
nop
setb CK
nop
clr CK
djnz R1,send1
mov A,LOWBYTE
mov R1,#8h
send2:
rlc A
mov DATA,C
nop
setb CK
nop
clr CK
djnz R1,send2
En algún lugar, alguien mencionó que el reloj de cambio (SCK) está uno por delante del reloj de bloqueo de datos (RCK) cuando están vinculados y se usan juntos, pero ¿cómo aplico esto en mi código y me aseguro de que se envíen los 16 bits correctos? las líneas de salida del registro de desplazamiento?
Idealmente, desea cargar 16 bits de datos usando el SCK, luego generar los 16 bits en paralelo usando el RCK. La unión de SCK y RCK hace casi imposible la operación normal de cambio/carga. Normalmente, OE/G es bajo, por lo que las salidas siempre están activadas. No es necesario apagar a menos que otro par 74LS585 esté manejando las mismas 16 salidas
Si las 16 salidas necesitan mantener el estado y luego cambiar de estado al mismo tiempo, se debe realizar una secuencia de cambio/carga adecuada.
La idea de usar una MPU correctamente es reservar tantos pines como sea necesario para controlar el hardware externo. Esto requiere una planificación detallada por adelantado, por lo que primero asigna las funciones obligatorias.
Los pines excesivos son mucho mejores que quedarse cortos en los pines de control obligatorios.
Solo por curiosidad, ¿cómo te quedaste corto con un pin de control en una MPU de 20 pines? ¿El resto de los pines ya estaban comprometidos con el hardware existente?
usuario105652
usuario105652
mike-ya no esta aqui
broma