и
"РЛ" -НАЧИНАЮЩИМ
It
Надеюсь, вы уже можете самостоятельно разоб-
раться в приведенной программе. Обращу ваше вни-
мание только на некоторые аспекты.
Во-первых,
посмотрите, как я задам? состояние
флагов в регистрах TCON, TMOD и IE: вместо исполь-
зования большого количества команд SETB, я заношу
в регистр одной командой MOV константу, в которой
все нужные биты уже установлены (так экономится и
время исполнения программы, и объем кода). Для
большей наглядности я использую двоичное представ-
ление числа и дополнительно “разрисовываю” назна-
чение каждого бита. Я сам так делаю всегда, потому
как помнить все биты наизусть довольно трудно, а при
такой записи (которую я копирую из программы в про-
грамму) это не требуется.
Во-вторых,
обратите внимание, как осуществляет-
ся ожидание семафора (метка
wait_semafor).
Для ожи-
дания я применяю команду JBC, которая осуществит
переход, если семафор установится и при этом сразу
же сбросит его. Можно было бы поступить и иначе:
ждать командой JNB Semafor, $ установки семафора,
а следующей командой CLR Semafor сбросить его. По-
пробуйте определить, в чем недостаток первого вари-
анта (домашнее задание №1).
В-третьих,
обращаю ваше внимание на команду
CJNE А,
#5, $+3 (ищите ее после метки Stop_mess). В
ней я использую конструкцию $+3 для того, чтобы ука-
зать адрес
следующей
команды. Команда CJNE зани-
мает 3 байта программной памяти, поэтому следую-
щая команда всегда будет иметь адрес на 3 больше,
чем адрес команды CJNE. Применение метки $ для пе-
рехода относительно текущего адреса избавляет нас
от необходимости использовать лишнюю метку в сле-
дующей строке.
В-четвертых,
проанализируйте способ, которым
контролирую ситуацию отсутствия сигнала на входе.
Для этого в циклах ожидания смены уровня сигнала
на входе я постоянно проверяю значение счетчика ко-
личества прерываний - если счетчик равен 1, это зна-
чит, что скоро произойдет установка семафора, т.е.
ждем мы слишком долго, а это возможно при отсут-
ствии сигнала. Сравнивать значение ячейки памяти с
константой непосредственно мы не можем (нет такой
команды), поэтому приходится сравнивать значение
счетчика с аккумулятором, в который заранее зане-
сена единица. Попробуйте разобраться с недостатка-
ми такого приема и предложите, как от них избавить-
ся (домашнее задание №2).
В-пятых,
посмотрите, как я осуществляю анализ из-
меренногр периода. Чтобы разделить весь диапазон
возможных значений на три участка, я веду анализ
только старшего байта
счетчика таймера. Старший
байт
равен нулю
(счетчик насчитал слишком мало)
только при высокой частоте входного сигнала. Если
не равен, то я дополнительно проверяю, больше он 5
или нет. Если больше - значит частота входного сиг-
нала очень низкая (счетчик насчитал слишком мно-
го), а если находится в промежутке между 0 и 5 - час-
тота средняя. Определите границы диапазонов час-
тот, при которых светятся светодиоды (домашнее за-
дание №3).
Наконец, обратите внимание, что наша программа
состоит из нескольких очень похожих участков, сле-
дующих после меток у\гаи_0 и игаИ_1 (я даже похожие
метки использовал). Это как раз из-за того, что при
ожидании начала импульса я предусмотрел оба вари-
анта - когда импульс начинается с перехода из 0 в 1,
и наоборот, из 1 в 0. При этом для выделения полного
периода в первом случае приходится ждать последо-
вательности изменения уровня сигнала 1-0-1, а во вто-
ром 0-1-0.
Программа не свободна от недостатков: некоторые
из недостатков я ввел умышленно (для домашних за-
даний), а некоторые явились следствием попытки сде-
лать крайне
примитивный
пример, чтобы вам было
легче с ним разобраться. Вы можете попытаться улуч-
шить мою программу, а может быть, сумеете написать
свой вариант, свободный от недостатков. Во всяком
случае, сделать это при помощи МСЭШбю можно до-
вольно просто, даже без изготовления схемы (но со
схемой, конечно, интереснее -
попробуйте подать на
вход музыкальный сигнал с выхода магнитофона или
звуковой платы компьютера14 ©).
13
14
Абраш Р. МК для начинающих. - “Радиолюбитель”, №2,2007 г., с. 46.
|Э \
Продолжение в N811/2007
Радиолюбитель - 10 /2 0 0 7 [|
47
предыдущая страница 47 Радиолюбитель 2007-10 читать онлайн следующая страница 49 Радиолюбитель 2007-10 читать онлайн Домой Выключить/включить текст