;******************* Nebelkammer Steuerung *********** ; ; ; Rapp 1.0 3.2004 ; ;********************************************************************** ; Port A LATCH_BIT equ 00H ; Latch Port A Bit 0 Out START_BIT equ 01H ; Messzyklus starten Port A Bit 1 In XTERN_BIT equ 02H ; externer Modus Port A Bit 2 In LEDG_BIT equ 03H ; grne LED Port A Bit 3 Out ; Port B LEDR_BIT equ 00H ; rote LED Port B Bit 0 Out FLENA_BIT equ 01H ; Blitz enable Schalter Port B Bit 1 In KAMERA_BIT equ 02H ; Kamera Ausl”ser Port B Bit 2 Out FLASH_BIT equ 03H ; Blitzlampe Trigger Port B Bit 3 Out HV_BIT equ 04H ; Saugspannungsrelais Port B Bit 4 Out LED_BIT equ 05H ; LED Zeile Port B Bit 5 Out KOMP_BIT equ 06H ; Kompressor Steuerung Port B Bit 6 Out VENT_BIT equ 07H ; Expandier Ventil Port B Bit 7 Out RES_VEC equ 00H ; Reset Vektor IRQ_VEC equ 04H ; Interrupt Vektor ; bank 0 PCL equ 02H ; Programm Z„hler STATUS equ 03H PORTA equ 05H PORTB equ 06H EEDATA equ 08H EEADR equ 09H INTCON equ 0BH ; Interrupt Register TIM_LO equ 00CH ; Timer low counter TIM_MI equ 00DH ; Timer middle counter TIM_HI equ 00EH ; Timer high counter TIM_XI equ 00FH ; Timer extra high counter PRESS_DELAY equ 010H ; Druckaufbauzeit KAMERA_PULS equ 011H ; Ausl”sepulsdauer fr Kamera KAMERA_DELAY equ 012H ; Verz”gerung der Kamera bis Verschluá offen EXPAND_DELAY equ 013H ; Zeit bis šbers„ttigung erreicht FLASH_TIME equ 014H ; Dauer des LED Blitzes REP_TIME equ 015H ; Wiederholrate der Messungen (Rep. Mode) ; bank 1 OPTIO equ 01H TRISA equ 05H TRISB equ 06h EECON1 equ 08H EECON2 equ 09H ; cpu bit constants INTEDG equ 6 ; bit in OPTIO RP0 equ 5 RBPU equ 7 Z_FLG equ 2 ; zero flag in status C_FLG equ 0 ; carry flag in status GIE equ 7 ; bits INTCON EEIE equ 6 TOIE equ 5 INTE equ 4 RBIE equ 3 TOIF equ 2 INTF equ 1 RBIF equ 0 RD equ 0 ; bits in EECON1 WR equ 1 WREN equ 2 EEIF equ 4 ; constants SAME equ 1 W equ 0 org RES_VEC START goto MAIN org IRQ_VEC IRQ nop bcf INTCON, INTF ; clear flag retfie ; short range timer, delay in W TIMES movwf TIM_LO TIMES_1 decfsz TIM_LO goto TIMES_1 return ; middle range timer, delay in W TIMEM movwf TIM_MI clrf TIM_LO TIMEM_1 decfsz TIM_LO goto TIMEM_1 decfsz TIM_MI goto TIMEM_1 return ; long range timer, delay in W TIMEL movwf TIM_HI clrf TIM_MI clrf TIM_LO TIMEL_1 decfsz TIM_LO goto TIMEL_1 decfsz TIM_MI goto TIMEL_1 decfsz TIM_HI goto TIMEL_1 return ; very long range timer, delay in W TIMEV movwf TIM_XI clrf TIM_HI clrf TIM_MI clrf TIM_LO TIMEV_1 decfsz TIM_LO goto TIMEV_1 decfsz TIM_MI goto TIMEV_1 decfsz TIM_HI goto TIMEV_1 decfsz TIM_XI goto TIMEV_1 return ; generate latch puls DO_LATCH bcf PORTA, LATCH_BIT bsf PORTA, LATCH_BIT return ; Mess Zyklus DO_CYCLE bsf PORTB, KOMP_BIT ; enable Kompressor call DO_LATCH movf PRESS_DELAY,W ; warten bis Druck aufgebaut call TIMEL bcf PORTB, KOMP_BIT ; disable Kompressor call DO_LATCH bcf PORTB, HV_BIT ; Saugspannung aus call DO_LATCH bsf PORTB, KAMERA_BIT ; Kamera ausl”sen call DO_LATCH movf KAMERA_PULS, W call TIMEL bcf PORTB, KAMERA_BIT call DO_LATCH movf KAMERA_DELAY, W ; Verz”gerung der Kamera abwarten call TIMEL bsf PORTB, VENT_BIT ; Expandier Ventil ”ffnen call DO_LATCH movf EXPAND_DELAY, W ; šbers„ttigung abwarten call TIMEL bsf PORTB, LED_BIT ; LED ein btfss PORTB, FLENA_BIT ; Blitz ? goto DO_CYC1 bsf PORTB, FLASH_BIT ; Blitz triggern call DO_LATCH DO_CYC1 movf FLASH_TIME, W ; Blitzdauer call TIMEL bcf PORTB, LED_BIT ; LED aus, Ventil schliesen bcf PORTB, VENT_BIT bcf PORTB, FLASH_BIT bsf PORTB, HV_BIT ; Saugspannung ein call DO_LATCH return DO_INIT bcf STATUS, RP0 ; select bank 0 bcf PORTB, KAMERA_BIT ; set Outputs bcf PORTB, FLASH_BIT bcf PORTB, HV_BIT bcf PORTB, LED_BIT bcf PORTB, KOMP_BIT bcf PORTB, VENT_BIT bsf PORTA, LATCH_BIT bsf STATUS, RP0 ; select bank 1 bcf TRISB, KAMERA_BIT ; Ausg„nge einrichten bcf TRISB, FLASH_BIT bcf TRISB, HV_BIT bcf TRISB, LED_BIT bcf TRISB, KOMP_BIT bcf TRISB, VENT_BIT bcf TRISB, LEDR_BIT bcf TRISA, LATCH_BIT bcf TRISA, LEDG_BIT bcf OPTIO, INTEDG ; neg. edge interrupt bcf OPTIO, RBPU ; Port B pull up bcf STATUS, RP0 ; select bank 0 bcf INTCON, EEIE ; disable EE interrupt bcf INTCON, TOIE ; disable TMR0 interrupt bcf INTCON, RBIE ; disable RB interrupt bcf INTCON, TOIF ; disable TMR0 ov interrupt bcf INTCON, INTF ; clear flag bsf INTCON, INTE ; enable RBN0 interrupt bcf INTCON, GIE ; disable gobal interrupt bsf PORTA, LEDG_BIT ; grne LED an movlw 0F0H ; 20 s movwf PRESS_DELAY ; Druckaufbauzeit movlw 001H ; 70 ms movwf KAMERA_PULS ; Ausl”sepulsdauer fr Kamera movlw 007H ; 525 ms movwf KAMERA_DELAY ; Verz”gerung der Kamera bis Verschluá offen movlw 004H ; 300 ms movwf EXPAND_DELAY ; Zeit bis šbers„ttigung erreicht movlw 003H ; 225 ms movwf FLASH_TIME ; Dauer des LED Blitzes movlw 0D8H ; 60 s movwf REP_TIME ; Wiederholrate der Messungen (Rep. Mode) clrf PORTB bsf PORTB, HV_BIT ; Saugspannung einschalten call DO_LATCH return ; main programm loop MAIN call DO_INIT ; Setup System LOOP bsf PORTA, LEDG_BIT ; grne LED an bcf PORTB, LEDR_BIT ; rote LED aus btfsc PORTA, XTERN_BIT ; externer Modus goto EX_LOOP btfsc PORTA, START_BIT ; Start Befehl abwarten goto LOOP LOOP1 call DO_CYCLE ; Messzyklus durchlaufen btfsc PORTA, START_BIT ; Startschalter noch aktiv ? goto LOOP movf REP_TIME, W ; Repetier Mode call TIMEL movf REP_TIME, W call TIMEL movf REP_TIME, W call TIMEL goto LOOP1 ; erneuter Messzyklus EX_LOOP btfss PORTA, XTERN_BIT ; interner MOdus goto LOOP bcf PORTA, LEDG_BIT ; grne LED aus bsf PORTB, LEDR_BIT ; rote LED an goto EX_LOOP END