Сообщение от Andre_san
|
Есть диаграмма в даташите но это какой-то бегущей огонёк. Так что вопрос остаётся открытым.
|
Бегущий огонёк - это как раз единичный бит, который был передан в этот самый регистр. Затем он сдвигается с передним фронтом тактового сигнала на одну позицию.
Код для чуть более сложного регистра - HC595 (с дополнительным пином одномоментного переноса), выглядит так:
Код:
|
void LoadToShReg(uint8_t NewValue) {
int i;
uint8_t V = NewValue;
GPIOA-›BSRR = GPIO_BSRR_BR12; // `Store` `\_
for (i=0; i‹8; i++) {
if (V & 0x80) {
GPIOA-›BSRR = GPIO_BSRR_BS11; // `Data` _/`
} else {
GPIOA-›BSRR = GPIO_BSRR_BR11; // `Data` `\_
}
V = V ‹‹ 1;
GPIOA-›BSRR = GPIO_BSRR_BS15; // `Shift` _/`
GPIOA-›BSRR = GPIO_BSRR_BR15; // `Shift` `\_
}
GPIOA-›BSRR = GPIO_BSRR_BS12; // `Store` _/`
} |
Соответственно, к пинам PA15 подключен пин D, PA11 - Shift, PA12 - Store (на 164'м отсутствует).
И алгоритм простейший. Если нужно отправить "1" - поднимаем пин D, поднимаем и отпускаем пин "C" (он же Shift), он же сдвиг, он же загузка. Проверяем следующий бит, который нужно отправить. Если "0" - опускаем пин, даём такт на "Сдвиг".
Ели регистр-защёлка 595 - то в конце байта даём второй строб, чтобы вывести все биты без моргания.