/* ---------------------------------------------------------------------------------- * ignition.asm * * Created: 16.06.2013 12:04:04 * Author: Mikele * SBI установка бита в порту * CBI стирание бита в порту * SBIC скипнуть если бит в порту НЕ установлен * SBIS скипнуть если бит в порту установлен * SBR установка бита в регистре * CBR стирание бита в регистре * SBRC скипнуть если бит в регистре НЕ установлен * SBRS скипнуть если бит в регистре установлен ----------------------------------------------------------------------------------*/ .include "m88PAdef.inc" .equ TimerImpulseLen = 0x85ED ; 0x85ED = (65535 - 31250). 31250 = 1/4 sec .equ ADCAccumDif = 145 ; 8.5V определитель 2S или 3S .equ ADCHalf2S = 125 ; 7.7V, если ARef=5V и делитель резисторами =1/3 .equ ADCMin2S = 113 ; 7V, если ARef=5V и делитель резисторами =1/3 .equ ADCHalf3S = 188 ; 11.6V, если ARef=5V и делитель резисторами =1/3 .equ ADCMin3S = 170 ; 10.5V, если ARef=5V и делитель резисторами =1/3 .equ PPMmin = 112 ; первые 900uS .equ PPMmax = 255-PPMmin ; Проверим, сигнал длиннее чем 2100uS-900uS .equ PPMmid = 192-PPMmin ; Середина сигнала 1500us + 3% .equ PPM2000 = 250-PPMmin ; 2000us ;коэффициенты линеаризации для расчета длины ШИМ сигнала .def x0 = r10 .def dX = r11 .def dY = r12 .def kA = r13 .def MAX_PWM = r14 .def PWM_DURE = r15 ;--- .def ADC0 = r16 .def PPMFailCnt = r27 .def PPM1 = r17 .def STAT = r18 ; .equ PPM1Ready = 0 ; bit 0 - ppm1 ready .equ ADCReady = 1 ; bit 1 - ADC ready .equ Acc3S = 2 ; bit 2 - Accum 3S .equ AccStatus0 = 3 ; bit 4:3 -- 0:0 - Ok, 0:1 - 1/2 Bat, 1:1 - 1/3 Bat NO Ignition .equ AccStatus1 = 4 ; .equ PlugOk = 5 ; bit 5 - Plug Ok .equ IgnitionOn = 6 ; bit 6 - Ignition On, if Plug Ok .equ ProgMode = 7 ; bit 7 - Program mode ON ; Байт прокручивается по битам с периодам 1/4 сек. .def Plug_LED = r19 ; PLUG / IGNITION STATUS .def PPMOnLED = r20 ; PPM STATUS .def AccumLED = r21 ; ACCUM STATUS .def temp = r22 .def temp2 = r23 .def PPM_BTN = r24 ; Значение ШИМ для нажатой кнопки .def DIV = r25 ; Делитель для функции DIV168 .def TMR0cnt = r26 .dseg .org 0x100 ;LINE: .byte 1 ;LINEH: .byte 1 .cseg .org 0 rjmp RESET ; Reset Handler rjmp EXT_INT0 ; IRQ0 Handler rjmp EXT_INT1 ; IRQ1 Handler rjmp PCINT0_INT ; PCINT0 Handler rjmp PCINT1_INT ; PCINT1 Handler rjmp PCINT2_INT ; PCINT2 Handler rjmp WDT ; Watchdog Timer Handler rjmp TIM2_COMPA ; Timer2 Compare A Handler rjmp TIM2_COMPB ; Timer2 Compare B Handler rjmp TIM2_OVF ; Timer2 Overflow Handler rjmp TIM1_CAPT ; Timer1 Capture Handler rjmp TIM1_COMPA ; Timer1 Compare A Handler rjmp TIM1_COMPB ; Timer1 Compare B Handler rjmp TIM1_OVF ; Timer1 Overflow Handler rjmp TIM0_COMPA ; Timer0 Compare A Handler rjmp TIM0_COMPB ; Timer0 Compare B Handler rjmp TIM0_OVF ; Timer0 Overflow Handler rjmp SPI_STC ; SPI Transfer Complete Handler rjmp USART_RXC ; USART, RX Complete Handler rjmp USART_UDRE ; USART, UDR Empty Handler rjmp USART_TXC ; USART, TX Complete Handler rjmp ADC_CNV ; ADC Conversion Complete Handler rjmp EE_RDY ; EEPROM Ready Handler rjmp ANA_COMP ; Analog Comparator Handler rjmp TWI ; 2-wire Serial Interface Handler rjmp SPM_RDY ; Store Program Memory Ready Handler PCINT0_INT: ; PCINT0 Handler PCINT1_INT: ; PCINT1 Handler PCINT2_INT: ; PCINT2 Handler WDT: ; Watchdog Timer Handler TIM2_COMPA: ; Timer2 Compare A Handler TIM2_COMPB: ; Timer2 Compare B Handler TIM2_OVF: ; Timer2 Overflow Handler TIM1_CAPT: ; Timer1 Capture Handler TIM1_COMPA: ; Timer1 Compare A Handler TIM1_COMPB: ; Timer1 Compare B Handler TIM0_COMPB: ; Timer0 Compare B Handler SPI_STC: ; SPI Transfer Complete Handler USART_RXC: ; USART, RX Complete Handler USART_UDRE: ; USART, UDR Empty Handler USART_TXC: ; USART, TX Complete Handler EE_RDY: ; EEPROM Ready Handler ANA_COMP: ; Analog Comparator Handler TWI: ; 2-wire Serial Interface Handler SPM_RDY: ; Store Program Memory Ready Handler EXT_INT1: ; IRQ1 Handler reti TIM0_COMPA: ; Timer0 Compare A Handler push temp in temp, SREG push temp sbi PORTD, 6 clr temp out TCCR0A, temp pop temp out SREG, temp pop temp reti TIM0_OVF: ; Timer0 Overflow Handler push temp in temp, SREG push temp inc TMR0cnt ; cpi TMR0cnt, 19 ; 20 раз brne tim0_exit clr TMR0cnt out OCR0A, PWM_DURE ; Set PWM duration tst PWM_DURE ; Если длина ШИМ=0, тогда НЕ стартуем ШИМ breq tim0_exit cbi PORTD, 6 ldi temp, (1<