Я хочу иметь возможность выводить правильные данные из микроконтроллера в сдвиговый регистр 74HC595 без отдельного использования тактовых линий. Эта схема соответствует моим идеям для 16 бит данных:
Микросхема, которую я использую, основана на 8051 (at89C2051).
Если бы линии RCK и SCK были подключены к микроконтроллеру отдельно, то мой код для отправки данных был бы следующим:
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
Но у меня недостаточно контактов GPIO на моем микро, чтобы обеспечить отдельные линии синхронизации, и у меня недостаточно места на плате для большего микро. Поэтому я попытался закодировать строки, связанные вместе следующим образом. Здесь CK означает все часы, связанные вместе:
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
Где-то кто-то упомянул, что часы сдвига (SCK) опережают часы фиксации данных (RCK), когда они связаны и используются вместе, но как мне применить это в моем коде и при этом обеспечить отправку правильных 16 бит? выходные строки сдвигового регистра?
В идеале вы хотите загрузить 16 бит данных с помощью SCK, а затем вывести все 16 бит параллельно с помощью RCK. Связывание SCK и RCK вместе делает нормальную операцию переключения/нагрузки практически невозможной. Обычно OE/G имеет низкий уровень, поэтому выходы всегда включены. Нет необходимости выключать, если только другая пара 74LS585 не будет управлять теми же 16 выходами.
Если все 16 выходов должны поддерживать состояние, а затем изменять состояние одновременно, необходимо выполнить правильную последовательность переключения/загрузки.
Идея правильного использования MPU заключается в том, чтобы зарезервировать столько контактов, сколько необходимо для управления внешним оборудованием. Это требует детального планирования заранее, поэтому сначала вы назначаете обязательные функции.
Избыток пинов намного лучше, чем нехватка обязательных пинов управления.
Просто из любопытства, как вы закоротили контакт управления на 20-контактном MPU? Были ли остальные контакты уже привязаны к существующему оборудованию?
пользователь105652
пользователь105652
Майк -- больше не здесь
придурок