Datum: 23.04.2008 00:00
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
Datum: 24.04.2008 21:09
>keine eine idee? > MOVF TMR0,0 > SUBLW D'1' Du setzt TMR0 auf 0 und danach wird er nie wieder gelesen.
Datum: 24.04.2008 21:38
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.....
Datum: 24.04.2008 21:49
>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 ?
Datum: 24.04.2008 21:54
Datum: 24.04.2008 22:47
Also ich kann auch keinen Fehler finden. Auch nicht bei der Initialisierung. Wenn den Taster wirklich entprellt ist, sollte es eigentlich funktionieren. Sven
Datum: 25.04.2008 10:46
sublw D'1' bewirkt W = 1 - W und nicht, wie vielleicht angenommen, W = W -1 Grüße Claus
Datum: 25.04.2008 13:56
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
Datum: 15.05.2008 18:25
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.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel