MOV A,R2 ;Сдвиг кода сканирования
RL A
MOV R2,A ;для следующего индикатора
INC R0 ;Следующий адрес данных
DJNZ R7,AGAIN ;Идти на AGAIN, если (R7) ≠ 0
; (индикатор не последний)
JMP DISPL ;Идти на начало (зацикливание
;программы)
Недостатком приведенной программы DISPL является то, что она зациклена, т.е. МК не может выполнять никаких других действий кроме сканирования дисплея. Это, конечно, недопустимо для МКС, которые используются для управления различными объектами. Поэтому необходимо организовать выполнение программы сканирования через заданные промежутки времени. Это можно сделать с помощью прерываний от внутреннего таймера МК, который вырабатывает запросы прерываний с периодом TSCAN. Подпрограмма обработки прерывания выполняет сканирование дисплея, т.е. производит установку данных и высвечивает информацию на индикаторах. Основная же программа выполняет функции управления системой.
Допустим, что дисплей 4-х позиционный и период сканирования TSCAN = 10 мс, частота кварцевого резонатора равна 12 МГц. Если использовать для отсчета времени таймер Т/С0 в режиме 1, то в него при инициализации необходимо загрузить число 65536 – 10000 = 55536 = D8F0H.
Основная программа должна инициализировать таймер Т/С0, запустить его на счет и разрешить прерывание от Т/С0. Текст основной программы и подпрограммы обработки прерывания может иметь следующий вид:
DATA: EQU 40H ; Начальный адрес массива данных
ORG 0000H
JMP MAIN ; Переход на основную программу
ORG 000BH ; Вектор прерывания от T/C0
JMP DISPLAY ; Переход на программу
; динамического управления дисплеем
ORG 0050H ; Таблица семисегментных кодов
TABLE: DB 3FH ; Код цифры “0”
DB 06H ; Код цифры “1”
……………………………………..
DB 6FH ; Код цифры “9”
ORG 0100H ; Основная программа
MAIN: MOV SP,#70H ; Определить стек
; Инициализация дисплея
MOV P2,#00H ; Гашение дисплея
MOV R0,#DATA ; Начальный адрес массива DATA
MOV R2,#00000001B ; Начальный код сканирования
MOV R7,#4 ; Количество индикаторов
MOV TMOD,#01H ; Режим 1 для T/C0
MOV TH0,#0D8H ; Загрузить число D8F0H
MOV TL0,#0F0H ; в регистры TH0, TL0
SETB TR0 ; Запустить T/C0 на счет
SETB ET0 ; Разрешить прерывание от T/C0
SETB EA ; Общее разрешение прерываний
………………… ; Продолжение основной
………………… ; программы
; Подпрограмма перекодировки
CROSSCODE: MOV DPTR,#TABLE ; Загрузить в DPTR
; начальный адрес таблицы семисегментных кодов
MOVC A,@A+DPTR ; Пересылка кода в акк-р
RET
………………….
; Программа управления дисплеем
DISPLAY: CLR TR0 ; Остановить T/C0
MOV TH0,#0D8H ; Перезагрузить T/C0
MOV TL0,#0F0H
MOV P2,#00H ; Погасить индикаторы дисплея
MOV A,@R0 ; Пересылка символа из DATA
CALL CROSSCODE ; Перекодировка
MOV P0,A ; Вывод кода символа на сегменты
MOV P2,R2 ; Вывод кода сканирования
; (включение индикатора)
DJNZ R7,AGAIN ; Переход на AGAIN, если
; (R7) ≠ 0 (индикатор не последний)
; Переинициализация дисплея, если индикатор последний
MOV R0,#DATA
MOV R2,#00000001B
MOV R7,#4
SETB TR0 ; Запустить T/C0 на счет
RETI ; Возврат из прерывания
; Если индикатор не последний
AGAIN: MOV A,R2 ; Сдвиг кода сканирования
RL A
MOV R2,A
INC R0 ; Адрес следующего символа
SETB TR0 ; Запустить T/C0 на счет
RETI ; Возврат из прерывания
Динамический метод управления линейным дисплеем имеет следующие достоинства по сравнению со статическим:
1) значительно меньшие аппаратные затраты;
2) значительно меньший потребляемый ток;
3) значительно меньшее количество соединительных проводов.
Недостатком динамического метода является сложность программного обеспечения по сравнению со статическим.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.