; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR ; PIC12F863 Configuration Bit Settings ; ; ::RL220105 - Opener for Transit Bike Garage: ; bei Betätigung eines Tasters jeweils rechtes und linkes Tor ; soll ein Relais und eine LED für ca. 5-6 Sek. angesprochen werden ; ; als Taktgeber wird der intern Takt von 4MHz genutzt, dazu __CONFIG _FOSC_INTOSCIO .... ; bei externen Takt __CONFIG _FOSC_XT ...... setzen ; Assembly source line config statements ; PIC12F683 Configuration Bit Settings ; Assembly source line config statements #include "p12f683.inc" ;#include ;auch gültige Schreibweise __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF) ;Variablendefinition im Block CBLOCK 0x20 d1 d2 d3 ENDC org 0 ; Start at flash address delay res 1 counter res Start: bsf STATUS,RP0 ; Select Registers at Bank 1 movlw 0x70 movwf OSCCON ; Set the internal clock speed to 8 Mhz movlw 0x07 movwf CMCON0 ; Turn off Comparator (GP0, GP1, GP2) clrf ANSEL ; Make all ports as digital I/O MOVLW b'00011000' ; GP5=Out, GP4 und GP3=In, GP3 und GP2=Out, GP0=Out movwf TRISIO ; TRISIO = 0x38 bcf STATUS,RP0 ; Back to Registers at Bank 0 MainLoop: ;die LED's aus BCF GPIO, GP0 BCF GPIO, GP1 BCF GPIO, GP2 BCF GPIO, GP5 CALL BLINK goto MainLoop ; Goto MainLoop BLINK ;prüfen ob ein Taser gedrückt wurde? BTFSS GPIO, GP3 ;wenn GP3 offen = 0 (GP3 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen goto NOTPRESS BTFSS GPIO, GP4 ;wenn GP4 offen = 0 (GP4 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen goto NOTPRESS ;ab hier Blinkroutine ausführen BSF GPIO, GP1 ; BSF S steht für Set setzt GP1 auf 1 -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen call _delay_0_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 = ca. 1 Sekunde BCF GPIO, GP1 ; BCF S steht für Set setzt GP2 auf 0 -> schaltet den Port auf LOW ; BSF GPIO, GP2 ; BSF S steht für Set setzt GP1 auf 1 -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen call _delay_0_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 = ca. 1 Sekunde BCF GPIO, GP2 ; BCF S steht für Set setzt GP1 auf 0 -> schaltet den Port auf LOW goto BLINK NOTPRESS btfss GPIO, GP3 ;wenn GP3 offen = 0 (GP3 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen call _SET_LEDS_GPR_ON ;dann das, schalte LED an GP2 für ca. 6 Sekunden an BCF GPIO, GP2 ; BCF S steht für Set setzt GP2 auf 0 -> schaltet den Port auf LOW btfss GPIO, GP4 ;wenn GP4 offen = 0 (GP4 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen call _SET_LEDS_GPL_ON ;dann das, schalte LED an GP1 für ca. 6 Sekunden an BCF GPIO, GP1 ; BCF S steht für Set setzt GP1 auf 0 -> schaltet den Port auf LOW goto NOTPRESS ;RL Functions _SET_LEDS_GPL_ON ;Aktionen Links auslösen ;BANKSEL PORTB ; wechselt PortB ; die gewünschte LED einschalten BSF GPIO, GP1 ; BSF S steht für Set setzt GP0 auf 1 -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BCF GPIO, GP1 ; BCF S steht für Set setzt GP0 auf 0 -> schaltet den Port auf LOW BSF GPIO, GP0 ; BSF S steht für Set setzt GP1 auf 1 -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 ;BCF GPIO, GP0 ; BCF S steht für Set setzt GP0 auf 0 -> schaltet den Port auf LOW BCF GPIO, GP0 ; BCF S steht für Set setzt GP1 auf 0 -> schaltet den Port auf LOW BSF GPIO, GP1 ; BSF S steht für Set setzt GP0 auf 1 -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BCF GPIO, GP1 ; BCF S steht für Set setzt GP0 auf 0 -> schaltet den Port auf LOW goto NOTPRESS ; Loop NOTPRESS _SET_LEDS_GPR_ON ;Aktionen Links auslösen ;BANKSEL PORTB ; wechselt PortB ; die gewünschte LED einschalten BSF GPIO, GP2 ; BSF S steht für Set setzt GP2 auf 1 -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BCF GPIO, GP2 ; BCF S steht für Set setzt GP0 auf 0 -> schaltet den Port auf LOW call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BSF GPIO, GP5 ; BSF S steht für Set setzt GP5 auf 1 -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden BCF GPIO, GP5 ; BCF S steht für Set setzt GP5 auf 0 -> schaltet den Port auf LOW BSF GPIO, GP2 ; BSF S steht für Set setzt GP2 auf 1 -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BCF GPIO, GP2 ; BCF S steht für Set setzt GP0 auf 0 -> schaltet den Port auf LOW goto NOTPRESS ; Loop NOTPRESS ;--------------------------------------------------------------------------- ; Delay = 1 seconds ; Clock frequency = 4 MHz ; Actual delay = 1 seconds = 1000000 cycles ; Error = 0 % _delay_2s ;999990 cycles movlw 0x07 movwf d1 movlw 0x2F movwf d2 movlw 0x03 movwf d3 _delay_2s_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto _delay_2s_0 ;6 cycles goto $+1 goto $+1 goto $+1 ;4 cycles (including call) return ; Delay = 0.2 seconds ; Clock frequency = 4 MHz ; Actual delay = 0.2 seconds = 200000 cycles ; Error = 0 % _delay_0_2s ;199998 cycles movlw 0x3F movwf d1 movlw 0x9D movwf d2 _delay_0_2s_0 decfsz d1, f goto $+2 decfsz d2, f goto _delay_0_2s_0 ;2 cycles goto $+1 return END ;EOF: Main.asm