Порядок виконання роботи. 1. Ознайомитися з інтерфейсом і особливостями організації інтегрованого середовища розроблення MPLAB IDE
1. Ознайомитися з інтерфейсом і особливостями організації інтегрованого середовища розроблення MPLAB IDE.
2. Ознайомитися з принциповою схемою системи керування ЕП лабораторної установки для дослідження кранового електропривода постійного струму.
3. Використовуючи персональну ЕОМ з програмним пакетом MPLAB IDE, скласти програму для мікроконтролера системи керування крановим електроприводом і виконати симуляцію та компіляцію.
4. Оформити звіт.
Текст програми для роботи системи керування, побудованої на базі мікроконтролера PІС16F877:
#include <P16F877.inc>
;опис констант і змінних користувача
MAX_COUNT_STEP equ D'14' ;максимальне значення лічильника
MIN_COUNT_STEP equ D'6' ;мінімальне значення лічильника
DREB equ D'10' ;пауза для усунення
;«брязкоту» контактів кнопок
PAUSE equ D'150' ;пауза
COUNT_STEP_UP_KEY equ D'20' ;лічильник натискань кнопки
;«Уперед»
COUNT_STEP_DOWN_KEY equ H'21' ;лічильник натискань кнопки
;«Назад»
COUNT_STEP equ H'22' ;опис змінних
BIT_NER equ H'23' ;опис змінних
JZ macro LBL ;завдання макрокоманди для
;переходу за міткою LBL у разі
;отримання нульового результату
;операції
btfsc STATUS,Z ;перевірка прапорця нульового
;результату
goto LBL ;
endm ;директива завершення макросу
ORG 0 ;основна точка входу в програму
goto START ;перехід до підпрограми START
OUTPUT addwf PCL,F ;підпрограма формування адреси
;елемента таблиці слів керування
retlw B'00000000' ;елементи таблиці
retlw B'00000000' ;слів керування
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
retlw B'00011111'
retlw B'00001111'
retlw B'00000111'
retlw B'00000011'
retlw B'00000000'
retlw B'00100001'
retlw B'00100101'
retlw B'00101101'
retlw B'00111101'
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
START bsf STATUS,RP0 ;вибір банку 1
clrf TRISB ;очищення регістра TRISB
bsf OPTION_REG,NOT_RBPU; відключення підтягувальних резисторів
;на лініях порту PORTB
clrf PORTB ;очищення вмісту вхідної засувки PORTB
bcf STATUS,RP0 ;повернення до банку 0
clrf PORTA ;запис очищення порту А
movlw D'10' ;запис через акумулятор кількості
movwf COUNT_STEP ;значень для лічильника натискань кнопки
START0 btfsc PORTA,1 ;перевірка стану лінії 1 PORTА (кнопка
; «Уперед»)
goto ASDF ;перехід за міткою ASDF
call STEP_UP_KEY ;виклик підпрограми оброблення натискання
;кнопки «Уперед»
goto NEXT ;перехід за міткою NEXT
ASDF btfsc PORTA,2 ;перевірка лінії 2 PORTА (кнопка
;«Назад»)
goto IN_ZERO_COUNT ;перехід за міткою IN_ZERO_COUNT
call STEP_DOWN_KEY ;виклик підпрограми оброблення натискання
;кнопки «Назад»
goto NEXT
IN_ZERO_COUNT clrf COUNT_STEP_UP_KEY
clrf COUNT_STEP_DOWN_KEY
NEXT call SET_STEP
nop ;порожня операція
nop
nop
nop
nop
goto START0 ;перехід за міткою START0 (початкова
;ініціалізація портів)
STEP_UP_KEY incf COUNT_STEP_UP_KEY,f ;збільшення значення
;лічильника в регістрі COUNT_STEP_UP_KEY на одиницю (кнопка
;«Уперед» натиснута один раз)
movfw COUNT_STEP_UP_KEY ;читання значення лічильника в акумулятор
sublw DREB,0 ;захист від «брязкоту» контактів кнопки
JZ INC_STEP ;якщо результат нульовий, перехід за міткою
;INC_STEP для переходу на пусковий ступінь
movfw COUNT_STEP_UP_KEY ;інакше – записати до
sublw PAUSE ;
JZ IN_ZERO_STUPKEY
goto END_STU
IN_ZERO_STUPKEY clrf COUNT_STEP_UP_KEY
goto END_STU
INC_STEP movfw COUNT_STEP
sublw MAX_COUNT_STEP
JZ END_STU
incf COUNT_STEP,f
END_STU return
STEP_DOWN_KEY incf COUNT_STEP_DOWN_KEY,f ;оброблення
;натиснення кнопки «Назад»
movfw COUNT_STEP_DOWN_KEY ;зчитати значення лічильника в W
sublw DREB ;захист від «брязкоту» контактів кнопки
JZ DEC_STEP ;
movfw COUNT_STEP_DOWN_KEY
sublw PAUSE
JZ IN_ZERO_STDOKEY
goto END_STD
IN_ZERO_STDOKEY clrf COUNT_STEP_DOWN_KEY
goto END_STD
DEC_STEP movfw COUNT_STEP
sublw MIN_COUNT_STEP
JZ END_STD
decf COUNT_STEP,f
END_STD return
SET_STEP movfw COUNT_STEP
sublw D'8'
JZ BIT_STOP
мovfw COUNT_STEP
sublw D'12'
JZ BIT_STOP
movfw COUNT_STEP
sublw D'7'
JZ BIT_STOP_NO
movfw COUNT_STEP
sublw D'13'
JZ BIT_STOP_NO
sublw D'10'
JZ BIT_STOP_NO
BIT_STOP_NO bcf BIT_NER,0
goto END_STEP
BIT_STOP bsf BIT_NER,0
END_STEP movfw COUNT_STEP
call OUTPUT ;виклик підпрограми OUTPUT
;(пересилання слова керування до порту
movwf PORTB ;PORTB
btfsc BIT_NER,0 ;перевірка біта 0 порту PORTB, якщо не
bsf PORTB,7 ;нуль, то встановлення лінії 7 в «1»
return ;повернення з підпрограми
END ;кінець програми