11
"РЛ" - НАЧИНАЮЩИМ
J
в “большом” программировании, особенно в многозадач-
ных системах, для синхронизации параллельно выпол-
няющихся задач. В нашем случае
параллельно
будут вы-
полняться две задачи - основная программа измерения
периода и индикации; и
фоновая
- отсчет периодов из-
мерения. Фоновая задача так называется потому, что вы-
полняется как бы сама по себе параллельно основной,
не мешая ей (где-то “позади” нее, на ее фоне). Это не что
иное, как знакомые вам обработчики прерывании. Основ-
ная задача запускает (в “большом” программировании го-
ворят “порождает'’) фоновую (т.е. задает режим таймера
и включает его), а затем синхронизируется с нею. Для
этого фоновый процесс в нужные моменты устанавлива-
ет специальный флаг, называемый
семафором,
а основ-
ной дожидается установки семафора, после чего сбра-
сывает его и выполняет очередной цикл собственных
действий, после чего снова ожидает семафора. При реа-
лизации этого подхода самое главное - обеспечить, что-
бы время одного цикла основного процесса было мень-
ше, чем период установки семафора фоновым процес-
сом, иначе возможны пропуски событий (т.е. нарушение
синхронизации).
Небольшое примечание.
Фоновых процессов может
быть несколько - по числу возможных источников запро-
сов прерываний. Подчас сложность фоновых процессов
становится много выше основного (как в
ранее
рассмот-
ренном примере - основной процесс, по сути, представ-
лял собой бесконечный пустой цикл JMP $). Синхрониза-
ция нескольких взаимосвязанных процессов между собой
может быть весьма сложной задачей, например, большин-
ство проблем операционной системы Windows 9х было
связано именно с тем, что нарушалась синхронизация па-
раллельных процессов - одни процессы ожидали семафо-
ров от других, а те в свою очередь -от первых, чт и приво-
дило к зависаниям. Однако разработка более-менее серь-
езных устройств на микроконтроллерах практически невоз-
можна без использования нескольких фоновых процессов,
а значит научиться правильно использовать семафоры для
их синхронизации все-таки нужно, не смотря на сложность.
Хотя в нашем случае нет особой нужды в использова-
нии принципа семафора, мы все-таки воспользуемся им
с целью освоения методики. Программа, которая решает
поставленную задачу, специально упрощена и далеко не
оптимальна, зато разобраться в ней будет проще.
Const
equ
(OFFFFh - 1000+8)
; начальное Значение счетчика
InitTH equ
high(Const)
; начальное значение ТН0
InitTL equ
low(Const)
; начальное значение ТЬО
Tickcnt equ
11
; 0,1 сек
Semafor equ
PSW.5
; семафор
LED1
equ
PI. 7
LED2
equ
. PI.4
LED3
equ
Pl.l
dseg
at lOh
Cnt:
ds
1
; счетчик тиков таймера
Stack:
cseg
org
0
jmp
St
; переход на начало программы
; точка входа прерывания таймера 1
; Таймер 1 используется для счета времени
org lBh
jmp Timerl
st:
mov SP, #Stack
;
настраиваем режимы таймеров и маску прерываний
mov
TMOD,#00010001Ь
; режимы работы таймеров ТО и Т1
;
МП ММ
;
М М М ++- режим работы ТО
;
М М I+— С/ТО: 0-таймер, 1-счетчик
;
Ml Iч
-- ТО: О-управление по TRO,
;
М М
1- управление по TRO и INTO
;
I I -Н-- режим работы Т1
;
Iч--- с/TI: 0-таймер, 1-счетчик
;
ч----- Т1 : О-управление по TR1,
;
1- управление по TR1 и INT1
44
У
Радиолюбйтель - 10/2007
предыдущая страница 44 Радиолюбитель 2007-10 читать онлайн следующая страница 46 Радиолюбитель 2007-10 читать онлайн Домой Выключить/включить текст