Микропроцессорная система коррекции режимов работы двигателя внутреннего сгорания (Проектная часть дипломного проекта), страница 6

Длительность работы подпрограммы в среднем 60 тактов. По окончанию работы подпрограммы управление передается на метку exit.

При положительном фронте сигнала “зажигание” подпрограмма вычисляет значение длительности измеряемого сигнала и осуществляет проверку сигнала Idl. Если сигнал равен нулю, то выдача сигнала “зажигание” прерывается (входной и выходной сигналы “зажигание” оказываются равны по длительности). То же самое происходит при нулевом значении регистров (tay2h,tay2). Ôðàãìåíò ïðîãðàììû:

btfss             _porta,idl     ; ïðîâåðÿåì IDL

goto             _out_i2        ; åñëè ðàâåí 0 èäåì íà âûäà÷ó èìïóëüñà

movf            t2h,f             ; ïðîâåðÿåì íà 0 ñêîððåêòèðîâàííîå çíà÷åíèå

btfss             _status,z       ; ñð = 0?

goto             exit              ; íåò -> èäåì íà âûõîä

movf            t2,f      

btfss             _status,z       ; ìð = 0?

goto             exit              ; íåò -> èäåì íà âûõîä

_out_i2        bsf     _portb,outc  ; âûäàåì èìïóëüñ "çàæèãàíèå"

movlw         b'10110101' ; íàñòðàèâàåì ðåãèñòð äëÿ

andwf          flag,f            ; ñáðîñà ôëàãîâ

clrf               t2h               ; î÷èùàåì ðåãèñòðû äëÿ õðàíåíèÿ

clrf               t2                 ; ñêîððåêòèðîâàííîé äëèòåëüíîñòè èìïóëüñà

bsf               flag,4           ; ñòàâèì ôëàã âûäà÷è èìïóëüñà "çàæèãàíèå"

goto             exit              ; èäåì íà âûõîä

Äëèòåëüíîñòü ðàáîòû ïîäïðîãðàììû â ñðåäíåì 60 тактîâ. По окончанию работы подпрограммы управление передается на метку exit.

Подпрограмма измерения сигнала “топливо” анализирует фронт сигнала, вызвавший прерывание. При обнаружении положительного фронта сигнала происходит фиксация этого момента времени как точки отсчета длительности сигнала “топливо”, сохранение старого значения длительности сигнала (подпрограмма save_old) и выход из обработчика (exit). По отрицательному фронту сигнала вычисляется длительность сигнала “топливо”. Фрагмент программы:

movf            tnh,w           ; ср начала отсчета импульса "топливо"

subwf tjdh,f            ; вычитаем из ср текущего времени

movf            tn,w             ; мр начала отсчета

subwf tjd,f              ; получаем длительность импульса "топливо"

btfss             _status,c       ; перенос?

decf             tjdh,f            ; уменьшаем ср

Для обнаружения момента перехода процессора на двойной счет по сигналу “топливо” требуется сохранять предыдущее значение сигнала IDL. Для этого используются следующие команды:

btfss             flag,2           ; предыдущий IDL был 1?

call               save_old      ; нет - запись старого значения длительности

ex_rb5         btfsc   _porta,idl     ;IDL равен 1?

bsf               flag,2           ;  да - ставим флаг

btfss             _porta,idl     ;IDL равен 0?

bcf               flag,2           ;  да - сбрасываем флаг

Среднее время выполнения каждой ветви подпрограммы - 23 такта, общее время обработки прерывания по сигналу “топливо” - 56 тактов.

exit              Блок команд, настраивающих контроллер на выход из подпрограммы обработки прерывания. Восстанавливаются два рабочих регистра, W и STATUS, путем записи в них значений, сохраненных в регистры tmp_w  и tmp_st при входе в подпрограмму обработки прерывания. Так же выполняется настройка регистра прерываний INTCON, и возврат из подпрограммы обработки прерывания с разрешением дальнейших прерываний (команда RETFIE устанавливает бит 7 в регистре INTCON, ðàçðåøàÿ äàëüíåéøèå ïðåðûâàíèÿ).

check_outC  Подпрограмма выдачи сигнала “зажигание” анализирует:

1.  флаг выдачи сигнала (бит 4 регистра flag);

2.  флаг начала выдачи сигнала (бит 3 регистра flag);

3.  переполнения таймера для момента выдачи (бит 1 регистра flag);

4.  сигнал IDL.

При невыполнении одного из этих условий происходит выход из подпрограммы. После прохождения всех проверок, значение времени выдачи скорректированного сигнала (t2h,t2) и текущего времени сравниваются, и после их равенства выходное значение порта изменяется - скорректированный сигнал “зажигание” в данном периоде считается выданным. Фрагмент программы: