list p=16f870
include "p16f870.inc"
BACKUP_STATUS EQU 0x20
BACKUP_W EQU 0x21
testbyte EQU 0x22
testbyte2 EQU 0x23
temp1 EQU 0x24
temp2 EQU 0x25
temp3 EQU 0x26
teller1 EQU 0x27
org 0x00 ;standaard programmeer adres
GOTO hoofdprogramma
org 0x04 ;interrupt programmeer adres
GOTO interrupt_afhandeling
;*****interrupt programma*****
interrupt_afhandeling:
BTFSS PIR1, TMR1IF
GOTO return_from_interrupt
MOVWF BACKUP_W ;Inhoud van W en STATUS tijdelijk opslaan
MOVF STATUS, 0 ;
MOVWF BACKUP_STATUS ;
begin_interrupt:
COMF testbyte, 0
MOVWF PORTB
GOTO einde_interrupt
einde_interrupt:
BCF STATUS, IRP ;selecteer geheugenbank 0/1 voor indirecte adressering
BCF PIR1, TMR1IF
MOVF BACKUP_STATUS, 0 ;tijdelijk opgeslagen waarden in W en STATUS terugplaatsen
MOVWF BACKUP_STATUS ;
MOVF BACKUP_W, 0 ;
return_from_interrupt:
RETFIE
;*****standaard programma*****
hoofdprogramma:
;BCF STATUS, IRP ;selecteer geheugenbank 0/1 voor indirecte adressering
MOVLW b'00001111'
MOVWF PORTB
MOVLW b'00001111'
MOVWF testbyte
CALL initialiseer_tijd
CALL initialiseer_LEDS
einde_hoofdprogramma:
GOTO einde_hoofdprogramma
initialiseer_tijd:
BCF STATUS, IRP ;selecteer geheugenbank 0/1 voor indirecte adressering\
;BCF STATUS, RP0
;BCF STATUS, RP1
BSF INTCON, GIE ;activeer globale interrupt
BSF INTCON, PEIE ;activeer pheriperal interrupt
BSF PIE1, TMR1IE ;activeer timer interrupt
BCF T1CON, T1CKPS0 ;selecteren prescale value (in dit geval 1:1)
BCF T1CON, T1CKPS1 ;
BSF T1CON, TMR1CS ;selecteer externe klok, 20Mhz
BSF T1CON, T1OSCEN ;activeren oscillator
CALL DELAY ;delay voor activeren oscillator
BCF T1CON, T1SYNC ;synchroniseer externe klok ingang
BSF T1CON, TMR1ON ;activeer timer
RETURN
;*****open poorten voor aansturing van de LEDs*****
initialiseer_LEDS:
;BCF STATUS, IRP
BCF STATUS, RP1 ;selecteer geheugenbank 1 voor directe adressering
BSF STATUS, RP0 ;
MOVLW 06h ;Poort A kan als analoog en als digitaal gebruikt worden
MOVWF ADCON1 ;Met deze twee instructies wordt poort A als digitaal gebruikt
BCF TRISA, 2 ;Poort A pin 2 in schrijfmodus
CLRF TRISB ;Poort B in schrijfmodus
BCF STATUS, RP1 ;Selecteer geheugenbank 0 voor directe adressering
BCF STATUS, RP0 ;
BCF PORTA, 2 ;stuur een opgaande flank naar poort A
BSF PORTA, 2 ;voor aansturing van de LEDS
RETURN
DELAY: ; zorgt voor een vertraging (0,4 seconde)
MOVLW teller1
MOVWF temp1
seconden:
CALL delay10
DECFSZ temp1, 1
GOTO seconden
RETURN
delay10: ; zorgt voor een vertraging (10 milliseconde)
MOVLW d'100' ; W register = decimaal 100
MOVWF temp2
millis: ; deze loop wordt 100 maal aangeroepen
CALL delay100
DECFSZ temp2, 1
GOTO millis
RETURN
delay100: ; zorgt voor een vertraging van 486 cycli (100 microseconde)
MOVLW d'162'
MOVWF temp3 ; temp1 = 162
micros: ; deze loop wordt 81 maal aangeroepen (3 * 162 cycli)
DECFSZ temp3,1
GOTO micros
RETURN
einde:
END
hmmmm... :inquisitive: now why doesn't it turn on the high bit LED's?