Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Приклад програмування реального процесу



Задача:

У ході технологічного процесу на конвейєрі, вироби автоматично упаковуються в коробки. В одній коробці міститься 500 виробів. Потрібно кожні:

1) 120мкс подавати сигнали на завантаження в коробку одного виробу (момент відвантаження перехід 1->0);

2) По закінченні завантаження коробки здійснити подачу сигналу на упакування коробки і переміщення її далі по конвейєру (перехід 1->0);

3) Зробити паузу на час подачі наступної коробки (не менш 2с), після чого продовжити завантаження.

Постановка задачі програмування:

Для рахунку числа виробів потрібно програмний лічильник розрядністю не менше 9 біт (511 значень). Для формування тимчасових інтервалів використовуємо лічильник/таймер 0. Дані часового інтервалу дозволяють використовувати лічильник/таймер у режимі 2 як таймер. Після установки прапорця переповнення таймера зовнішній вихід повинний перейти зі стану «1» у стан «0». Для управління процесом відвантаження виробу використовуємо вихід Р1.0. Коли лічильник дорахує до 500, то рахунок по таймеру 0 припиняється, подається сигнал на переміщення по конвеєру (Р1.1). За допомогою лічильника/таймера 1 виконується затримка на 2 с. Так максимальний коефіцієнт рахунку в режимі 1 дорівнює 0FFFFH, то час переповнення рівний 0.065536с, тому потрібно виконати повний цикл прорахунку 31 раз, що складає 2.032с. Після продовжити видачу імпульсів на вході Р0.0.

 

Рисунок 5.1 Загальний алгоритм роботи програми

 

Рисунок 5.2 Алгоритм роботи обробника переривань

 

Програма:

NAME Real_process

LOAD EQU 90H ; Опис символьних імен, що підставляються

NEXT_BOX EQU 91h

PROG SEGMENT CODE ;Опису сегментів

STACK SEGMENT IDATA

FLAGS SEGMENT BIT

RSEG STACK ; Сегмент стека

DS 10H

RSEG FLAGS ; Сегмент прапорців

COUNT_H: DBIT 1 ; Старший розряд лічильника циклів

END_LOAD: DBIT 1 ; Прапор кінця циклу завантаження

CSEG AT 0 ; Код початку програми

USING 0

JMP START

CSEG AT 0BH ; Код оброблювача переривання таймера 0

USING 1 ; Використовуємо банк регістрів 1

SETB RS0 ; Переключення банку

CLR LOAD ; Подаємо імпульс на завантаження виробу

MOV R1,A ; Зберігаємо вміст А

MOV A, R0 ; У R0 молодший байт лічильника циклів

JB COUNT_H, LAB1 ; Перехід, якщо в старшому розряді лічильника 1

ADD A,#1 ; Інкремент акумулятора

JNC LAB2 ; Перехід, якщо немає переповнення

SETB COUNT_H ; Установка старшого розряду лічильника

SJMP LAB2 ; Перехід на завершення оброблювача

LAB1:

INC A; Інкремент А

CJNE A,#0F4H, LAB2 ; Перехід, якщо молодший байт ;лічильника не дорівнює 0f4H (500 – це 1F4H)

CLR COUNT_H ; Очищення старшого розряду лічильника

CLR A ;Очищення акумулятора

SETBEND_LOAD ;Установка прапорця кінця циклу завантаження

LAB2:

MOV R0, A; Збереження нового значення лічильника

MOV A, R1; Відновлення А після переривання

CLR RS0 ; Переключення на банк регістрів 0

RETI; Повернення з обробки переривання

;*************** Основна програма ***********************

RSEG PROG

START: MOV SP,#STACK-1

CLR COUNT_H ; Початкова ініціалізація перемінних

CLR END_LOAD

MOV 08H,A ; Занесення в регістр R0 банка 1 нуля

MOV TMOD, #12H ; Програмування режимів таймерів 0-режим 2, 1- ; режим 1

MOV IE, #82H ; Дозвіл переривань по таймері 0

LAB3:

MOV TH0, #135 ; Ініціалізація рахункових регістрів таймера 0

MOV TL0, #135

MOV TCON, #10H ; Запуск таймера 0

LAB4:

SETB LOAD ; Установка виходу Р1.0 у «1»

JNB END_LOAD, LAB4 ; Якщо END_LOAD дорівнює «0», то перехід ;на мітку lab4

CLR END_LOAD ; Очищення прапорця кінця циклу

MOV TCON, #0 ; Відключення таймерів

CLR NEXT_BOX ; Подача сигналу на переміщення коробки

MOV TH1,#0 ; Ініціалізація рахункового регістра таймера 1

MOV TL1,#0

MOV TCON,#40H ; Включення таймера 1

CLR A; В А лічильник числа переповнень таймера 1

LAB5:

JNB TF1, LAB5 ; Чекання встановлення прапорця таймера 1

CLR TF1 ; Очищення прапорця таймера 1

INC A ; інкремент А

CJNE A, #31, LAB5 ; Для досягнення часу рівного 2з число ; проходів рівно 31

SETB NEXT_BOX ; Повернення виходу переміщення коробки в стан «1»

MOV TCON,#0 ; Вимикання таймера

SJMP LAB3 ; Повторення технологічного циклу

END

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.