; Source created with Parsic Version 3.x ; at : 2009.06.20. 14:07:40 ; Project File : C:\picprog\CSOVA.PIC ; Project Version : 1.0.54 ; Created : 2009.06.04. 17:28:00 ; Last change : 2009.06.20. 14:07:36 PROCESSOR 16F628A INCLUDE P16F628A.INC RADIX DEC __IDLOCS H'0100' __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF ; Diverses ZERO EQU Z ; ZERO-Flag CARRY EQU C ; CARRY-Flag ; Variable ZV3 = 32 ; located in Bank 0 ZV3_HI = 33 ; located in Bank 0 EE1_FD = 34 ; located in Bank 0 ZV1 = 35 ; located in Bank 0 ZV1_FD = 36 ; located in Bank 0 S0 = 37 ; located in Bank 0 S0_HI = 38 ; located in Bank 0 S1 = 39 ; located in Bank 0 S2 = 40 ; located in Bank 0 S3 = 41 ; located in Bank 0 TR1 = 42 ; located in Bank 0 TR1_HI = 43 ; located in Bank 0 ZV2 = 44 ; located in Bank 0 ZV2_HI = 45 ; located in Bank 0 ZV2_FD = 46 ; located in Bank 0 OS1_FD = 47 ; located in Bank 0 ZV3_FD = 48 ; located in Bank 0 MF1 = 49 ; located in Bank 0 MF1_HI = 50 ; located in Bank 0 MF1_FD = 51 ; located in Bank 0 ZV4 = 52 ; located in Bank 0 ZV4_FD = 53 ; located in Bank 0 MF2 = 54 ; located in Bank 0 MF2_HI = 55 ; located in Bank 0 MF3 = 56 ; located in Bank 0 MF3_HI = 57 ; located in Bank 0 MF4 = 58 ; located in Bank 0 MF4_HI = 59 ; located in Bank 0 MF5 = 60 ; located in Bank 0 MF5_HI = 61 ; located in Bank 0 MF6 = 62 ; located in Bank 0 MF6_HI = 63 ; located in Bank 0 MF7 = 64 ; located in Bank 0 MF7_HI = 65 ; located in Bank 0 MF8 = 66 ; located in Bank 0 MF8_HI = 67 ; located in Bank 0 MF9 = 68 ; located in Bank 0 MF9_HI = 69 ; located in Bank 0 RAM = 70 ; located in Bank 0 SYS_TMP1 = 112 ; located in Bank 0, 1, 2, 3 SYS_TMP2 = 113 ; located in Bank 0, 1, 2, 3 SYS_WSAV = 114 ; located in Bank 0, 1, 2, 3 SYS_SSAV = 115 ; located in Bank 0, 1, 2, 3 ERRORLEVEL -302 ; disable warning (Bankswitching) ERRORLEVEL -306 ; disable warning (Pageswitching) ;**************************************** ;Programmanfang ;**************************************** ORG 0 CLRF STATUS ; switch to RAM-Bank 0 GOTO SYS_INIT NOP NOP ;**************************************** ;Interrupt-Adress ;**************************************** MOVWF SYS_WSAV ; save register SWAPF STATUS,W CLRF STATUS ; bank 0 MOVWF SYS_SSAV BCF INTCON,T0IF ; Interrupt quitieren BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 INCFSZ TR1,F GOTO SYS_INT_LABEL_0 INCF TR1_HI,F SYS_INT_LABEL_0 INCFSZ MF1,F GOTO SYS_INT_LABEL_1 INCF MF1_HI,F SYS_INT_LABEL_1 INCFSZ MF2,F GOTO SYS_INT_LABEL_2 INCF MF2_HI,F SYS_INT_LABEL_2 INCFSZ MF3,F GOTO SYS_INT_LABEL_3 INCF MF3_HI,F SYS_INT_LABEL_3 INCFSZ MF4,F GOTO SYS_INT_LABEL_4 INCF MF4_HI,F SYS_INT_LABEL_4 INCFSZ MF5,F GOTO SYS_INT_LABEL_5 INCF MF5_HI,F SYS_INT_LABEL_5 INCFSZ MF6,F GOTO SYS_INT_LABEL_6 INCF MF6_HI,F SYS_INT_LABEL_6 INCFSZ MF7,F GOTO SYS_INT_LABEL_7 INCF MF7_HI,F SYS_INT_LABEL_7 INCFSZ MF8,F GOTO SYS_INT_LABEL_8 INCF MF8_HI,F SYS_INT_LABEL_8 INCFSZ MF9,F GOTO SYS_INT_LABEL_9 INCF MF9_HI,F SYS_INT_LABEL_9 EXITINT SWAPF SYS_SSAV,W ; Register zurück MOVWF STATUS SWAPF SYS_WSAV,F SWAPF SYS_WSAV,W RETFIE ;**************************************** ; Subroutines ;**************************************** ;**************************************** ; Direct jump into a table ;**************************************** SYSTABJMP BCF INTCON,GIE BTFSC INTCON,GIE GOTO SYSTABJMP MOVFW SYS_TMP2 MOVWF PCLATH MOVFW SYS_TMP1 MOVWF PCL EEINT_WRITE MOVFW INDF EEINT_WRITE_0 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 ; Bank 1 MOVWF EEDATA BSF EECON1,WREN EEINT_DISINT BCF INTCON,GIE BTFSC INTCON,GIE GOTO EEINT_DISINT MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR ; start write BSF INTCON,GIE EEINT_WRITE_1 BTFSC EECON1,WR ; ready ? GOTO EEINT_WRITE_1 ; no BCF EECON1,WREN INCF EEADR,F INCF FSR,F DECFSZ SYS_TMP1,F GOTO EEINT_WRITE RETURN ;*************************************************** EEINT_READ BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 ; Bank 1 BSF EECON1,RD MOVFW EEDATA MOVWF INDF INCF EEADR,F INCF FSR,F DECFSZ SYS_TMP1,F GOTO EEINT_READ RETURN ;*************************************************** ; EE-Modul -> EE1 ;*************************************************** WRITE_EE1 MOVLW 0 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 ; Bank 1 MOVWF EEADR BCF STATUS,IRP ; vars - located in Bank 0 MOVLW 2 MOVWF SYS_TMP1 MOVLW LOW ZV3 MOVWF FSR CALL EEINT_WRITE RETURN ;*************************************************** ; EE-Modul -> EE1 ;*************************************************** READ_EE1 MOVLW 0 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 ; Bank 1 MOVWF EEADR BCF STATUS,IRP ; vars - located in Bank 0 MOVLW 2 MOVWF SYS_TMP1 MOVLW LOW ZV3 MOVWF FSR CALL EEINT_READ RETURN ;*************************************************** ;**************************************** ;Initialisierung ;**************************************** SYS_INIT MOVLW B'00100000' MOVWF INTCON ; Set output before direction BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 MOVLW B'10000000' MOVWF PORTA MOVLW B'00000000' MOVWF PORTB MOVLW 143 BSF STATUS,RP0 ; Bank 1 MOVWF OPTION_REG ; Richtung setzen MOVLW B'00111111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS,RP0 ; Bank 0 MOVLW 7 ; Comparators off MOVWF CMCON ; init vars ; Clear RAM BCF STATUS,IRP MOVLW 32 MOVWF FSR CR1 CLRF INDF INCF FSR,F BTFSS FSR,7 GOTO CR1 BSF FSR,5 CR2 CLRF INDF INCF FSR,F MOVLW H'F0' SUBWF FSR,W BTFSS STATUS,ZERO GOTO CR2 BSF STATUS,IRP MOVLW 32 MOVWF FSR CR3 CLRF INDF INCF FSR,F MOVLW H'50' SUBWF FSR,W BTFSS STATUS,ZERO GOTO CR3 CALL READ_EE1 ; read vars from internal EE BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 CLRF TMR0 BCF INTCON,T0IF BSF INTCON,GIE ; Interrupt freigeben ;********************************** ;******* Haupt-Programm *********** ;********************************** MAIN ;*************************************************** ; Zähler -> ZV1 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,1 ; Reset ? GOTO LABEL_ZV1_COUNT CLRF ZV1 GOTO LABEL_ZV1_SETOUT LABEL_ZV1_COUNT ; Test auf positive Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S2,0 GOTO LABEL_ZV1_SETFD BTFSC ZV1_FD,0 GOTO LABEL_ZV1_SETFD BSF ZV1_FD,0 BTFSC S1,0 ; Vorwärts oder Rückwärts ? GOTO LABEL_ZV1_BACKWARD INCF ZV1,F GOTO LABEL_ZV1_SETOUT LABEL_ZV1_BACKWARD BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 DECF ZV1,F LABEL_ZV1_SETOUT LABEL_ZV1_SETFD ; Test auf negative Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSC S2,0 GOTO LABEL_ZV1_EXIT BCF ZV1_FD,0 LABEL_ZV1_EXIT ;*************************************************** ; Call subroutine TAB ;*************************************************** MOVLW LOW TAB MOVWF SYS_TMP1 MOVLW HIGH TAB MOVWF SYS_TMP2 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF STATUS,CARRY RLF ZV1,W ADDWF SYS_TMP1,F BTFSC STATUS,CARRY INCF SYS_TMP2,F CALL SYSTABJMP BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 MOVWF S0 INCF SYS_TMP1,F BTFSC STATUS,ZERO INCF SYS_TMP2,F CALL SYSTABJMP BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 MOVWF S0_HI BSF INTCON,GIE ;*************************************************** ; Verteiler -> BV1 ;*************************************************** BTFSC S0,0 GOTO LABEL_BV1_0 BCF S1,2 GOTO LABEL_BV1_0_END LABEL_BV1_0 BSF S1,2 LABEL_BV1_0_END ;********************************************** BTFSC S0,1 GOTO LABEL_BV1_1 BCF S2,7 GOTO LABEL_BV1_1_END LABEL_BV1_1 BSF S2,7 LABEL_BV1_1_END ;********************************************** BTFSC S0,2 GOTO LABEL_BV1_2 BCF S3,0 GOTO LABEL_BV1_2_END LABEL_BV1_2 BSF S3,0 LABEL_BV1_2_END ;********************************************** BTFSC S0,3 GOTO LABEL_BV1_3 BCF S3,1 GOTO LABEL_BV1_3_END LABEL_BV1_3 BSF S3,1 LABEL_BV1_3_END ;********************************************** BTFSC S0,4 GOTO LABEL_BV1_4 BCF S3,2 GOTO LABEL_BV1_4_END LABEL_BV1_4 BSF S3,2 LABEL_BV1_4_END ;********************************************** BTFSC S0,5 GOTO LABEL_BV1_5 BCF S3,3 GOTO LABEL_BV1_5_END LABEL_BV1_5 BSF S3,3 LABEL_BV1_5_END ;********************************************** BTFSC S0,6 GOTO LABEL_BV1_6 BCF S3,4 GOTO LABEL_BV1_6_END LABEL_BV1_6 BSF S3,4 LABEL_BV1_6_END ;********************************************** BTFSC S0,7 GOTO LABEL_BV1_7 BCF S1,3 GOTO LABEL_BV1_7_END LABEL_BV1_7 BSF S1,3 LABEL_BV1_7_END ;********************************************** ;*************************************************** ; RS-FLIP-FLOP -> RS1 ;*************************************************** BTFSC S1,2 GOTO LABEL_RS1_RESET BTFSS S1,3 GOTO LABEL_RS1_ENDE BSF S1,0 ; Ausgang setzen GOTO LABEL_RS1_ENDE LABEL_RS1_RESET BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S1,0 ; Ausgang zurücksetzen LABEL_RS1_ENDE ;*************************************************** ; Timer -> TR1 ;*************************************************** MOVLW 0 ; Test auf >= BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 SUBWF TR1_HI,W ;F-W -> W BTFSS STATUS,ZERO GOTO LABEL_TR1_CHECK MOVLW 20 SUBWF TR1,W ;F-W -> W LABEL_TR1_CHECK BTFSS STATUS,CARRY GOTO LABEL_TR1_ENDE LABEL_TR1_RESET MOVLW 0 ; Test auf >= SUBWF TR1_HI,F ;F-W -> F MOVLW 20 SUBWF TR1,F ;F-W -> F BTFSS STATUS,CARRY DECF TR1_HI,F LABEL_TR1_SET ; toggel output BTFSC S1,4 GOTO LABEL_TR1_CLR BSF S1,4 GOTO LABEL_TR1_ENDE LABEL_TR1_CLR BCF S1,4 LABEL_TR1_ENDE ;*************************************************** ; Zähler -> ZV2 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S2,1 ; Reset ? GOTO LABEL_ZV2_COUNT CLRF ZV2 CLRF ZV2_HI GOTO LABEL_ZV2_SETOUT LABEL_ZV2_COUNT ; Test auf positive Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,4 GOTO LABEL_ZV2_SETFD BTFSC ZV2_FD,0 GOTO LABEL_ZV2_SETFD BSF ZV2_FD,0 BTFSC S1,5 ; Vorwärts oder Rückwärts ? GOTO LABEL_ZV2_BACKWARD INCFSZ ZV2,F GOTO LABEL_ZV2_SETOUT INCF ZV2_HI,F GOTO LABEL_ZV2_SETOUT LABEL_ZV2_BACKWARD BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 DECF ZV2,F INCFSZ ZV2,W GOTO LABEL_ZV2_SETOUT DECF ZV2_HI,F LABEL_ZV2_SETOUT LABEL_ZV2_SETFD ; Test auf negative Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSC S1,4 GOTO LABEL_ZV2_EXIT BCF ZV2_FD,0 LABEL_ZV2_EXIT ;*************************************************** ; GND ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S1,5 ; immer Low ;*************************************************** ; One Shot -> OS1 ;*************************************************** BTFSS PORTA,0 GOTO LABEL_OS1_1 BTFSC OS1_FD,0 GOTO LABEL_OS1_1 BSF OS1_FD,0 BSF S1,6 GOTO LABEL_OS1_2 LABEL_OS1_1 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S1,6 BTFSC PORTA,0 GOTO LABEL_OS1_2 BCF OS1_FD,0 LABEL_OS1_2 ;*************************************************** ; Zähler -> ZV3 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S2,3 ; Reset ? GOTO LABEL_ZV3_COUNT CLRF ZV3 CLRF ZV3_HI GOTO LABEL_ZV3_SETOUT LABEL_ZV3_COUNT ; Test auf positive Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,6 GOTO LABEL_ZV3_SETFD BTFSC ZV3_FD,0 GOTO LABEL_ZV3_SETFD BSF ZV3_FD,0 BTFSC S1,7 ; Vorwärts oder Rückwärts ? GOTO LABEL_ZV3_BACKWARD INCFSZ ZV3,F GOTO LABEL_ZV3_SETOUT INCF ZV3_HI,F GOTO LABEL_ZV3_SETOUT LABEL_ZV3_BACKWARD BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 DECF ZV3,F INCFSZ ZV3,W GOTO LABEL_ZV3_SETOUT DECF ZV3_HI,F LABEL_ZV3_SETOUT LABEL_ZV3_SETFD ; Test auf negative Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSC S1,6 GOTO LABEL_ZV3_EXIT BCF ZV3_FD,0 LABEL_ZV3_EXIT ;*************************************************** ; GND ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S1,7 ; immer Low ;*************************************************** ; Schmitt-Trigger 16-Bit -> ST1 ;*************************************************** MOVFW ZV3 MOVWF SYS_TMP1 MOVFW ZV3_HI MOVWF SYS_TMP2 BTFSS S2,1 ; Ausgang gesetzt ? GOTO LABEL_ST1_TEST ; without Hysterese MOVLW HIGH 0 SUBWF SYS_TMP2,F MOVLW LOW 0 SUBWF SYS_TMP1,F BTFSS STATUS,CARRY DECF SYS_TMP2,F LABEL_ST1_TEST MOVFW SYS_TMP2 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 SUBWF ZV2_HI,W BTFSS STATUS,ZERO GOTO LABEL_ST1_TEST2 MOVFW SYS_TMP1 SUBWF ZV2,W LABEL_ST1_TEST2 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS STATUS,CARRY GOTO LABEL_ST1_RESET LABEL_ST1_SET BSF S2,1 ; if greater or equal GOTO LABEL_ST1_ENDE LABEL_ST1_RESET BCF S2,1 ; if less LABEL_ST1_ENDE ;*************************************************** ; Mono-Flop -> MF1 ;*************************************************** ; Läuft der Impuls ? BTFSC MF1_FD,1 GOTO LABEL_MF1_CHKTIME ; Test auf positive Flanke BTFSC MF1_FD,0 GOTO LABEL_MF1_SETFD BTFSS S2,2 GOTO LABEL_MF1_SETFD LABEL_MF1_RESET CLRF MF1 CLRF MF1_HI BSF MF1_FD,1 BSF S2,0 LABEL_MF1_CHKTIME MOVLW 0 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 SUBWF MF1_HI,W BTFSS STATUS,ZERO GOTO LABEL_MF1_CHECK MOVLW 4 SUBWF MF1,W LABEL_MF1_CHECK BTFSS STATUS,CARRY GOTO LABEL_MF1_SETFD LABEL_MF1_TO BCF MF1_FD,1 BCF S2,0 LABEL_MF1_SETFD BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S2,2 GOTO LABEL_MF1_CLR BSF MF1_FD,0 GOTO LABEL_MF1_ENDE LABEL_MF1_CLR BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF MF1_FD,0 LABEL_MF1_ENDE ;*************************************************** ; ODER - Gatter -> LG1 ;*************************************************** LABEL_LG1_1 BTFSC S2,1 GOTO LABEL_LG1_TRUE LABEL_LG1_FALSE BCF S2,2 GOTO LABEL_LG1_ENDE LABEL_LG1_TRUE BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BSF S2,2 LABEL_LG1_ENDE ;*************************************************** ; EE-Modul -> EE1 ;*************************************************** ; Test of falling edge BTFSC S1,6 GOTO LABEL_EE1_SETFD BTFSS EE1_FD,0 GOTO LABEL_EE1_SETFD BCF EE1_FD,0 CALL WRITE_EE1 LABEL_EE1_SETFD ; test input BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,6 GOTO LABEL_EE1_EXIT BSF EE1_FD,0 LABEL_EE1_EXIT ;*************************************************** ; Vergleich -> IF1 ;*************************************************** MOVLW 7 SUBWF ZV3,W ; F - W -> W LABEL_IF1_CHECK BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS STATUS,ZERO ; Test auf -> = GOTO LABEL_IF1_FALSE LABEL_IF1_TRUE BSF S2,3 GOTO LABEL_IF1_EXIT LABEL_IF1_FALSE BCF S2,3 LABEL_IF1_EXIT ;*************************************************** ; UND - Gatter -> LG2 ;*************************************************** LABEL_LG2_1 BTFSS S2,4 GOTO LABEL_LG2_FALSE LABEL_LG2_TRUE BSF PORTA,6 GOTO LABEL_LG2_ENDE LABEL_LG2_FALSE BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF PORTA,6 LABEL_LG2_ENDE ;*************************************************** ; ODER - Gatter -> LG3 ;*************************************************** LABEL_LG3_1 BTFSC S2,4 GOTO LABEL_LG3_TRUE LABEL_LG3_FALSE BSF PORTA,7 GOTO LABEL_LG3_ENDE LABEL_LG3_TRUE BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF PORTA,7 LABEL_LG3_ENDE ;*************************************************** ; Zähler -> ZV4 ;*************************************************** BTFSS S2,6 ; Reset ? GOTO LABEL_ZV4_COUNT CLRF ZV4 GOTO LABEL_ZV4_SETOUT LABEL_ZV4_COUNT ; Test auf positive Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,0 GOTO LABEL_ZV4_SETFD BTFSC ZV4_FD,0 GOTO LABEL_ZV4_SETFD BSF ZV4_FD,0 BTFSC S2,5 ; Vorwärts oder Rückwärts ? GOTO LABEL_ZV4_BACKWARD INCF ZV4,F GOTO LABEL_ZV4_SETOUT LABEL_ZV4_BACKWARD BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 DECF ZV4,F LABEL_ZV4_SETOUT LABEL_ZV4_SETFD ; Test auf negative Flanke BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSC S1,0 GOTO LABEL_ZV4_EXIT BCF ZV4_FD,0 LABEL_ZV4_EXIT ;*************************************************** ; GND ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S2,5 ; immer Low ;*************************************************** ; Schmitt-Trigger 8-Bit -> ST2 ;*************************************************** BTFSC S2,6 ; Ausgang gesetzt ? GOTO LABEL_ST2_MH ; dann mit Hysterese ? MOVLW 2 GOTO LABEL_ST2_TEST LABEL_ST2_MH MOVLW 2 LABEL_ST2_TEST SUBWF ZV4,W BTFSS STATUS,CARRY GOTO LABEL_ST2_RESET BSF S2,6 ; if greater or equal GOTO LABEL_ST2_ENDE LABEL_ST2_RESET BCF S2,6 ; if less LABEL_ST2_ENDE ;*************************************************** ; Vergleich -> IF2 ;*************************************************** MOVFW ZV4 SUBLW 1 ; K - W -> W LABEL_IF2_CHECK BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS STATUS,CARRY ; Test auf -> > GOTO LABEL_IF2_FALSE BTFSC STATUS,ZERO GOTO LABEL_IF2_FALSE LABEL_IF2_TRUE BSF S2,4 GOTO LABEL_IF2_EXIT LABEL_IF2_FALSE BCF S2,4 LABEL_IF2_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF2 ;*************************************************** BTFSS S1,2 ; Eingang auf High ? GOTO LABEL_MF2_CHKTIME ; Nein ; RESET CLRF MF2 CLRF MF2_HI BSF PORTB,4 GOTO LABEL_MF2_EXIT ; raus LABEL_MF2_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,4 ; Ausgang schon auf Low ? GOTO LABEL_MF2_EXIT ; Ja MOVLW 0 SUBWF MF2_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF2_EXIT MOVLW 195 SUBWF MF2,W BTFSS STATUS,CARRY GOTO LABEL_MF2_EXIT BCF PORTB,4 LABEL_MF2_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF3 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S2,7 ; Eingang auf High ? GOTO LABEL_MF3_CHKTIME ; Nein ; RESET CLRF MF3 CLRF MF3_HI BSF PORTB,5 GOTO LABEL_MF3_EXIT ; raus LABEL_MF3_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,5 ; Ausgang schon auf Low ? GOTO LABEL_MF3_EXIT ; Ja MOVLW 0 SUBWF MF3_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF3_EXIT MOVLW 195 SUBWF MF3,W BTFSS STATUS,CARRY GOTO LABEL_MF3_EXIT BCF PORTB,5 LABEL_MF3_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF4 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S3,0 ; Eingang auf High ? GOTO LABEL_MF4_CHKTIME ; Nein ; RESET CLRF MF4 CLRF MF4_HI BSF PORTB,6 GOTO LABEL_MF4_EXIT ; raus LABEL_MF4_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,6 ; Ausgang schon auf Low ? GOTO LABEL_MF4_EXIT ; Ja MOVLW 0 SUBWF MF4_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF4_EXIT MOVLW 195 SUBWF MF4,W BTFSS STATUS,CARRY GOTO LABEL_MF4_EXIT BCF PORTB,6 LABEL_MF4_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF5 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S3,1 ; Eingang auf High ? GOTO LABEL_MF5_CHKTIME ; Nein ; RESET CLRF MF5 CLRF MF5_HI BSF PORTB,7 GOTO LABEL_MF5_EXIT ; raus LABEL_MF5_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,7 ; Ausgang schon auf Low ? GOTO LABEL_MF5_EXIT ; Ja MOVLW 0 SUBWF MF5_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF5_EXIT MOVLW 195 SUBWF MF5,W BTFSS STATUS,CARRY GOTO LABEL_MF5_EXIT BCF PORTB,7 LABEL_MF5_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF6 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S3,2 ; Eingang auf High ? GOTO LABEL_MF6_CHKTIME ; Nein ; RESET CLRF MF6 CLRF MF6_HI BSF PORTB,3 GOTO LABEL_MF6_EXIT ; raus LABEL_MF6_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,3 ; Ausgang schon auf Low ? GOTO LABEL_MF6_EXIT ; Ja MOVLW 0 SUBWF MF6_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF6_EXIT MOVLW 195 SUBWF MF6,W BTFSS STATUS,CARRY GOTO LABEL_MF6_EXIT BCF PORTB,3 LABEL_MF6_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF7 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S3,3 ; Eingang auf High ? GOTO LABEL_MF7_CHKTIME ; Nein ; RESET CLRF MF7 CLRF MF7_HI BSF PORTB,2 GOTO LABEL_MF7_EXIT ; raus LABEL_MF7_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,2 ; Ausgang schon auf Low ? GOTO LABEL_MF7_EXIT ; Ja MOVLW 0 SUBWF MF7_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF7_EXIT MOVLW 195 SUBWF MF7,W BTFSS STATUS,CARRY GOTO LABEL_MF7_EXIT BCF PORTB,2 LABEL_MF7_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF8 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S3,4 ; Eingang auf High ? GOTO LABEL_MF8_CHKTIME ; Nein ; RESET CLRF MF8 CLRF MF8_HI BSF PORTB,1 GOTO LABEL_MF8_EXIT ; raus LABEL_MF8_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,1 ; Ausgang schon auf Low ? GOTO LABEL_MF8_EXIT ; Ja MOVLW 0 SUBWF MF8_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF8_EXIT MOVLW 195 SUBWF MF8,W BTFSS STATUS,CARRY GOTO LABEL_MF8_EXIT BCF PORTB,1 LABEL_MF8_EXIT ;*************************************************** ; Abfall-Verzögerung -> MF9 ;*************************************************** BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS S1,3 ; Eingang auf High ? GOTO LABEL_MF9_CHKTIME ; Nein ; RESET CLRF MF9 CLRF MF9_HI BSF PORTB,0 GOTO LABEL_MF9_EXIT ; raus LABEL_MF9_CHKTIME BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BTFSS PORTB,0 ; Ausgang schon auf Low ? GOTO LABEL_MF9_EXIT ; Ja MOVLW 0 SUBWF MF9_HI,W BTFSS STATUS,CARRY GOTO LABEL_MF9_EXIT MOVLW 195 SUBWF MF9,W BTFSS STATUS,CARRY GOTO LABEL_MF9_EXIT BCF PORTB,0 LABEL_MF9_EXIT ;**************************************** GOTO MAIN ;*************************************************** ; Table -> TAB ;*************************************************** TAB RETLW 1 ; // INDEX 0 RETLW 0 ; // INDEX 0 RETLW 2 ; // INDEX 1 RETLW 0 ; // INDEX 1 RETLW 4 ; // INDEX 2 RETLW 0 ; // INDEX 2 RETLW 8 ; // INDEX 3 RETLW 0 ; // INDEX 3 RETLW 16 ; // INDEX 4 RETLW 0 ; // INDEX 4 RETLW 32 ; // INDEX 5 RETLW 0 ; // INDEX 5 RETLW 64 ; // INDEX 6 RETLW 0 ; // INDEX 6 RETLW 128 ; // INDEX 7 RETLW 0 ; // INDEX 7 RETLW 0 ; // INDEX 8 RETLW 1 ; // INDEX 8 RETLW 0 ; // INDEX 9 RETLW 2 ; // INDEX 9 RETLW 0 ; // INDEX 10 RETLW 4 ; // INDEX 10 RETLW 0 ; // INDEX 11 RETLW 8 ; // INDEX 11 ORG H'2100' DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END