list p=16f628 #include ;**************************************************** ; Variablennamen vergeben zaehler equ 0x20 zaehler2 equ 0x21 zaehler3 equ 0x22 ;**************************************************** org 0x00 ;Reset Vektor goto Init ;**************************************************** Init bsf STATUS, RP0 ; Bank 1 movlw B'00000000' ; PortB alle outputs movwf TRISB bcf STATUS, RP0 ; Bank 0 clrf PORTB ; alle Pins low setzen bsf CMCON, CM0 bsf CMCON, CM1 bsf CMCON, CM2 ;**************************************************** ; Timer0 konfigurieren bsf STATUS, RP0 bcf OPTION_REG, T0CS ; ClockSource = 1/4 des internen Takt = 1Mhz bsf OPTION_REG, PSA ; ohne Vorteiler bcf STATUS, RP0 clrf TMR0 ;Timer0 auf null setzen movlw D'20' ;zaehler variable mit zahl 20 füllen movwf zaehler bcf INTCON, T0IF ; Clear INT-Flag ; 8Bit Timer muss 4 mal überlaufen um 1 (1,024s) sekunde verstreichen zu lassen ; 8Bit Timer muss 20 mal überlaufen um circa 5 sekunden verstreichen zu lassen main btfss INTCON, T0IF ; prüfen ob Timer0 übergelaufen ist goto main bcf INTCON, T0IF decfsz zaehler, 1 ; wenn Timer Null übergelaufen ist, zaehler -1 goto main bsf PORTB, 4 ; wenn zaehler = 0 PIN RB4 high setzen call Loop ; Pause bcf PORTB, 4 ; Pin RB4 low setzen movlw D'20' ; zahl 20 wieder in zaehler schreiben movwf zaehler clrf TMR0 ;Timer0 auf Null setzen goto main Loop movlw D'100' movwf zaehler2 Loop1 nop nop nop nop decfsz zaehler2, 1 goto Loop1 return end ;**********************************************************