- •Алматы 2011
- •1 Лабораторная работа №1. Байтовые и битовые команды. Логика
- •2 Лабораторная работа № 2.Маскирование. Суммирование массива
- •3 Лабораторная работа №3. Подпрограммы
- •4 Лабораторная работа №4. Умножение на дробное число
- •5 Лабораторная работа №5. Регулирование расхода газа
- •6. Лабораторная работа №6. Программирование клавиатуры
- •Фрагменты программы.
- •8 Лабораторная работа №8. Перевод чисел из 2-й в 2_10 систему.
- •9 Лабораторная работа №9. Таймер tmr1
- •10 Лабораторная работа №10. Прерывания
- •11 Лабораторная работа №11. Сложение двухбайтных чисел
- •Конец алгоритма
- •Конец алгоритма
- •Приложение а Регистр Status
- •Приложение б Описание инструкций мк pic
- •Приложение в Модуль таймера tmr1
- •Приложение г Карта памяти мк pic16877
- •Список литературы
- •0 50013, Алматы, Байтурсынова, 1
3 Лабораторная работа №3. Подпрограммы
Цель работы: написание подпрограмм для задержки времени, их расчет.
Подпрограммы применяют в тех случаях, когда в нескольких места алгоритма требуется выполнить одинаковые действия. Кроме того, часто программу разбивают на подпрограммы, чтобы упростить её чтение.
Отсчет времени можно организовать с помощью подпрограмм со счетчиками, что и реализовано в алгоритме, показанном на рисунке 3.1. Вся работа подпрограммы сводится к уменьшению значений всех счетчиков до нуля, на что тратится определенное время. Длительность времени задержки определяется начальной величиной счетчиков и временем выполнения инструкций подпрограммы в МК. Время задержки будет определяться примерно произведением Sch_out*Sch_inи частой работы генератора МК.
Поскольку микропроцессор работает с высокой частотой, приходится создавать внешние циклы для увеличения времени задержки. Подпрограммы пишут после инструкции GOTO$ основной программы.
Подпрограмма из основной программы вызывается по имени.Значение аккумулятораWявляется аргументом для подпрограммыTimer. После завершения ее работы управление передается в главную программу на следующую инструкцию после вызова.
Задание на проектирование. Создайте программу для автоматической окрасочной камеры, выполняющую следующую работу:
- при подаче питания включить световую сигнализацию на пульт оператора L2 и звуковую сигнализациюS1;
- через 2 секунды выключить сирену и включить двигатель краскораспылителя D1, двигатель вентилятораD2 и лампочкуL1, сигнализирующую об окраске;
- через три секунды выключить двигатель краскораспылителя D1.
- ещё через 2 секунды выключить вентилятор D2 и лампочкуL1;
- в течение одной секунды заменяется заготовка в камере;
- повторить процесс окрашивания новой заготовки, начиная с включения сирены.
Рисунок 3.2 – Схема подключения оборудования
На рисунке 3.2 показана схема подключения оборудования к битам PORTC.
Рисунок 3.3 – Временная диаграмма работы окрасочной камеры
Фрагменты программы.
include<p16F877.inc>; описание регистров общего назначения.
Sch_inEQU H'22'; адрес счетчика внутреннего цикла задержки.
Sch_outEQU H'24' ; адрес счетчика внешнего цикла задержки.
Sch3 EQU H'23' ; адрес счетчика третьего цикла задержки.
; инструкции стандартной настройки МК опущены.
; рабочая часть программы.
MOVLW B'10000000'
MOVWF PORTC; включаем сигнализацию L2 на пульт оператора.
Sled_detBSFPORTC, 0; включаем звуковую сигнализациюS1.
MOVLWd’40’; аргументWзадает время таймера. При отладке d’2’.
CALL Timer
MOVLW B'10001110'
MOVWF PORTC; выключаем S1, включаемD1,D2 иL1.
MOVLWd’60’; задаем время окраски.
CALL Timer
BCFPORTC, 2; выключаемD1, продолжают работатьD2,L1 иL2.
MOVLWd’40’; задаем время работыD2 иL1.
CALLTimer
MOVLW B'10000000'
MOVWF PORTC; окраска закончена, сигнализация на пульте L2 работает.
MOVLWd’20’; задаем время для замены заготовки.
CALL Timer
GOTOSled_det; переход на меткуSled_detдля включения камеры.
GOTO $; разделитель основной программы и подпрограмм.
Timer; подпрограммаTimer. Применено два вложенных цикла.
MOVWF Sch3; значениеWявляется аргументом для таймера.
M3 MOVLWD'150'
MOVWF Sch_out; устанавливаем значение внешнего счетчика.
M_out; метка внешнего счетчика.
MOVLW D’255';
MOVWF Sch_in; устанавливаем значение внутреннего счетчика.
M_in; метка внутреннего счетчика.
DECF Sch_in,F; уменьшаем значение счетчикаSch_inна 1.
BTFSSSTATUS,Z; если оно равно нулю(Z=1), пропускаем GOTO.
GOTO M_in; срабатывает только приZ=0.
DECF Sch_out,F; уменьшаем значение счетчикаSch_outна 1,
BTFSSSTATUS,Z; если оно равно нулю(Z=1), пропускаем GOTO.
GOTO M_out; срабатывает только приZ=0.
DECF Sch3,F; уменьшаем значение счетчикаSch3 на 1,
BTFSSSTATUS,Z; если оно равно нулю (Z=1), пропускаемGOTO.
GOTO M3; срабатывает только приZ=0.
RETURN; конец подпрограммы Timer.
END; конец текста всей программы.
Т а б л и ц а 3.1 – Варианты заданий
Вариант |
Биты подключения S1, D1, D2 L1, L2. |
Время работы, сек |
Вариант |
Биты подключения S1, D1, D2 L1, L2. |
Время работы, сек | ||||
S1 |
D1 |
D2 |
S1 |
D1 |
D2 | ||||
1 |
1, 2, 3, 4, 5 |
5 |
6 |
3 |
6 |
6, 7, 0, 1, 2 |
6 |
6 |
4 |
2 |
2, 3, 4, 5, 6 |
6 |
7 |
4 |
7 |
7, 0, 1, 2, 3 |
7 |
7 |
5 |
3 |
3, 4, 5, 6, 7 |
7 |
6 |
5 |
8 |
0 ,1 ,2 ,3, 4 |
8 |
6 |
6 |
4 |
4, 5, 6, 7, 0 |
8 |
5 |
6 |
9 |
1, 3, 5, 7, 0 |
9 |
5 |
7 |
5 |
5, 6, 7, 0, 1 |
9 |
7 |
7 |
10 |
2, 4, 6, 0, 1 |
10 |
6 |
3 |
Разработайте программу, включающую и выключающую оборудование на заданное время, согласно варианту задания из таблицы 3.1.
Отладка программы.Оставьте только первый вызов подпрограммыTimer, установив аргументW=2. Остальные вызовы выключите, напечатав перед инструкциейCallсимвол «;». Установите значения для счетчиковSch_inиSch_outравные 2. Введите разработанную программу в микроконтроллер. Создайте окно наблюдения. После отладки программы в пошаговом режиме, установите первоначальные значения аргументаW, счетчиковSch_inиSch_outи запустите ее в автоматическом режиме. Рассчитайте значениеW для заданного времени работы оборудования по варианту методом пропорций. Для уточнения времени задержки можно добавить в циклы дополнительные бесполезные инструкцииNOP, которые ничего не делают, но требуют время на свое выполнение.
Т а б л и ц а 3.2– Результаты настройки циклов задержки
-
Вариант
Оборудование
Параметры подпрограммы Timer
Время работы, сек
Значение счетчиков
Sch_in
Sch_out
Sch3
S1
D1, D2, L1
D2, L1
Внимание! Обязательно сохраните подпрограммуTimerв моих документах, поскольку в следующих работах она будет применяться.
Результаты занесите в таблицу 3.2. Продемонстрируйте работу программы преподавателю.
Контрольные вопросы
Почему создан третий цикл в подпрограмме Timer?
Назначение подпрограмм.
Цикл, вложенный цикл.
Что такое машинный цикл?
Сколько машинных циклов выполняется каждая команда в Timer?
Почему в Timerвыбраны указанные значенияSch_inиSch_out?
Как вызывается подпрограмма на выполнение?
Опишите работу инструкции DECF Sch_out, F.
Приведите формулу для расчета времени задержки.
Как разделяются главная программа и подпрограммы?
Какими операторами начинается и заканчивается подпрограмма?
Как выполняется отладка подпрограммы Timer?
Что является аргументом для подпрограммы Timer?
Почему в Timerприменено два вложенных цикла?