і
АВТОМАТИКА
\
(d e fin e
_9И
AH? BH!
CH !__DH ?_FH! GH
ld r
((D,00h
Регистр D - адрес сегмента регистров
(d e fin e
_BLANK
00000000b
;
данных портов.
(d e fin e
0L
A L! BL?
C L IJD L ! EL! FL
;
Инициализация портов и таймера
(d e fin e
1L
BL? CL
mov
%a0,%d7
Загрузить счетчик цикла
(d e fin e
2L
AL! BL!
DL! EL! GL
;
инихдализации.
#d e fin e
3L
AL! BL!
CL!__DL!_GL
movl
% al,04h
Подготовить адрес управляющего
(d e fin e
_4L
BL? CL!
FL!_G L
;
регистра таймера.
(d e fin e
5L
AL! CL!
DL! FL! GL
ld r
# 5 ,INDIRECT
(d e fin e
6L
A L! CL!
DL! EL! FL! GL
$0:
mov
% cl, %d7
Загрузить байт инициализации в
(d e fin e
7L
AL? BL?
CL
/
регистр порта А
# d e fin e
8L
AL? BL!
CL! DL? EL! FL! GL
m tpr
#4, %al
Загрузить адрес регистра таймера
((d e fin e
9L
A L! BL!
CL! DL? FL! GL
;
в ІЙ 0.
.e ls e
mov
%c2, %d7
Загрузить байт инициализации в
((d e fin e
ОН
A { AH! BH! CH! DH! EH! FH)
;
регистр порта В
(d e fin e
A { BH! CH)
mov
%d6, %d7
Загрузить байт инициализации в
(d e fin e
A { AH! BH! DH! EH! GH)
;
регистр таймера.
(d e fin e
ЗН
A < AH! BH! CH! DH! GH)
b tg l
% al,00000001b
;
Изменить адрес регистра таймера
((d e fin e
A { BH! CH! FH! GH)
;
(для следующего цикла)
(d e fin e
A < AH! CH! DH! FH! GH)
subl
%a0,1
Вычесть счетчик цикла пересылки.
(d e fin e
A < AH? CH? DH? EH? FH? GH)
jn z
80
Продолжить инициализацию.
(d e fin e
A { AH! BH? CH)
(d e fin e
A ( AH! BH ! CH! DH? EH! FH! GH)
;
Запуск
сторожевого таймера
и подготовка переменных для реботы.
((d e fin e
A ( AH! BH! CH! DH! FH! GH)
movl
%c5,0AAh
Выдать характерный код в сторожевой
(d e fin e
BLANK
11111111b
;
таймер.
movl
% c5,01010101b
Запустить новый цикл счета таймера.
((d e fin e
0L
A < AL! BL! CL! DL! EL! FL)
ld r
#C,50h
Сегмент С - рабочая область
((d efin e
1L
A ( BL! CL)
;
обработчика прерываний от порта.
# d e fin e
2L
A ( AL! BL! DL! EL! GL)
movl
%a0, OH
((d e fin e
3L
A ( AL! BL! CL? DL! GL)
movl
% al, 0L
((d efin e
4L
A < BL? CL! FL? GL)
movl
% a3,T COMFORT
((d e fin e
5L
A ( AL! CL! DL! FL! GL)
movl
%a4, DEC UP
((d e fin e
6L
A ( AL! CL? DL! EL! FL! GL)
movl
%a2,5
Начинаем отображение со знакоместа 5.
((d e fin e
7L
A { A L! BL! CL)
movl
%a5,SPEED_DEC
Виртуальвый таймер инициализируем
((d e fin e
0L
A ( AL! BL! CL! DL? EL! FL! GL)
;
скоростью перемещения запятых.
((d e fin e
9L
A < AL! BL! CL! DL! FL ! GL)
movl
%a6,0
Текущую рабочую ячейку для запятой
.e n d if
устанавливаем кулевой.
movl
% bl, 32
Счетчик числа усредненых измерений.
; Специальные константы .
movl
%b4,0
Обнуляем накопитель для измерений.
((d efin e
DIRECT
00000000b
; Режим прямой адресации.
movl
%b5,0
((d efin e AUTOINCREMENT
01000000b
; Режим автоиюфемента
movl
% b2,0
Обнуляем
п р е д ь щ у щ ій
накопитель.
; адресов.
movl
%b3,0
((d efin e AUTODECREMENT
10000000b
; Режим автодекремента
movl
%b6,0
Обнуляем ячейки текущ его результата
;
адресов.
измерения.
#d e fin e
INDIRECT
11000000b
; Режим "чистой” косвенной
movl
%b7,0
; адресации.
((d efin e
DEC UP
2
; Запятая перемещается вверх.
;
Основной цикл фонового процесса: динамическая индикация
((d efin e
DEC DORN
254
; Запятая перемещается вниз.
выводимой информации.
((d efin e
Т COLD
С
; "Холодный" индикатор
»1:
BSt
8
Разрешить все прерывания.
; температуры.
w a it
Ждем прерываний.
..
((d efin e
Т COMFORT
2
; "Комфортный" индикатор
movl
% d 2
,_BLANK
Сразу гаотм паразитную подсветху
; температуры.
индикатора.
. .
((define
Т НОТ
4
; "Горячий" индикатор
subl
% a2,l
уменьшить номер текущего знакоместа.
;
температуры.
jn s
$2
Не перешли ли мы за нулевую границу?
movl
%a2,5
Перешли - начать обработку с начала.
$2:
mov
% dl, %a2
Вывести очередной номер знакоместа
в порт А.
movl
% a7,00001110b
Подготовить маску для выделения из
знакоместа старшей части.
and
%a7, %a2
Выделить из знакоместа старшую
Начало
управляющей программы.
часть.
csrp
%a7, %a3
Совпадает ли она с затребованной
частью.
jn z
93
Нет - цифры пока не отображаем. . .
S t a r t :
jmp
b e g in
- прерывание начального п ус ка программы.
b t t l
% a2,
00000001
b
Выдаем ли старшую часть?
jm p
i n t i
- прерывание от сторожевого тайм ера.
j z
$4
Н е т.
. .
r e t
Команда с б р о са .
mov
%a7, %a0
Да - вывести в будущее содержимое
nop
<вар езервировако>
порта В представление старшей цифры.
nop
jmp
95
nop
mov
%a7, %al
Вывести в будущее содержимое порта В
jmp
in t 6
- прерывание от линий пор та А .
представление младшей цифры.
nop
<зарезервировано >
jmp
95
nop
$3:
movl
%a7, BLANK
Очистить будущее содержимое порта В.
nop
95:
su b l
% a5,1
Вычесть виртуальный таймер динамики
nop
запятых.
nop
jn z
$7
Таймер еще не вакокчился.
nop
movl
%a5,SPEED JDEC
Таймер закончился - начать его
nop
снова.
nop
add
%a6,%a4
Вычислить новую позицию запятой в
r t i
- прерывания зап иси от ЭСППЗУ.
индикаторе.
jn s
86
Не стали ли позиция меньше нуля?
;
movl
%a6,4
Начать сначала - со старшей позиции.
;
Начало работы - инициализация портов и тайм еров. Для работы
jmp
87
испольвуются те же рабочие
я ч е й к и ,
ч то и в обработчике
$6:
b i d
% a6,00001000b
Защитить номер позиции от выхода за
прерываний сторожевого тайм ера, т . е . 53Ь и 54Ь.
гранит?!.
9 1
:
b tg l
% аб,
00000001
b
Так надо (нет свободных ячеек для
ХОИ запятых в этом с егм е н те ).■■
b e g in :
ld a l
# 6 , i n i t
вея
csrp
%a2, %a6
В этом знакоместе ожидается запятая?
ld a h
# 7 .i n i t
вея
; П одготовить адрес для массовой
jn z
98
Н е т.
. .
инициализации у стр о й с тв .
b tg h
% a7,{_H H /16)
Инвертировать код запятой.
ld r.
#A ,40h
; Р еги с тр А - адрес сегм ен та 40Ь
88:
b tg l
% a6,00000001b
Босстакоаить испорченный номер
ld r
#B ,48h
; Р егистр В - адрес сегм ен та 48Ь
позиции.
ld r
#C ,18h
; Р еги с тр С - адрес сегм ен та
mov
%d2, %a7
Вывести цифру на порт В.
управляющих р еги стр о в по р то в .
jmp
91
Завершение одного цикла индикации.
• І
І Радиолюбитель - 0 4 /20 0 5
предыдущая страница 5 Радиолюбитель 2005-04 читать онлайн следующая страница 7 Радиолюбитель 2005-04 читать онлайн Домой Выключить/включить текст