Статьи..


PROTEUS вместо макетной платы. MCS51. Динамическая индикация.

Не смотря на то, что существуют более производительные 8-ми битные микроконтроллеры (AVR, STM8 и др.), семейство MCS51 продолжает пользоваться популярностью. Ресурсов микроконтроллера вполне хватает для большинства не сложных конструкций. В статье рассматривается пример подключения 7-ми сегментного индикатора к микроконтроллеру AT89c2051. Конструкция представляет собой простой секундомер с диапазоном счета от 0 до 99 секунд. Для отсчета временных интервалов, используется 16-ти разрядный таймер, входящий в состав периферии AT89c2051. Изображение сегментного 2-х разрядного индикатора обновляется с частотой 100Гц, что исключает заметное для глаз мерцание.

Программа для микроконтроллера AT89c2051 написана на ассемблере и работает следующим образом. Переменные инициализируются начальными значениями, Т/С0 переводится в режим 16-ти разрядного таймера и разрешаются прерывания.

mov TMOD,#1 ; 16-ти битный режим таймера Т0
mov TCON,#10h ; запуск T/C0
mov IE,#82h ; разрешаем прерывание от T/C0

Далее программа переходит к опросу флага fReady.

xxx:
jnb fReady,xxx ; ждем, пока не пройдет 1 секунда
....

Каждую 1/200 кекунды происходит переполнение таймера и микроконтроллер переходит к обработке прерывания. В функции-обработчике Tim0_Ovf, производится отображение содержимого буфера Buff на индикаторе.

Proteus. Динамическая индикация.

Вместе с этим, каждый тик таймера, декрементируется значение Count. При достижении переменной Count нулевого значения, переменная ClkS, содержащая количество секунд увеличивается на 1 (..ClkS сбрасывается в 0, при достижении 100) и устанавливается флаг fReady, сигнализирующий о том, что нужно обновить содержимое буфера Buff.

Буфер Buff обновляется вызовом функции Bin2Led.

Bin2Led:
mov DPTR,#table_ch
movc A,@A+DPTR
ret

В качестве параметра в аккумуляторе передается число от 0 до 9, которое преобразуется в символ.

Исходый код проекта.

На главную страницу...