logo
МУ ЦТ и МК для стенда 2013

10.2 Исходные данные

В таблице 10.1 показано назначение битов PORTCи клавиатуры.

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

Регистр PORTC

Кнопки клавиатуры

Действия кнопок

0 разряд - предупреждающая звуковая сигнализация S1

5 или 6

Фотодатчики

1 разряд – двигатель конвейера D1

2 разряд – двигатель D2 упаковочного механизма

3 разряд – световая сигнализация L1

7 разряд – световая сигнализация работы L2 на пульт

Блок – схема программы для упаковочной машины приведена на рисунке 10.1.

Рисунок 10.1 – Блок-схема

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

include<p16F877.inc>

Sch_in EQU H'22'; счетчик внутреннего цикла задержки.

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

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

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

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

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

MOVLW b'00001111'

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

BCF STATUS, 5

MOVLW b'11110000'

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

CLRF PORTC; очищаем PORTC от мусора.

CLRF KOL_KOROB

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

MOVLW B'10000001'

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

MOVLW d'60'; время работы предупредительной сирены.

CALL Timer

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

BSF PORTC, 1; включаем транспортер D1.

M1 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; W=KOL_IZOL XOR B'00000010'.

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; проверяем разность KOL_IZOL-4=0?

GOTO Prov_dat; выполняется только при Z=0.

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

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

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

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

CALL Timer

BCF PORTC, 2; выключаем механизм замены коробок.

GOTO M1; начинаем заполнение новой коробки.

GOTO$

Timer; Подпрограмма Timer. Приведены только три строки.

MOVWF Sch3

; RETURN; включить команду при отладке программы в режиме F7.

M3 MOVLW D'150' . . .

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

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

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