Лабораторная работа №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_in EQU H'22'; адрес счетчика внутреннего цикла задержки.

Sch_out EQU H'24'; адрес счетчика внешнего цикла задержки.

Sch3 EQU H'23'; адрес счетчика третьего цикла задержки.

; инструкции стандартной настройки МК опущены.

; рабочая часть программы.

MOVLW B'10000000'

MOVWF PORTC; включаем сигнализацию L2 на пульт оператора.

Sled_det BSF PORTC, 0; включаем звуковую сигнализацию S1.

MOVLW d’40’; аргумент W задает время таймера. При отладке d’2’.

CALL Timer

MOVLW B'10001110'

MOVWF PORTC; выключаем S1, включаем D1, D2 и L1.

MOVLW d’60’; задаем время окраски.

CALL Timer

BCF PORTC, 2; выключаем D1, продолжают работать D2, L1 и L2.

MOVLW d’40’; задаем время работы D2 и L1.

CALL Timer

MOVLW B'10000000'

MOVWF PORTC; окраска закончена, сигнализация на пульте L2 работает.

MOVLW d’20’; задаем время для замены заготовки.

CALL Timer

GOTO Sled_det; переход на метку Sled_det для включения камеры.

GOTO $; разделитель основной программы и подпрограмм.

Timer; подпрограмма Timer. Применено два вложенных цикла.

MOVWF Sch3; значение W является аргументом для таймера.

M3 MOVLW D'150'

MOVWF Sch_out; устанавливаем значение внешнего счетчика.

M_out; метка внешнего счетчика.

MOVLW D’255';

MOVWF Sch_in; устанавливаем значение внутреннего счетчика.

M_in; метка внутреннего счетчика.

DECF Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

BTFSS STATUS, Z; если оно равно нулю (Z=1), пропускаем GOTO.

GOTO M_in; срабатывает только при Z=0.

DECF Sch_out, F; уменьшаем значение счетчика Sch_out на 1,

BTFSS STATUS, Z; если оно равно нулю (Z=1), пропускаем GOTO.

GOTO M_out; срабатывает только при Z=0.

DECF Sch3, F; уменьшаем значение счетчика Sch3 на 1,

BTFSS STATUS, 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, 2, 3, 4, 5         6, 7, 0, 1, 2      
  2, 3, 4, 5, 6         7, 0, 1, 2, 3      
  3, 4, 5, 6, 7         0,1,2,3, 4      
  4, 5, 6, 7, 0         1, 3, 5, 7, 0      
  5, 6, 7, 0, 1         2, 4, 6, 0, 1      

Разработайте программу, включающую и выключающую оборудование на заданное время, согласно варианту задания из таблицы 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 применено два вложенных цикла?

 



Поделиться:


Последнее изменение этой страницы: 2017-01-28; просмотров: 149; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.30.253 (0.013 с.)