Пример создания программы "АПВ ВЛ" на Assembler для МК PIC16F877A - Микропроцессорные системы в электроэнергетике

Задание: разработать программу, реализующую упрощенный вариант работы АПВ ВЛ со следующими исходными данными:

    - время паузы 0,1 сек (100000 мкс); - сигнал на включение выключателя ВЛ выдается с 3-го бита PORTC; - сигнал внешнего прерывания имитировать подачей энергии со 2-го бита

PORTD;

- задержку времени, необходимую для запуска схемы включения выключателя принять равную 200 подциклам Timer1.

На первом цикле мы можем создать максимально на основании вышеприведенного расчета задержку в 204 мкс.

Определение числа циклов и подциклов выполняем последовательно. Вначале проверим, можно ли выполнить такую задержку на втором внешнем цикле.

Nвторого внешнего цикла = 100000/205=487

Число подциклов второго внешнего цикла максимально 255. Подсчитаем примерно время второго внешнего цикла:

255*205 = 52275 мкс

Определим примерно число подциклов третьего цикла:

100000/52275 = 2

Приведенный расчет дает нам возможность рассчитывать примерное число подциклов третьего цикла для создания определенной паузы. Предположим, что нам задана выдержка 1,14 сек. Тогда приближенное количество подциклов третьего цикла определится по формуле:

1140/ 52=22

Программа РГР1

Include "p16f877A. inc"

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

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

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

Org h'00'

Nop

Nop

Nop

Org h'05'

Nach

Clrf STATUS

Clrf PORTC ; Очистка регистра порта С

Bsf STATUS,5

Movlw B'00001111'

Movwf TRISB ;настроить биты 0-3 PORTB на ввод

Clrf TRISC ;настроить PORTC на вывод

Clrf TRISD ;настроить PORTD на вывод

Bcf STATUS,5

WaitPush

Btfss PORTB,0 ; Ждать включение тумблера и подачи 1 в RB0-имитация

;отключения выключателя ВЛ

Goto WaitPush

Call Timer2; пауза АПВ в соответствии с заданием

M1

Bsf PORTC,3; подача энергии на бит включения выключателя в

;соответствии с заданием

Call Timer1; выдержка, необходимая для включения выключателя

;goto Nach ; работает в реальных условиях

Goto M1

Goto $

Timer1

Movlw D'200'; для отладки принять 2

Movwf Sch_in; устанавливаем значение счетчика.

N_in

Decf Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

Btfss STATUS, Z; если счетчик Sch_in обнулился, пропускаем GOTO.

Goto N_in; срабатывает только при Z=0

Return

Timer2

MOVLW d'2';это же значение оставляем для отладки

MOVWF Sch3; значение W является аргументом для таймера.

N3

MOVLW D'255'; для отладки D'2'

MOVWF Sch_out; устанавливаем значение внешнего счетчика.

N_out; метка внешнего счетчика.

MOVLW D'255'; для отладки D'2'

MOVWF Sch_in; устанавливаем значение внутреннего счетчика.

N_in; метка внутреннего счетчика.

DECF Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

BTFSS STATUS, Z; если счетчик Sch_in обнулился, пропускаем GOTO.

GOTO N_in; срабатывает только при Z=0.

DECF Sch_out, F; уменьшаем значение счетчика Sch_out на 1.

BTFSS STATUS, Z; если счетчик обнулился, пропускаем GOTO.

GOTO N_out; инструкция срабатывает только при Z=0.

DECF Sch3,F; уменьшаем значение счетчика Sch3 на 1,

BTFSS STATUS, Z; если оно равно нулю (Z=1), пропускаем GOTO.

GOTO N3; срабатывает только при Z=0.

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

End

На рисунках 3 и 4 приведены PrtSc для данного примера.

ожидание сигнала отключения выключателя

Рисунок 3 Ожидание сигнала отключения выключателя

на бите 3 portc 1, выключатель включился

Рисунок 4 На бите 3 PORTC 1, выключатель включился

Похожие статьи




Пример создания программы "АПВ ВЛ" на Assembler для МК PIC16F877A - Микропроцессорные системы в электроэнергетике

Предыдущая | Следующая