;
а н а л и з и р у е м ,
к а к и р а н ь ш е ,
т о л ь к о с т . б а й т п е р и о д а
mov
А, PH
j z
o n _ l e d 3
;
А = 0 -Э э т о В Ч
c j n e
А ,
# 6 ,
$ + 3
j e
o n _ l e d 2
;
0 < А < = 5 -> э т о С Ч
; а и н а ч е э т о Н Ч
o n _ l e d l :
c l r
L E D 1
r e t i
o n _ l e d 2 :
c l r
L E D 2
r e t i
o n _ l e d 3 :
c l r
L E D 3
r e t i
o f f _a i l :
;
п е р и о д с л и ш к о м в е л и к ,
с ч и т а е м ,
ч т о п р о с т о н е т с и г н а л а
m o v
P I ,
# 0 F F h
;
г а с и м в с е с в е т о д и о д ы
r e t i
o v r _ t 2 :
;
с ч и т а е м п е р е п о л н е н и я с ч е т ч и к а
i n c
O v r
r e t i
-------------------------
П
"РЛ"- НАЧИНАЮЩИМ
Р
e n d
Надеюсь, вы уже обладаете доста-
точными навыками, чтобы разобрать-
ся в приведенном примере. Со своей
стороны поясню только способ контро-
ля переполнения счетчика. Использу-
ется тот факт, что в момент переполне-
ния возникает прерывание. В обработ-
чике анализируется состояние флага
TF2 и, если он установлен (случай имен-
но переполнения), осуществляется уве-
личение на 1 счетчика переполнений -
см. метку
ovr_t2.
При обработке захва-
та (флагТГ2 не установлен) необходи-
мо проанализировать значение этого
счетчика и после этого обнулить его.
Так как для определения длительнос-
ти периода мы используем вычисление
;
к о н е ц п р о г р а м м ы
разности 16-разрядных чисел, необхо-
димо бьггь уверенными, что счетчик пе-
реполнялся не более 1 раза, иначе ре-
зультат будет неверным. Поэтому зна-
чение счетчика переполнений должно
быть 0 или 1, а если более-то входной
сигнал имеет слишком большой пери-
од (мы считаем - отсутствует). Для ана-
лиза значения счетчика я использую та-
кой метод: сбрасываю младший бит ко-
мандой А!\И. и проверяю результат -
если значение было не более 1, то ре-
зультат должен получиться нулевой.
Небольшое пояснение. Способ
сброса ненужных (исключаемых) битов
получил название маскирования, т.е.
мы как бы накладываем некую маску
или трафарет из единиц на двоичное
представление числа, при этом биты
числа, на которые “накладываются”
единицы маски сохраняются, а осталь-
ные сбрасываются в ноль. Логические
операции очень удобно представлять в
виде операций с масками.
Так же обратите внимание, что для
анализа причины, вызвавшей прерыва-
ние, нет необходимости анализировать
оба флага ТГ2 и ЕХГ2 - очевидно, что
если прерывание возникло, а ТР2 сбро-
шен, то установлен ЕХГ2. Это очевид-
ное обстоятельство позволяет сэконо-
мить целую команду в обработчике!
©
РХ
Продолжение в №11/2007
Ринат Мязитов |
С егодня я вам предлож у создать одну интересную програм м у,
231306, Республика Беларусь,
|
а та к ж е полезны е мелочи, которы е пом огут ее украсить.
Гродненская обл.,
Лидский р-н, г. Берёзовка,
ул. Ленина, д. 21а, кв. 54.
E-mail:
I
1
I
d / L M J jJ
j l ü
i i / j j d i J j j d
d -'r-r
Вначале создадим саму программу, которая будет по-
казывать время, т.е. часы. Мы сделаем два варианта ча-
сов: 1 - часы будут показывать час: минуты, 2 - час: мину-
ты : секунды.
Откроем Borland C++ Builder. Уменьшим нашу форму
(Forml) и добавим с панели управления
TLabel
(вкладка
Standard)
и
Timer
(вкладка
System) (рис. 1).
шшшттттщтмш
рщ
:
^
шщяя
+•
,
Label ■
• ■
Рис. 1
42
и Радиолюбитель - I I /2 0 0 7
предыдущая страница 42 Радиолюбитель 2007-11 читать онлайн следующая страница 44 Радиолюбитель 2007-11 читать онлайн Домой Выключить/включить текст