Взгляните на схему с использованием последовательного интерфейса, приведенную на Рис. 12.2. В этой схеме используются только два вывода порта. Один, называемый SDO (Serial Data Out — выход последовательных данных), используется для побитовой передачи данных. Второй, названный SCK (Serial ClocK — последовательный тактовый сигнал), используется для одновременного тактирования трех сдвиговых регистров, осуществляя, таким образом, побитовый сдвиг данных вправо аналогично тому, как это было изображено на Рис. 3.8 (стр. 78).
Рис. 12.2.
Каждый индикатор дисплея подключен к своему 8-битному сдвиговому регистру[151] 74НСТ164 (см. Рис. 2.22 на стр. 51). Эта микросхема имеет тактовый вход С1 (активный фронт — нарастающий) и два входа данных, объединенных по И. Один из этих входов может использоваться для стробирования второго, но в нашем примере они объединены, образуя один вход данных. Также имеется вход сброса с активным НИЗКИМ уровнем для очистки содержимого регистра (в нашей схеме на него подается ВЫСОКИЙ уровень). При необходимости для управления этим входом можно задействовать еще один вывод микроконтроллера.
Чтобы сменить изображение на дисплее, необходимо задвинуть в указанную цепочку регистров 24 бита данных. Чтобы разобраться, каким образом это можно сделать, обратимся снова к процедуре управления 7-сегментным индикатором из Программы 11.9 (стр. 363), в которой осуществляется преобразование двоичного числа в набор BCD-разрядов, хранящихся в регистрах HUNDREDS, TENS и UNITS. Эти значения преобразовывались в 7-сегментный код, который затем выставлялся на 8-битную шину.
Чтобы преобразовать этот процесс к последовательному виду, нам потребуется написать подпрограмму, которая будет по очереди выдавать все биты регистра, скажем DATA_OUT, на вывод RAO/SDO, начиная с самого левого (старшего) бита. Одновременно на выводе RA1/SCK будут формироваться тактовые импульсы для загрузки этих битов в регистры. Алгоритм работы данной подпрограммы будет следующим:
1. Выставить на SCK НИЗКИЙ уровень.
2. COUNT = 8.
3. ПОКА COUNT > 0, ВЫПОЛНЯТЬ:
а) Копировать старший бит DATA_OUT в SDO.
б) Сдвинуть DATA_OUT на один бит влево.
в) Сформировать импульс
г) Декрементировать COUNT.
В Программе 12.1 содержится две подпрограммы. Первая из них, названная DISPLAY, очень похожа на ту, что была написана нами в Программе 11.9, поскольку точно так же вызывает подпрограмму BIN_2_BCD и копирует значения кодов 7-сегментного индикатора в интерфейсный регистр. В данном случае сначала загружается значение единиц (поскольку этот байт в конце концов будет задвинут в самый последний регистр цепочки), затем десятков и, наконец, сотен.