Ich hab da ein kleines Problem mit ner Verzögerung. Und zwar will ich
nen Delay von einer Minute aufbauen. Als PIC kommt ein PIC16F54 zum
Einsatz.
Von der Sprut-Seite hab ich mir die Verzögerungsroutine geklaut und ein
wenig modifiert sodass ich, grob, auf eine Minute komme. Aber meine
Mathekenntnis lässt mich grade wohl im Stich denn die Verzögerung ist
deutlich länger als eine Minute:
1 | movlw .240 ;240 Schleifendurchgänge für 1 Minute: 60*4*250ms=240*250ms=1min
|
2 | movwf outerloop
|
3 | ;*******geklaut von Sprut*******
|
4 | loop1 movlw .250 ;250 Schleifendurchgänge für 250ms
|
5 | movwf innerloop
|
6 | ;delay für eine Millisekunde, 1 MHz Oszilator
|
7 | loop2 movwf .27 ;110/4=27.5, 110 fuer 4 MHz
|
8 | movwf onemsloop
|
9 | loop3 nop
|
10 | nop
|
11 | nop
|
12 | nop
|
13 | nop
|
14 | nop
|
15 | decfsz onemsloop ;onemsloop bei 0?
|
16 | goto loop3 ;nein, nochmal durchlaufen
|
17 | ;delay für eine Millisekunde ist fertig
|
18 | decfsz innerloop ;innerloop fertig?
|
19 | goto loop2 ;nein, nochmal durchlaufen
|
20 | ;*******geklaut von Sprut*******
|
21 | ;250 mal eine Millisekunden-Schleife ausgeführt
|
22 | decfsz outerloop ;outerloop bei 0?
|
23 | goto loop1 ;nein, nochmal durchlaufen
|
Stelle ich outerloop auf 4 ein für eine Sekunde dann läuft das Ganze
zwischen drei und vier Sekunden (die eine Minutenvariante hab ich nicht
ausgemessen). Als Oszilator habe ich einen RC-Schwingkreis (Config auf
RC eingestellt) aber auch mit nem 4 MHz Quarz komme ich nicht hin. Kann
es sein, dass der Oszilatoreingang am PIC kaputt ist? Ich hab leider
derzeit keinen zweiten PIC mit dem ich testen könnte. Hab zwar hier
neben dem 16F54 noch zwei 16F84 aber die sind mit dem PICKIT2 nicht
programmierbar. Vielleicht ist aber auch was am Code falsch und jemandem
springt es jetzt so direkt ins Auge nur ich seh mal wieder nix.