Stop CLRF portc; останов работы окрасочной камеры. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Stop CLRF portc; останов работы окрасочной камеры.



END; конец текста всей программы.

Разработайте программу, автоматизации окрасочной камеры, согласно варианту задания из таблицы 6.1.

Т а б л и ц а 6.1 – Варианты заданий

Вариант Биты подключения S1, D1, D2 L1, L2. Кнопка Pusk Кнопка Stop Вариант Биты подключения S1, D1, D2 L1, L2. Кнопка Pusk Кнопка Stop
  1, 2, 3, 4, 5 1или 2 5 или 6   6, 7, 0, 1, 2 6 или 7 9 или 0
  2, 3, 4, 5, 6 2 или 3 6 или 7   7, 0, 1, 2, 3 7 или 8 3 или 4
  3, 4, 5, 6, 7 3 или 4 7 или 8   0,1,2,3, 4 8 или 6 4 или 2
  4, 5, 6, 7, 0 4 или 2 6 или 8   1, 3, 5, 7, 0 9 или 0 2 или 3
  5, 6, 7, 0, 1 5 или 6 1или 2   2, 4, 6, 0, 1 0 или 9 7 или 6

Время работы S1, D1, D2, L1 и L2 и биты их подключения к PORTC принять как в лабораторной работе «Подпрограммы».

Продемонстрируйте работу программы преподавателю.

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

1. Расскажите, какую реальную задачу решает ваша программа

2. Назначение клавиатуры.

3. Зачем разряды PORTD настраивают на ввод и на вывод?

4. Как инициализируется PORTD?

5. Как проверяется нажатие кнопки клавиатуры?

6. Почему каждая кнопка клавиатуры не имеет отдельной клеммы?

7. Что выполняет инструкция BTFSS PORTD, 2?

8. Что выполняет инструкция BTFSC PORTD, 2?

9. Как подключить кнопки «1» и «5» параллельно?

10. Как подключить кнопки «4» и «5» параллельно?

11. Что записано в файле p16F877.inc?

12. Назначение сигнализации в программе.

13. Можно ли кнопку Stop разместить вне подпрограммы Timer.

 

7 Лабораторная работа №7. Автоматизация упаковки

 

Цель работы: Разработка программы автоматизации упаковочной машины. Генерация звука сирены.

Задание на автоматизациюупаковочной машины. При подаче напряжения на установку включить лампочку L2 на пульт оператора и предупреждающую звуковую сигнализацию S1. Через 2 секунды выключить сигнализацию S1 и включить конвейер D1. По конвейеру движутся изоляторы, фотодатчик фиксирует попадание изолятора в коробку. После попадания двух изоляторов включить лампочку L1. После попадания четырех изоляторов включить на две секунды упаковочный механизм D2, заменяющий полную коробку пустой коробкой. Количество упакованных коробок должно быть пересчитано. Лазерные датчики имитировать кнопками K5 и K6 клавиатуры.

Рисунок 7.1 – Временная диаграмма работы упаковщика


Т а б л и ц а 7.1 – Назначение битов PORTC и контактов клавиатуры

Регистр PORTC Кнопки клавиатуры Действия кнопок
0 разряд - предупреждающая звуковая сигнализация S1 5 или 6 Фотодатчики
1 разряд – двигатель конвейера D1    
2 разряд – двигатель D2 упаковочного механизма    
3 разряд – световая сигнализация L1    
7 разряд – световая сигнализация работы L2 на пульт    

 

Т а б л и ц а 7.2 – Варианты заданий

Вариант Биты подключения оборудования S1, D1, D2, L1, L2. Вариант Биты подключения оборудования S1, D1, D2, L1, L2.
  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

 

Рисунок 7.2 – Окно наблюдения

В приведенной программе отсутствует кнопка Stop, поскольку она при таком алгоритме не будет срабатывать.

Отладка программы. При работе в пошаговом режиме ограничьте работу подпрограммы Timer, оставив только одну действующую команду, как показано в тесте программы. После отладки программы соедините нулевой бит PORTC с сиреной. Звучание сирены образуется благодаря быстрому инвертированию этого бита.

На рисунке 7.2 показано окно наблюдения.

Варианты заданий принять из таблицы 7.2.

Фрагменты программы.

include<p16F877.inc>; ниже имена некоторых РОН опущены.

KOL_IZOL EQU h'45'; регистр, для записи количества изоляторов.

KOL_KOROB EQU h'46'; регистр, для хранения количества коробок.

Inver_Bit EQU H'47'; регистр, определяющий инвертируемый бит.

_PORTC EQU H'48'; регистр, для хранения состояния PORTC.

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

CLRF KOL_KOROB

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

MOVLW B'10000001'

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

; команды для включения сирены.

MOVLW b'00000001';задаем биты для инвертирования.

MOVWF Inver_Bit; определяем биты для инвертирования.

MOVF PORTC, W

MOVWF _PORTC; запоминаем состояние PORTC

MOVLW d'40'; W задает время работы сирены. При отладке d’2’.

CALL Timer

MOVF _PORTC, W

MOVWF PORTC; восстанавливаем состояние PORTC

CLRF Inver_Bit; запрещаем звучание сирены.

BCF PORTC, 0; выключаем питание сирены S1.

MOVLW B'10000010'

M1 MOVWF PORTC; включаем транспортер D1, L2 продолжает работать.

CLRF KOL_IZOL

Prov_dat

BTFSS PORTD, 2; проверяем срабатывание датчиков (кнопки "5" и "6")

GOTO Prov_dat

movlw D'10'

Call Timer; убираем дребезг контактов.

INCF KOL_IZOL, F; фиксируем поступление изолятора в коробку.

MOVLW D'2';

XORWF KOL_IZOL, W; поступило два изолятора?

BTFSC STATUS, Z; проверяем Z = 0?

BSF PORTC, 3; при Z=1, включаем лампочку L1

MOVLW D'4'; будем проверять поступление четырех изоляторов.

SUBWF KOL_IZOL, W; w=KOL_IZOL-4.

BTFSS STATUS, Z; проверяем Z = 1? (поступили четыре изолятора?)

GOTO Prov_dat; Z=0, повторяем проверку срабатывания датчика.

MOVLW b'10000110'; только при Z=1, надо заменить коробку (включить D2) и выключить L1.

MOVWF PORTC; пересылаем информацию в PORTC

INCF KOL_KOROB, F; фиксируем заполнение очередной коробки.

MOVLW d'50'; время смены коробок.

CALL Timer

MOVLW b'10000010'; готовимся выключить D2.

GOTO M1;

GOTO$

Timer; Подпрограмма Timer

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

;RETURN; для наладки.

M3 MOVLW D'150'

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

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

; инструкции для сирены и мигания

MOVLW b'00000000'; предполагаем, что сирены не будет.

MOVF Inver_Bit, F; проверка регистра на ноль.

BTFSS STATUS, Z; Z=1?

MOVF Inver_Bit, W; только при Z=0, будем инвертировать бит для S1.

XORWF PORTC, F; маской инвертируем бит в PORTC.

MOVLW D'255';

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

M_in; Метка внутреннего счетчика. Далее инструкции Timer опущены.

RETURN; конец подпрограммы.

END; конец текста всей программы.

Покажите работу программы преподавателю.

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

1. Что является аргументом при вызове подпрограммы Timer.

2. Назначение символа «;» в тексте программы?

3. Порядок отладки программы.

4. Что имитируют кнопки клавиатуры?

5. Как устраняется дребезг контактов?

6. Что такое паразитные наводки?

7. Почему нельзя поместить кнопку Stop подпрограмму Timer?

8. Как имитируется работа аварийных датчиков?

9. Как определяется количество изоляторов равное двум?

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

11. Как фиксируется заполнение коробки?

 

8 Лабораторная работа №8. Перевод чисел из 2-й в 2_10 систему.

Цель работы: научиться переводить числа из двоичной системы в двоично-десятичную систему, создание подпрограмм, возвращающих значение в вызвавшую программу.

Как правило, всегда выполняется индикация состояния технологического процесса на пульт оператора в цифровом или символьном виде. Простейший индикатор цифр имеет семь сегментов. Чтобы вывести числа из МК на такой индикатор их необходимо представить в двоично-десятичной системе счислений. В этой системе в одном регистре могут поместиться две десятичные цифры, каждая из которых будет занимать половину байта. От 00000000 до 00001001 в двоичной системе. Таким образом, в регистр можно записать две десятичные цифры и получить числа от 00 до 99.

Блок-схема алгоритма перевода частично приведена на рисунке 8.1.

Подпрограммы, которые мы применяли раньше, имели тип void, т.е. не возвращали никаких значений в вызвавшую их программу. Напишем подпрограмму, результатом работы которой будет передача однобайтного значения в вызвавшую программу. Эта подпрограмма обычно используется совместно с цифровым индикатором. Большинство таких индикаторов работают по прин­ципу выборочного включения требуемых сегментов, как показано на рис. 8.2. Цифрами обозначены разряды порта передающего информацию. Обычно эти сегменты представляют собой светодиоды или электроды элементов на жидких кристаллах.

