Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Разработка алгоритма программы. Укрупненный алгоритм основной программы приведен на рис

Читайте также:
  1. CALL — Вызов подпрограммы
  2. II. разработка проектов
  3. Алгоритм работы программы
  4. Алгоритмы и программы.
  5. Блок-схема программы
  6. В заголовке подпрограммы при определении переменных можно использовать лишь
  7. В реализации программы участвуют

Укрупненный алгоритм основной программы приведен на рис. 3.2. Поскольку в программе многократно используется блок выдержки времени, то данная последовательность команд оформлена в виде подпрограммы, алгоритм которой приведен на рис. 3.3.

 

Рис. 3.2. Блок-схема алгоритма основной программы

 

В первом блоке алгоритма подключается текстовый файл с символьными обозначениями РСН, присваиваются символьные наименования трем регистрам общего назначения, выполняющим роль счетчиков времени, задается адрес вектора сброса и начальный адрес основной программы, производится настройка параллельных портов ввода-вывода на соответствующий режим работы.

Порты А и С, к которым подключены светодиоды и пьезокерамический звукоизлучатель, настраиваются на вывод информации, а порт В, к которому подключены контакты кнопок, – на ввод. К выводам порта В подключаются внутренние подтягивающие резисторы.

Блоки со второго по пятый соответствуют исходному состоянию графа. Во втором и третьем блоках осуществляется гашение светодиода и выключение звукоизлучателя. В четвертом и пятом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA2 и SA3 разомкнуты, то программа возвращается на метку М10 и данный цикл повторяется заново. Если нажата кнопка SA2, то осуществляется переход на метку М30, а если нажата SA3, то – М20.

Блоки с шестого по одиннадцатый отвечают за мигание красного светодиода. В шестом блоке происходит подача питания на светодиод. Седьмой блок вызывает подпрограмму выдержки времени длительностью 1 с. В восьмом блоке питание со светодиода снимается. Девятый блок вызывает подпрограмму выдержки времени длительностью 0,5 с. В десятом и одиннадцатом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA2 и SA4 разомкнуты, то программа возвращается на метку М20 и данный цикл повторяется заново. Если нажата кнопка SA2, то осуществляется переход на метку М30, а если нажата SA4, то – М10.

Блоки с двенадцатого по семнадцатый обеспечивают подачу звукового сигнала. В двенадцатом блоке формируется передний фронт импульса, подаваемого на звукоизлучатель. Тринадцатый блок вызывает подпрограмму выдержки времени длительностью 0,5 мс. В четырнадцатом блоке формируется задний фронт импульса, подаваемого на звукоизлучатель. Пятнадцатый блок снова вызывает подпрограмму выдержки времени длительностью 0,5 с. В шестнадцатом и семнадцатом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA3 и SA4 разомкнуты, то программа возвращается на метку М30 и данный цикл повторяется заново. Если нажата кнопка SA3, то осуществляется переход на метку М20, а если нажата SA4, то – М10.

Перед вызовом подпрограммы выдержки времени в регистры-счетчики необходимо записать определенные числовые значения. Методика расчета этих значений приведена ниже.

Во-первых необходимо определить количество регистров-счетчиков. Тактовая частота микроконтроллера PIC16F873A в лабораторном макете равна 4 МГц, а длительность машинного цикла – четырем периодам тактовой частоты или 1 мкс. Большинство команд микроконтроллера выполняются за один машинный цикл, исключение составляют команды перехода, вызова и возврата из подпрограмм, которые выполняются за два цикла. Проще всего реализовать цикл требуемой длительности используя следующие команды:

 

T10: DECFSZ CNT,F;уменьшение значения счетчика на 1, скачек если 0

GOTO T10;возврат к декременту счетчика.

 

Команда DECFSZ выполняется за один машинный цикл, а GOTO за два, то есть время выполнения цикла составляет 3 мкс.* При использовании одного регистра-счетчика можно сформировать выдержку времени T от 3 до 3·28=768 мкс, при использовании двух регистров-счетчиков T ≤ 3·216=196 608 мкс, при использовании трех регистров T ≤ 3·224=50 331 648 мкс и т. д. В нашем примере достаточно трех регистров-счетчиков.

 

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

 

Во-вторых необходимо вычислить числовые значения помещаемые в каждый из этих регистров. Число циклов старшего регистра определяется по формуле , число циклов второго регистра – , а младшего – . Рассчитывается количество полных циклов, то есть полученные значения округляются в меньшую сторону.

В-третьих необходимо учесть, что в команде DECFSZ сначала выполняется декремент, и лишь потом сравнение содержимого регистра с нулем (преддекремент), то есть в начале первого же цикла число записанное в регистр будет уменьшено на единицу, что приведет к ошибке в счете. Эта ошибка может оказаться фатальной, если число циклов равно нулю. Поэтому к вычисленным значениям необходимо прибавить единицу: CNT_H = H +1, CNT_M = M +1, CNT_L = L +1. Эти значения заносятся в регистры-счетчики перед вызовом подпрограммы выдержки времени.

Алгоритм самой подпрограммы выдержки времени включает блоки с восемнадцатого по двадцать пятый. Вход в подпрограмму осуществляется по метке Т10. В девятнадцатом, двадцать первом и двадцать третьем блоках производится последовательный декремент регистров-счетчиков, а в двадцатом, двадцать втором и двадцать четвертом сравнение значений этих счетчиков с нулем. При обнулении всех счетчиков в двадцать пятом блоке происходит выход из подпрограммы.

 


Дата добавления: 2015-07-08; просмотров: 257 | Нарушение авторских прав


Читайте в этой же книге: ВВЕДЕНИЕ | Компиляция исходного текста программы в машинные коды | Отладка (выполнение) программы | FLASH память программ | Энергонезависимая память данных EEPROM | Разработка алгоритма программы | Написание текста программы на языке Ассемблер | Трансляция текста программы в машинные коды | Разработка алгоритма программы | Написание текста программы на языке Ассемблер |
<== предыдущая страница | следующая страница ==>
Тестирование и отладка| Написание текста программы на языке Ассемблер

mybiblioteka.su - 2015-2024 год. (0.006 сек.)