
;Программа управлением стендом промывки форсунок.
;Форсунки управляются с выхода RD0
;Кнопки на портах RB
;Реализовано 3 режима: "тест производительности", "очистка" и "кавитация"
;**************************************************************************
.include "2313def.inc"
.cseg
.org 0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
reti
;Инициализация
reset:
cli ;Запретить прерывания
ldi r31,0b01110001 ;Порт "D0,D5,D6" на вывод, по умолчанию все
out DDRD,r31 ;порты настроены как входы
ldi r31,0b11111111 ;к портам "B" подключаем подтягивающий резистор
out portb,r31
ldi r25,RAMEND ;Инициализация стека
out spl,r25 ;для выхода из прерываний
;**************Таймер ***************
ldi r31,0b01000000 ;разрешить прерывание компаратора
out TIMSK,r31
ldi r31,0b00000011 ;тактовый сигнал = CK/8 (10)
out TCCR1B,r31
ldi r31,0x7f ;инициализация компаратора 2.5 ms
out OCR1AH,r31
ldi r31,0xff
out OCR1AL,r31
ldi r31,0 ;обнуление таймера
out TCNT1H,r31
out TCNT1L,r31
ldi r31,0 ;установка портов вывода на "0"
out portD,r31
ldi r19,255
;*******************************************************
;*********************Обработка событий*********************
Loop:
SBIs pinB,0 ;если не нажата кнопка пинB 0 "0" пропустить
rcall kavit ;Запускаем режим кавитации
SBIs pinB,1 ;если не нажата кнопка пинB 0 "0" пропустить
rcall open_10s ;Запускаем режим "измерения"
SBIs pinB,2 ;если не нажата кнопка пинB 0 "0" пропустить
rcall clear ;Запускаем режим промывки
rjmp Loop
;*****************Подпрограммы***************************************
Timer1_comp1:
cbi portd,0 ;"0" на вывод порт D0
rcall del_100
rcall del_100
rcall del_100
ldi r31,0 ;обнуление таймера
out TCNT1H,r31
out TCNT1L,r31
SBIc pinD,5 ;если включен режим "тест" по окончании таймера
rcall reset ;сброс.
reti
;****************Режим кавитации****************************
kavit:
sbi portD,4 ;индикация режима кавитации
sei ;разрешаем прерывания
loop_1: sbi portD,0 ;открыть форсунку
rcall delay
cbi portd,0 ;закрыть форсунку
rcall delay ;Для скважности 30% 1 пауза откр. 2 закр
rcall delay
rjmp Loop_1
;*****************Режим очистки (эмитация работы двигателя)**
clear:
sbi portD,6 ;индикация режима очистки
loop_3: sbi portD,0 ;открыть форсунку
rcall del_100
rcall del_100
cbi portd,0 ;закрыть форсунку
rcall del_100
rcall del_100
rjmp Loop_3
;****************Режим проверки производительности**************
open_10s:
ldi r31,0b00000101 ;тактовый сигнал таймера
out TCCR1B,r31
sbi portD,5 ;индикация режима "налив"
ldi r31,0 ;обнуление таймера
out TCNT1H,r31
out TCNT1L,r31
sei ;разрешаем прерывания
loop_2:
sbi portD,0 ;Открыть форсунку
rjmp Loop_2 ;Ждем пока не сработает таймер
;*************Задержки для инициализации и отпраки команд********
delay:
dec r19
mov r19,r17 ;задержка
l: ldi r18,4
l1: dec r18
brne l1
dec r17
brne l
ret
del_100:
ldi r17,255 ;задержка
l_1: ldi r18,255
l1_1: dec r18
brne l1_1
dec r17
brne l_1
ret
;.org $200


