Программирование МК на ассемблере ASM-51 и AVR Pascal. Китаев Ю.В. - 25 стр.

UptoLike

Составители: 

25
уровень напряжения (лог. 1). Напряжение снимается с выхода инвертора
(с открытым коллектором). То есть на соответствующем выходе 4,5 или 6
порта “E” должен быть лог. 0, А на остальных двух выходах этого порта,
подключенным к двум другим индикаторам должна быть 1. Сдвигая “0” в
соседний разряд, выводим в него следующий 8-ми сегментный код и т.д.
Следовательно,
в каждый момент времени активен ТОЛЬКО один
индикатор из трех. Если этот процесс будет повторяться продолжительное
время, то на дисплее мы увидимнеподвижноеизображение десятичного
числа. Глаз не способен различить кратковременную последовательную
смену кодов.
Процесс последовательного смещения “0” (в некоторых
системах “1”) называетсябегущим нулем” (единицей) или
сканированием с помощьюбегущего нуля”.
Процедура “Display8seg”, как раз и осуществляет однократное
сканирование дисплея с помощьюбегущего нуля”. В операнде
“running0”, логич. 0 последовательно смещается на один бит влево,
обеспечивая переход к следующему индикатору. Циклический сдвиг
битов операнда “running0” производится командой “rol”. Далее, блок
команд “if not b…” осуществляет синхронизацию значения 7-го бита
порта “E”, к которому подключен светодиод, управляемый обработчиком
прерывания TIMER0COMP. Далее
следует цикл “for j:=….” стандартная
задержка для увеличения времени в течение, которого текущий 8-ми
сегментный индикатор, находится во включенном состоянии. 8-ми
сегментный код s[i] вычисляется и возвращается подпрограммой-
функцией “Dec2seg”.
Назначение этой подпрограммы в преобразовании двоичного числа
в трехзначный 8-ми сегментный десятичный код. Алгоритм работы этой
функциистандартный. Число делится (“в столбик”) на основание
системы счисления, в которую его необходимо перевести (в нашем случае