
- •6.091400 -“Системи управління і автоматики”
- •Вступ 4
- •1 Загальні положення
- •1.1 Мета і задачі курсового проекту
- •Основні етапи виконання курсового проекту
- •Оформлення пояснювальної записки
- •2.1 Загальні вимоги
- •2.2 Шифр курсового проекту
- •2.3 Виклад тексту записки
- •2.4 Нумерація розділів, підрозділів, пунктів, підпунктів
- •2.5 Нумерація листів і сторінок
- •2.6 Оформлення ілюстрацій і таблиць
- •2.7 Посилання та перелік посилань
- •2.8 Оформлення алгоритмів обробки даних
- •3 Вказівки до виконання завдань курсового проекту
- •3.1 Вказівки до виконання завдань Перед виконанням завдання №1 слід опрацювати наступні питання:
- •Внутрішня структура й склад регістрів процесора к1816ве51;
- •3.2 Варіанти завдань на курсовий проект
- •Завдання
- •Каледарний план
- •Керівник ____________________ ______________________
- •39614. М. Кременчук, вул.. Першотравнева, 20
3 Вказівки до виконання завдань курсового проекту
3.1 Вказівки до виконання завдань Перед виконанням завдання №1 слід опрацювати наступні питання:
Внутрішня структура й склад регістрів процесора к1816ве51;
призначення кожного з регістрів;
розподіл пам'яті мікроконтролера;
команди передачі даних і арифметичні команди;
розгалуження та переходи.
Етапи створення прикладних програм на Асемблері:
1) скласти словесний опис процесу, яким необхідно управляти;
1.1) записати перелік дій;
1.2 ) в цей перелік добавити словесні умови виконання варіантів дій;
2) скласти загальний алгоритм роботи програми. В кожному прямокутнику ховається велика група команд;
3) провести аналіз отриманого алгоритму, скласти словесний опис тих дій, які криються за кожним графічним об'єктом;
4) шукаються схожі дії алгоритму або дії, які повторюються, також дії вкрай бажано виділять в окремі процедури;
5) якщо дії мають загальне ядро, але все таки відрізняються, то необхідно проаналізувати можливість поліморфізму за допомогою переданих даних або параметрів;
6) скласти уточнений загальний алгоритм програми і докладний алгоритм для кожної процедури. Слід прагнути тому, щоб під кожним графічним об'єктом ховалося якомога менше команд на Асемблері;
7) реалізація кожного графічного блоку алгоритму асемблерними командами з аналізом типів операндів і формату отриманого результату.
Перед виконанням завдання №2 слід опрацювати наступні питання:
які команди дозволяють використовувати стек?
як організувати стек в оперативній пам’яті?
поясніть порядок передавання параметрів рутинним програмам за допомогою стека. Команди виклику та повернення з рутинних програм.
декомпозиція задачі керування на окремі процедури;
організація переривань
паралельні порти вводу/виводу, структурні схеми портів;
робота з лічильниками/таймерами;
розрахунок коефіцієнтів лічильников/таймеров;
Для прикладу розв’язку завдання пропонуємо задачу:
В ході технологічного процесу на конвеєрі вироби автоматично упаковуються в коробки. В одній коробці міститься 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.
Рисунок 3.1 – Загальний алгоритм роботи програми
Рисунок 3.2 – Алгоритм роботи обробника переривань
Лістинг програми:
NAME Rеа1_ргосеss
LOAD ЕQU 90Н ; Опис символьних імен, що підставляються
NEXT_BOX ЕQU 91Н
PROG SEGMENT CODE ; Опис сегментів
STACK SEGMENT IDATA
FLAGS SEGMENT BIT
RSEG STACK ; Сегмент стека
DS 10H
RSEG FLAGS ; Сегмент прапорців
COUNT_H:DBIT1 ; Старший розряд лічильника циклів
END_LOAD: DBIT1 ; Прапорець кінця циклу завантаження
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 ;Перехід , якщо молодший байт лічильника ; не дорівнює 0f4Н (500-це 1 f4Н)
CLR COUNT_H ;Очищення старшого розряду лічильника
CLR A ; Очищення акумулятора
SETB END_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 дорівнює “1” , то ; мітку 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
Наступний приклад програми демонструє використання лічильника/таймера для синхронізації процесу в реальному часі. На входи Р0.0 і Р0.1 підходять зовнішні сигнали, а до виходів Р1.0 і Р1.1 підключені світлодіодні індикатори. Потрібно кожні 50 мкс перевіряти стан входів і якщо:
Р0.0 дорівнює «1», то увімкнути індикатор на виході Р1.0, інакше - вимкнути;
Р0.1 дорівнює «1» виключити індикатор на виході Р1.1, інакше вимкнути.
Лістинг програми:
NAME TIMER
PROG SEGMENT CODE ; оголошення сегмента коду
STACK SEGMENT IDATA ; оголошення сегмента стеку
RSEG STACK
DS 10H
CSEG AT 0
USING 0
JMP START
RSEG PROG
START:
MOV SP,#STACK-1 ;ініціалізація покажчика стека
MOV TMOD, #00000010B ;включення лічильника/таймера 0 у
;Режим 2
MOV TH0, #205 ;занесення дільника в регістр автозавантаження
MOV TL0, #205 ;занесення дільника в рахунковий регістр
MOV TCON, #00010000B ;включення лічильника/таймера 0
LAB1:
JNB TF0, LAB1 ;чекання переповнення лічильника /таймера 0
CLR TF0 ;очищення прапорця переповнення
JNB 80H, LAB2 ;якщо Р0.0 = 0 перехід на LAB2
SETB 90H ;установлення Р1.0 у «1»
SJMP LAB3 ;перехід на LAB3
LAB2:
CLR 90H ;установлення Р1.0 у «0»
LAB3:
JB 81H, LAB4 ;Якщо Р0.1 = «1» перехід на LAB4
SETB 91H ;установлення Р1.1 у «1»
SJMP LAB1 ;перехід на LAB1
LAB4:
CLR 91H ;установка Р1.0 у «0»
SJMP LAB1 ;перехід на LAB1
END