Hallo,
Ik ben momenteel bezig met picbasic, maar ik zit vast met de timer. Nou wilde ik om te proberen een simpel proggramma schrijven waar een led na een aantal seconden aan en uit gaat. Beetje moeilijk gezocht, maar het gaat om het principe.
Het programma blijft in de while loop hangen en maakt(volgens mijn mening) na (128(prescaler)*256*100(hij telt tot 100 mbv hulp variabele) cycles het ledje vervolgens 5 seconden laag.
code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
CLEAR ;We gebruiken een 16F628A type
ON_INTERRUPT GOTO LED_UIT
; 76543210
TRISA = %00010000
TRISB = %11111111
SYMBOL T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
SYMBOL T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
SYMBOL GIE = INTCON.7 ' Global Interrupt Enable
SYMBOL PS0 = OPTION_REG.0 ' Prescaler ratio bit-0
SYMBOL PS1 = OPTION_REG.1 ' Prescaler ratio bit-1
SYMBOL PS2 = OPTION_REG.2 ' Prescaler ratio bit-2
SYMBOL PSA = OPTION_REG.3 ' Prescaler Assignment (1=assigned to WDT 0=assigned to oscillator)
SYMBOL T0CS = OPTION_REG.5 ' Timer0 Clock Source Select (0=Internal clock 1=External PORTA.4)
SYMBOL LED = PORTA.1 'pin 18
DIM hulp AS WORD
hulp=0
GOTO MAIN
LED_UIT:
hulp= hulp+1
T0IF=0
CONTEXT RESTORE
END
MAIN:
GIE = 0 ' Disable global interrupts
WHILE GIE = 1 ' Make sure they are off
GIE = 0 ' Continue to clear GIE
WEND
GIE = 0 ' Turn off global interrupts
PSA = 0 ' Assign the prescaler to Interne WDT oscillator
PS0 = 1 ' Set the prescaler
PS1 = 1 ' to increment TMR0
PS2 = 1 ' every 128h instruction cycle
T0CS = 0 ' Assign TMR0 clock to internal source
TMR0 = 0 ' Clear TMR0 initially
T0IE = 1 ' Enable TMR0 overflow interrupt
GIE = 1 ' Enable global interrupts
LED=1
WHILE 1=1
IF hulp < 100 THEN
LED=1
ENDIF
IF hulp >= 100 THEN
hulp = 0
LED=0
DELAYMS 2000
ENDIF
WEND
END
Weet iemand of ik iets fout doe met de timer, of met de intterupt. Of dat er misschien een fout in het programma zit. Alle suggesties zijn welkom, want ik wordt er helemaal gek van
PS let niet op de structuur van het programma, beetje slordig door alle aanpassingen.
/edit: even de code aangepast nav reactie van arco