Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Прог ЦТ лабы для БАУ 2011.doc
Скачиваний:
18
Добавлен:
01.05.2015
Размер:
2.99 Mб
Скачать

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. Продемонстрируйте работу программы преподавателю.

Контрольные вопросы

  1. Почему создан третий цикл в подпрограмме Timer?

  2. Назначение подпрограмм.

  3. Цикл, вложенный цикл.

  4. Что такое машинный цикл?

  5. Сколько машинных циклов выполняется каждая команда в Timer?

  6. Почему в Timerвыбраны указанные значенияSch_inиSch_out?

  7. Как вызывается подпрограмма на выполнение?

  8. Опишите работу инструкции DECF Sch_out, F.

  9. Приведите формулу для расчета времени задержки.

  10. Как разделяются главная программа и подпрограммы?

  11. Какими операторами начинается и заканчивается подпрограмма?

  12. Как выполняется отладка подпрограммы Timer?

  13. Что является аргументом для подпрограммы Timer?

  14. Почему в Timerприменено два вложенных цикла?