»

ЖМИ СЮДА! БЕСПЛАТНО БРОСИТЬ КУРИТЬ/ПАРИТЬ

  • Главная|
  • Правила|
  • Контакты|
  • Реклама|
  • Карта сайта




Материалы сайта

  • ЕГЭ и экзамены
  • Рефераты
  • Электронные учебники
  • ГДЗ и решебники
  • Сочинения по литературе
  • Краткие содержания
  • Биографии
  • Литературные герои
  • Белорусские сочинения
  • Топики по английскому
  • Топики по немецкому
  • Все ВУЗы России
  • Изложения
  • Доклады

Это интересно

Медаль некурения

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

(Скачать оригинал реферата)

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 то выходим из цикла и  выполняем  следующие  действия.  Если
ST<>0, то ожидаем прихода следующей пачки импульсов. Счетчик ST  уменьшается
каждый раз при вызове прерывания от таймера Т/С1.  Таймер  Т/С1  досчитывает
до  50мс  и  устанавливается   TF=1,   вызывается   подпрограмма   обработки
прерывания таймера Т/С1. Вычисляется ST=ST-1 и  дальше  по  прерыванию  INT0
происходит подсчет длительности следующего импульса.
      Как только ST=0  то запрещаются  все  прерывания.  Если  DLIT_1

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18





 
Bobych.ru  © 2004 - 2023    Сочинения, рефераты, курсовые, ГДЗ, ЕГЭ, биографии