Пример: Транспортная логистика
Я ищу:
На главную  |  Добавить в избранное  

Схемотехника /

Разработка автоматического определителя номера

Документ 1 | Документ 2 | Документ 3 | Документ 4 | Документ 5 | Документ 6 | Документ 7 | Документ 8 | Документ 9 | Документ 10 | Документ 11 | Документ 12 | Документ 13 | Документ 14 | Документ 15 | Документ 16



Скачать реферат


7. Составление алгоритмов работы программ

7.1. Общий алгоритм работы системы

Блок-схема алгоритма приведена в приложении .

При включении системы происходит сброс микроконтроллера по входу RST. Затем осуществляется перевод микропроцессора в режим холостого хода. Микропроцессор переходит в режим холостого хода, и ожидает появление прерывания. Как только приходит сигнал, он вызывает установку флага прерывания и дальше идет автоматический переход к подпрограмме обработки прерывания от INT0. В подпрограмме обработки прерывания происходит подсчет процентного содержания единиц на интервале 250мс. Дальше происходит возврат из подпрограммы обработки прерывания.

Если на данном интервале количество единиц составляет меньше 10% от общего числа нулей и единиц, то считается что пришла помеха и происходит перевод микропроцессора в режим холостого хода.

Если на данном интервале количество единиц составляет больше или равное 10% от общего числа нулей и единиц, то считается что пришел сигнал вызова. Далее происходит имитация подъема трубки. Как только подняли трубку начинается отсчет времени. Если в течении 5 секунд небыли произведены никакие действия, то есть сигнал не посылается, то происходит “опускание” трубки. Затем микропроцессор переходит в режим холостого хода и опять ждет вызывной сигнал.

Если посылается сигнал, то происходит считывание этой посылки и в зависимости от кода на входе входного порта посылается единичка на тот или иной бит порта. Затем “кладется” трубка и МК переходит в режим холостого хода, то есть ожидается следующий звонок.

7.2. Алгоритм определения достоверности вызывного

сигнала

Блок-схема алгоритма приведена в приложении .

При включении системы происходит сброс микропроцессора. При этом сбрасывается содержимое регистров: PC, ACC, B, TMOD, DPTR, TCON, T/C0, T/C1, IP, SCON, а в регистре PCON сбрасывается только старший бит, в регистр указатель стека заносится код 07Н, а в порты Р0 – Р3 0FFFH. Настраиваем Т/С0 и Т/С1 в режим 16-ти разрядного таймера, то есть в регистр TMOD заносится двоичное число #00010001B. Таким образом таймеры включаются и останавливаются только по TR. Далее идет выбор слова состояния программы. Выбираем первый банк регистров #00001000В. Производится настройка типа прерывания по переходу из 1 в 0, то есть TCON.0=1 Идет разрешение всех прерываний, так как при сбросе регистр масок прерывания IE сбрасывается и бит EA=0. Для разрешения всех прерываний делаем ЕА=1. Заносим в регистр R0 старшую часть числа 2500мс, равное 10% от 250000мс.

Далее происходит включение режима холостого хода. Для этого в нулевой бит регистра управления мощностью PCON помещается единица, то есть PCON.0=1. После этого микроконтроллер ожидает входной сигнал на входе прерывания INT0. Когда пришел сигнал и был перепад из “1” в ”0” на вход INT0 и если прерывания разрешены, то устанавливается бит регистра управления/статуса таймера IE0=1. При этом автоматически осуществляется переход на подпрограмму обработки прерывания.

В подпрограмме обработки прерывания ждем прихода единицы не вход порта Р1.7. Суть метода в том, то мы считаем длительность импульса на каждом периоде 50 мс, их складываем. И если полученное число составляет больше 10% от 250мс, то мы считаем, что на входе присутствуют сигнал вызовы. Иначе на входе сигнал помех.

Поэтому таймер Т/С0 подсчитывает длительность импульсов, а Т/С1 отсчитывает 250мс (5 периодов).

После прихода сигнала единицы на порт Р1.7, обнуляются старшая и младшая части таймера Т/С0. Далее идет проверка флага индикации запуска таймера Т/С1 (проверяем установлен или сброшен FLAG).

Если FLAG=1, то это означает что таймер Т/С1 уже включен и надо включать таймер Т/С0.

Если FLAG=0 в таймер Т/С1 заносится старшая и младшая части периода импульса. Далее запускается таймер Т/С1, а вслед за ним и Т/С0 и устанавливаем FLAG=1, то есть это говорит о том, что Т/С1 включен..

Ожидаем прихода нуля на Р1.7. Этот ноль сигнализирует об окончании импульса, надо останавливать Т/С0. Дальше вычисляем длительность единиц путем сложения значения аккумулятора с предыдущим значением. Далее происходит выход из процедуры обработки прерывания.

Так как длительности измеряются только 16-тью разрядами, то для подсчета длительности 250мс необходимо сделать задержку в 50мс и вызвать ее 5 раз. В основной программе стоит счетчик циклов ST, который в начале равен ST=5. Eсли ST=0 то выходим из цикла и выполняем следующие действия. Если ST0, то ожидаем прихода следующей пачки импульсов. Счетчик ST уменьшается каждый раз при вызове прерывания от таймера Т/С1. Таймер Т/С1 досчитывает до 50мс и устанавливается TF=1, вызывается подпрограмма обработки прерывания таймера Т/С1. Вычисляется ST=ST-1 и дальше по прерыванию INT0 происходит подсчет длительности следующего импульса.

Как только ST=0 то запрещаются все прерывания. Если DLIT_1




Copyright © 2005—2007 «Mark5»