Bij een PIC 16F627 met een 4Mhz XT ( Velleman Kit )
Probeer ik een delay van 1 sec te krijgen.

Normaal wordt de klokfrequentie intern door 4 gedeeld, dus :

4.000.000 / 4 = 1.000.000

Met de prescaler op 1/64

MOVLW B'00000101'
MOVWF OPTION_REG

=== > dit geeft : 1.000.000 / 64 = 15.625 Hz

15.625 / 125 / 125 = 1

De volgende loop gebruik ik hiervoor :

DELAY MOVLW D'125'
MOVWF TIMER2
LOOP_1 MOVLW D'125' ;
MOVWF TIMER1
LOOP_2 DECFSZ TIMER1,F
GOTO LOOP2
DECFSZ TIMER2,F
GOTO LOOP1
RETLW 0

En toch krijg ik geen delay van 1 sec...

Wat doe ik fout ?

Bedankt op voorhand

G.

theoretisch zit je goed maar de prescaler is alleen van invloed op je interupt timers zult dus een interupt moeten opwekken

je pauze code vraagt ook tijd deze zul je dus van de totaale tijd af moeten trekken als het je puur om een tijdelijke pauze gaat(dus geen klok oid)
zul je dus je waardes hoger moeten nemen

Ok ! Bedankt
Zoeken we even uit.
We gaan verder experimenteren...

Heb ondertussen dit geprobeerd en het lukt !

G.

;the TMR0 has been prescaled by 256 using the OPTION register).

movlw d'16' ; sets up postscaler
movwf Post16 ;

_1SecDelay
movf TMR0, w ; is number in TMR0, 0?
btfss STATUS, Z ; ?
goto _1SecDelay ; no, so keeps looping

incf TMR0, f ; avoides multiple zero read of TMR0
decfsz Post16, f ; has this happened 16 times?
goto _1SecDelay ; no, so keeps looping