hallo,
ich habe erst vor kurzem angefangen mikrocontrollern zu programmieren.
jetzt wollte ich mit dem timer0 ein kleinen zähler bauen, der dann
einzelne leds leuchten lässt. funktioniert leider nicht so ganz. hoffe
mir kann jemand helfen? hab ich vielleicht was falsch initialisiert?
hier mein quellcode:
list p=16f627
#include <P16f627.INC>
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON &
_WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
ORG 0
GOTO RESET
; **********************************
; ** RESET : main boot routine **
; **********************************
RESET MOVLW B'00000111' ;Disable Comparator module's
MOVWF CMCON ;
BSF STATUS,RP0 ;Switch to register bank 1 MOVLW
B'11101000' ;Set PIC options (See datasheet).
;Timer0 aktiviert
;RA4 istTaktquelle, kein Vorteiler
MOVWF OPTION_REG ;Write the OPTION register.
CLRF INTCON ;Disable interrupts
MOVLW B'11000000'
MOVWF TRISB ;RB7 & RB6 are inputs.
;RB5...RB0 are outputs.
MOVLW B'11111111' ;all RA ports are inputs
MOVWF TRISA
BCF STATUS,RP0 ;Switch Back to reg. Bank 0
CLRF PORTB
MAIN
CLRF TMR0
LOOP
CALL PRUEFEN
GOTO LOOP
PRUEFEN
CLRF STATUS
MOVF TMR0,0
SUBLW D'1'
BTFSC STATUS,Z
CALL IMPULSAN1
CLRF STATUS
MOVF TMR0,0
SUBLW D'2'
BTFSC STATUS,Z
CALL IMPULSAN2
CLRF STATUS
MOVF TMR0,0
SUBLW D'3'
BTFSC STATUS,Z
CALL IMPULSAN3
NOP
RETURN
IMPULSAN1
MOVLW B'00000001'
MOVWF PORTB
RETURN
IMPULSAN2
MOVLW B'00000010'
MOVWF PORTB
RETURN
IMPULSAN3
MOVLW B'00000100'
MOVWF PORTB
RETURN
END
das programm kann noch nichts tolles, soll aber zum lernen dienen und
später erweitert werden und dann auch in eine schaltung eingebaut
werden. achja, RA4 (also der takt für den timer0) kommt über einen
(entprellten) taster.
vielen dank schon mal
>keine eine idee? > MOVF TMR0,0 > SUBLW D'1' Du setzt TMR0 auf 0 und danach wird er nie wieder gelesen.
mit "movf tmr0,0" lade ich doch den aktuellen zählerstand ins das arbeitsregister oder nicht? und dann ziehe ich vom arbeitsregister 1 (2 bzw. 3) ab und überprüfe das zero-flag.....
>mit "movf tmr0,0" lade ich doch den aktuellen zählerstand ins das >arbeitsregister Ja, da hast du recht. Ich sollte zu PIC ASM besser keine Antworten geben ;) Was funktioniert bei deinem Programm nicht ?
der timer0 soll einfach bei jeden high-level an pin ra4 hochzählen. bei zählerstand 1 soll die 1. led an leuchten, bei 2 die 2. led und bei 3 die 3. mehr solls erstmal nicht machen.....aber es geht immer nur die erstes led an.
Also ich kann auch keinen Fehler finden. Auch nicht bei der Initialisierung. Wenn den Taster wirklich entprellt ist, sollte es eigentlich funktionieren. Sven
sublw D'1' bewirkt W = 1 - W und nicht, wie vielleicht angenommen, W = W -1 Grüße Claus
Ist in dem Fall aber egal, da er danach auf Ergebnis==0 vergleicht. Und nur wenn beide Ziffern gleich waren ist das Ergebnis Null und es wird gesprungen. Er könnte den Vergleich aber auch mit xor machen. Nur wenn alle Bits gleich sind, kommt bei xor Null heraus. Sven
Ich vermut di konfiguration hat nicht hin. Les mal bei [[http://www.sprut.de/electronic/pic/grund/timer/timer.htm]] wie du den Timer richtig konfigurirst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.