mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16F627A assembler: PORTA verhält sich bei XOR nicht wie


Autor: Simon A. (moony) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich habe hier einen interrupt timer. jede sekunde sollten die ausgänge 
von porta und portb von 0 auf 1 gehen und dann umgekehrt.
mit portb klappt das auch aber bei porta bleibt (ich teste das mit einer 
led) der ausgang mal ein paar durchgänge auf 1 und wechselt nur 
manchmal, scheinbar willkürlich, wieder auf 0 und bleibt dann wieder 
einige durchgänge so.
kann mir jemand sagen, wo der fehler liegt? ich habe den verdacht, dass 
mit der config was nicht stimmen könnte, komme aber nicht weiter.


Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Simon B.,

poste mal das Programm - sonst wird es schwierig.

Otto

Autor: Simon A. (moony) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sorry, dachte ich hätte es angehängt.

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in deinem listing ist die rede von einem '16f84' du betreibst aber laut 
deinen angaben einen '16f627' sind die beiden den kompatibel?

Autor: Franko Phil (sgssn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meist fehlt das hier:

movlw  7
movwf  CMCON  ;PortA nur digital, Comparator off


Gerhard

Autor: Simon A. (moony) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die antworten. ich weiß nicht genau in wie weit 16f84 und 
16f627a kompatibel sind aber ich habe die config so gut ich konnte 
angepasst.
die comperatoren ausschalten hat leider auch nichts bewirkt. ich habe es 
auch an verschiedenen stellen im code versucht oder muss es an eine ganz 
bestimmte?
ich habe es auch mit "CMCON  EQU  H'001F'" probiert, ging auch nicht.

Autor: Timo Zehender (typic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Du redest von Interrupt Timer
Wenn du interrupts machst  gibt es folgendes zu beachten:

- Du musst am Anfang deiner Interrupt- Routine das Arbeitsregister und 
die    Flags sichern und am Ende der Routine sie wieder zurückladen, 
sonst gibt's Verwirrungen zwischen Interrupt und Main-Programm.


Für einen 16F627a beginn in deiner Routine einfach mit

    movwf   w_temp
    swapf   STATUS,w
    bcf     STATUS, RP0       ; status_temp in Bank 0
    movwf   status_temp

und ende deine Routine so:

    swapf   status_temp,w
    movwf   STATUS
    swapf   w_temp,f
    swapf   w_temp,w
    retfie

- Du musst das zugehöhrige Flag-Bit wieder auf "0" setzen. Sonst wird 
gleich nach dem Ende des Interrupts ein neuer Interrupt erzeugt.

- Wichtig ist auch das du die richtigen Voreinstellunge für einen 
Interrupt  gemacht hast.
Schau dir im Datasheet noch mal alle Register genau an !!

Hoffentlich hilft's dir was !!

Autor: moony (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
danke für die antwort. ich hab im interrupt init die zeile "bcf STATUS, 
RP0" hinzugefügt und am interrupt ende "movw status_temp,w" mit "swapf 
..." vertauscht, am verhalten von porta hat das leider nichts geändert.
der timer ist jetzt jedoch langsamer geworden, ungefähr halb so schnell.
ich werd wohl doch das datenblatt nochmal genau lesen müssen :)

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.