mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pic 16f627 timer0


Autor: Paul B. (power-paul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul B. (power-paul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keine eine idee?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>keine eine idee?

>    MOVF  TMR0,0
>    SUBLW  D'1'

Du setzt TMR0 auf 0 und danach wird er nie wieder gelesen.

Autor: Paul B. (power-paul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.....

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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 ?

Autor: Paul B. (power-paul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kann auch keinen Fehler finden. Auch nicht bei der 
Initialisierung. Wenn den Taster wirklich entprellt ist, sollte es 
eigentlich funktionieren.

Sven

Autor: Claus P. (claus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sublw D'1' bewirkt W = 1 - W
und nicht, wie vielleicht angenommen, W = W -1

Grüße
Claus

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.