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

Рис. 2.5 Результаты тестирования системы - коррекция угла опережения зажигания Q

Рис. 2.6 Результаты работы системы (синхронная коррекция сигнала "топливо"); tв - длительность впрыска топлива (мс)


2.3. Описание программы

Программа использует циклический опрос флагов, показывающих в каждый момент времени состояние выходных сигналов, - ожидание приема сигнала или выдача. Фрагмент программы:  

lp_001         btfsc   flag,7           ; приняли сигнал "зажигание"?

call               make_ignition        ; да - идем корректировать

btfsc             flag,6                     ; скорректировали сигнал "зажигание"?

call               check_outC  ; да  - выдаем

btfss             flagh,0                   ; приняли сигнал "топливо"?  

call               make_inj_time       ; да - корректируем

btfss             flagh,2                   ; выдаем сигнала для 1,4 форсунок?

call               check_inj1             ; да - проверяем

btfss             flagh,1                   ; выдаем сигнала для 2,3 форсунок?          

call               check_inj2             ; да - выдаем

btfss             _porta, Dat             ; проверяем сигнал с одновибратора

goto             lp_001                   ; нет сигнала - идем на начало цикла 

movlw         b'00111111'           ; есть сигнал - сбрасываем флаги отсчета

andwf          flagh,f                    ; номера группы форсунок

bsf               flagh,6                   ; устанавливаем активными 1,4 форсунку

lp_010         btfsc   _porta, det   проверяем сигнал с датчика детонации

goto             lp_001                   ; идем на начало цикла

bsf               flag,5                     ; ставим флаг детонации

goto             lp_001                   ; идем на начало цикла

Бит 7 (устанавливается по окончанию измерения длительности сигнала “зажигание”) регистра flag показывает, что длительность сигнала “зажигание” измерена, следовательно требуется передача управления на подпрограмму коррекции. Бит 6 (регистра flag) указывает на то, что коррекция длительности сигнала “зажигание” была проведена и в выходных регистрах содержится значение, готовое к выдаче. Бит 0 (в регистре flagh), установленный в 1, сигнализирует о том, что сигнал “топливо” не был скорректирован в данном периоде. Биты 1 и 2 (ðåãèñòðà flagh) устанавливаются на время выдачи сигналов по парам форсунок, и сбрасываются по окончанию выдачи каждого сигнала.

В случае выполнения проверок, передача управления происходит на нужную подпрограмму, в которой, в свою очередь происходит несколько дополнительных проверок.

Для оптимизации кода программы те группы операций, которые выполняются несколько раз, используя одни и те же ячейки оперативной памяти, помещены в подпрограммы. 

read_EEPROM      Подпрограмма чтения ячейки из внутреннего EEPROM микроконтроллера. Адрес ячейки передается в подпрограмму в регистре adrk. В подпрограмме запрещаются прерывания, т.к. происходит переключение страницы памяти для настройки управляющего регистра. Результат операции чтения готов на следующем командном цикле. Длительность подпрограммы 11 тактов. Фрагмент программы:

movf                      adrk,w         ; считываем адрес ячейки

movwf                   _eeadr          ; записываем в регистр адреса EEPROM    

bcf                         _intcon,7     ; запрещаем прерывания         

bsf                         _status,rp0   ; ïåðåêëþ÷àåì ñòðàíèöó ïàìÿòè

bsf                         _eecon1,rd   ; óñòàíàâëèâàåì áèò ÷òåíèÿ EEPROM

bcf                         _status,rp0   ; ïåðåêëþ÷àåì ñòðàíèöó ïàìÿòè îáðàòíî

movf                      _eedata,w     ; ñ÷èòàâàåì ïîëó÷åííîå çíà÷åíèå   

movwf                   tmp              ; çàïèñûâàåì â ðåãèñòð TMP