Рис.8.2-сегментный индикатор

Системное представление нашей подпрограммы приведено на рисунке 8.2а. Входным сигналом в данном случае является 4-битный двоичный код, находя­щийся в рабочем регистре. Выходным значением, также возвращаемым в W, является соответствующий 7-сегментный код, необходимый для отображения соответству­ющей цифры (подпрограмма Vyb_Seg). В микро­контроллерах PIC гарвардская архитектура делает не­возможным использование значений памяти программ в виде данных. Вместо этого таблицы преобра­зования реализуются в виде наборов команд retlw, каждая из которых возвра­щает однобайтную константу, см. подпрограмму Vybor_Seg. Седьмой бит используется для точки.

Подпрограмма Vybor_Seg осуществляет выбор­ку строки таблицы, прибавляя число N, передаваемое через рабочий регистр, к младшему байту счетчика команд (регистр PCL, расположенный по адресу h'02'). Поскольку PCL уже указывает на 1-ю команду retlw с кодом для цифры «0», то после прибавления N он будет указывать на N-ную команду, что нам и требуется.

Фрагменты программы. Применяемые символьные имена регистров показаны на рисунке 8.3. Стандартные инструкции настройки МК опущены.

MOVLW b'11101011'; исходное число

MOVWF CHISLO

MOVWF Rab_Reg

; подсчитываем количество сотен

MOVLW D'100'

MOVWF VYCH; вычитаемое для сотен.

M_SOT INCF K_SOT, F;

SUBWF Rab_Reg, F; Rab_Reg= Rab_Reg-100

BTFSC STATUS, C; разность отрицательна (С=0)?

GOTO M_SOT; цикл подсчета количества сотен

ADDWF Rab_Reg, F; был заем, выполняем возврат назад на один шаг.

DECF K_SOT, F; восстанавливаем количество сотен

MOVLW D'10'

MOVWF VYCH; вычитаемое для определения десятков.

Подсчитываем количество десятков аналогично сотням. Напишите самостоятельно.

; запоминаем количество единиц.

MOVFW Rab_Reg; рабочий регистр содержит единицы после возврата.

MOVWF K_ED; переписываем количество единиц в регистр

SWAPF K_DES, W; перемещаем десятки в старшие разряды

ADDWF K_ED, W; добавляем количество единиц в младшие разряды

MOVWF R_D_ED; регистр теперь содержит десятки и единицы.

MOVF K_ED, W

CALL VYBOR_SEG; вызываем подпрограмму с аргументом W.

MOVWF Kod_seg_ed; записываем возвращенный код цифры

; аналогично найдите коды для десятков и сотен.

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

VYBOR_SEG; подпрограмма, возвращающая код для включения сегментов.

addwf PCL, f; Прибавим W к PCL, получая PCL + W

retlw b'00111111'; код для цифры 0. Возвращается при W=0.

retlw b'00000110'; код для цифры 1. Возвращается при W=1.

retlw b'10101101'; код для цифры 2. Возвращается при W=2.

retlw b'01001111'; код для цифры 3. Возвращается при W=3.

retlw b'01100110'; код для цифры 4. Возвращается при W=4.

retlw b'01101101'; код для цифры 5. Возвращается при W=5.

retlw b'01111101'; код для цифры 6.Возвращается при W=6.

retlw b'00000111'; код для цифры 7.Возвращается при W=7.

retlw b'01111111'; код для цифры 8.Возвращается при W=8.

retlw b'01101111'; код для цифры 8.Возвращается при W= 8.

END

 

Переведите двоичное число в двоично-десятичное число и определите коды сотен, десятков и единиц.

Т а б л и ц а 8.1 – Варианты заданий двоичного числа

Вариант Число Вариант Число
       
       
       
       
       

 

Рисунок 8.3 – Окно наблюдения

Из рисунка 8.3 видно, что заданное двоичное число содержит 2 сотни, 3 десятка и 5 единиц, то есть равно 235.

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

1. Назначение 2-10 системы счисления.

2. Сколько бит занимает 2-10 число?

3. Какое максимальное 2-10 число можно записать в регистр?

4. Как формируются цифры в индикаторе?

5. Назначение команды addwf PCL, f?

6. Что вернется в вызывающую программу, если при вызове w=h’06’?

7. С какой целью в программе применена команда Swap?

8. Объясните алгоритм нахождения сотен.

9. Какое назначение регистра R_D_ED?

10. Как определяется, что получилась отрицательная разность?

11. Как определяется, что получился нулевой результат?

12. Назначение регистра PCL?



Поделиться:


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

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