Порядок виконання роботи. 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 ;кінець програми