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

6. Лабораторная работа №6. Программирование клавиатуры

Цель работы: создание программ с вводом данных клавиатурой.

Клавиатура используется в реальных программах для ввода данных, инструкций, для изменения алгоритма вычислений. В лабораторной работе с клавиатуры будем подавать сигнал ’1’ в PORTD, без применения дополнительного источника питания. Сигнал будет обработан микропроцессором и будут внесены изменения в работу программы.

Роль кнопок клавиатуры в программе и их расположение.

“5” - Кнопка Pusk1 на пульте;

“6” - Кнопка Pusk2 по месту;

“Shift”- КнопкаStop1 на пульте;

“9” - Кнопка Stop2по месту.

К биту 1 PORTD подключена кнопкаK1, к биту 7 кнопкаK7.

Кнопки имитируют реальное оборудование.

Рисунок 6.1 – Схема клавиатуры

Изучите схему пленочной клавиатуры (рисунок 6.1). Такая схема продиктована тем, что все кнопки подключаются к одному регистру.

Рисунок 6.2 – Монтажная схема подключения кнопки «1»

На рисунке 6.2 приведена, в качестве примера, монтажная схема подключения кнопки с цифрой «1» к PORTD. РазрядыRD7,RD6,RD5,RD4 предназначены для подачи сигнала «1». Остальные для приема сигнала. В разрядеRD0 по заводской схеме всегда записана «1». Одна клемма кнопки «1» подключена к выводуRD7, а вторая клемма кнопки подключена к выводуRD3. БитRD7 должен быть запрограммирован на вывод, а битRD3 - на ввод.

Задание на проектирование. Создать программу автоматизации окрасочной камеры по лабораторной работе «Подпрограммы», изменив её. Предусмотреть запуск камеры для окрашивания каждой детали кнопками «Пуск» и останов камеры кнопками «Стоп» по месту и с пульта оператора.

Дребезг контактов клавиатуры убирается включением подпрограммы Timer. КнопкаStopв данной программе находится в подпрограммеTimer. Выключение оборудования кнопкой здесь возможно, потому что при выполнении программы, МК практически все время находится во внутреннем цикле подпрограммыTimer. При других алгоритмах такой вариант выключения невозможен, необходимо предусмотреть прерывание.

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

Добавленные команды по сравнению с лабораторной работой с таймером, выделены курсивом.

; ниже инструкции для настройки PORTD.

CLRF TRISC

MOVLW b'00001111'

MOVWF TRISD; настраиваем PORTD: биты 0-3 на ввод, 4-7 на ввод.

BCF STATUS, 5

CLRFPORTC

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

MOVLW B'11110000'

MOVWF PORTD; подаем питание на выводы клавиатуры.

MOVLW B'10000000'

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

Sled_det BTFSS PORTD, 2; проверяем нажатие кнопок Pusk1 и Pusk2..

GOTO Sled_det; если кнопка еще не нажата, повторяем проверку.

BSFPORTC, 0; включаем звуковую предупреждающую сигнализацию.

MOVLW d'40'; задаем время работы сигнализации S1.

CALL Timer

MOVLW B'10001110'

MOVWF PORTC; включаем двигатели D1 и D2, сигнализацию L1.

MOVLW d'60'; задаем время работы D1.

CALL Timer

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

MOVLW d'20'; задаем время работы вентилятора и L1.

CALL Timer

MOVLWB'10000000'

MOVWFPORTC; выключаем вентиляторD2 и сигнализациюL1.

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

CALLTimer

GOTO Sled_det; на метку Sled_det для нового запуска установки.

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

Timer; в подпрограмме показан только внутренний цикл с кнопкамиStop.

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

BTFSC PORTD, 1; проверяем нажатие кнопки Stop1 или Stop2.

GOTO Stop; если нажата, переход к инструкциям останова камеры.

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

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

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

. . . .

RETURN

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

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

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

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

Вариант

Биты подключения S1, D1, D2 L1, L2.

Кнопка Pusk

Кнопка Stop

Вариант

Биты подключения S1, D1, D2 L1, L2.

Кнопка Pusk

Кнопка Stop

1

1, 2, 3, 4, 5

1или 2

5 или 6

6

6, 7, 0, 1, 2

6 или 7

9 или 0

2

2, 3, 4, 5, 6

2 или 3

6 или 7

7

7, 0, 1, 2, 3

7 или 8

3 или 4

3

3, 4, 5, 6, 7

3 или 4

7 или 8

8

0 ,1 ,2 ,3, 4

8 или 6

4 или 2

4

4, 5, 6, 7, 0

4 или 2

6 или 8

9

1, 3, 5, 7, 0

9 или 0

2 или 3

5

5, 6, 7, 0, 1

5 или 6

1или 2

10

2, 4, 6, 0, 1

0 или 9

7 или 6

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

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

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

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

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

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

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

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

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

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

  8. Что выполняет инструкция BTFSCPORTD, 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

1, 2, 3, 4, 5

6

6, 7, 0, 1, 2

2

2, 3, 4, 5, 6

7

7, 0, 1, 2, 3

3

3, 4, 5, 6, 7

8

0 ,1 ,2 ,3, 4

4

4, 5, 6, 7, 0

9

1, 3, 5, 7, 0

5

5, 6, 7, 0, 1

10

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'

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

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. Как фиксируется заполнение коробки?