www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kleines Problem mit dem Z-Flag


Autor: PIC Nico (eigo) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein kleines Problem und das lautet wie folgt:

Ich habe am Eingang PORTA Pin 0-3 Low aktive Eingabeschalter
und einen Übernahmeschalter an PORTA,4 der ist High aktiv!

So wir nehmen jetzt an, dass am PORTA folgendes Byte anliegt:
'00011111' weil ich die Schalter 0-3 NICHT betätigt habe den
Schalter 4 schon...


1.Zeile >movf PORTA,0
2.Zeile >xorlw B'00011111'
3.Zeile >movlw '0'
4.Zeile >BZ Para

So in der 1.Zeile schreibt er den ganzen PORTA (also 00011111)
in das Arbeitsregister!
In der 2.Zeile verknüpft er das Arbeitsregister (00011111) mit
dem festen Wert/Zahl '00011111' also das selbe was an PORTA ist.
Daher ergibt die Operation 0, denn die Eingänge des XOR sind gleich
und es kommen 0 raus.

Was bedeutet, dass das Z-Flag auf High gesetzt wird, weil das
Z-Flag ja bei einer Operation die null ergibt gesetzt wird.

In der 3 Zeile schreibt er '0' ins Arbeitsregister, die brauche ich
später weil ich sie auf einer LCD anzeigen muss...

...In Zeile 4 weiß er jetzt, weil das Z-Flag 1 ist, dass es sich
tatsächlich um eine '0' handelt (bzw. alle Eingabeschalte am PORTA aus)
und der Übernahmeschalte An ist.
Also springt er zum Unterprogramm "Para".




MEIN PROBLEM:
______________________________________________________
In MPLAB im Stimulus funktioniert es!
ABER ich hab mir noch ein weiteres Programm besorgt um auch die LCD zu 
simulieren, doch da setzt er zwar das Z-Flag bei der XOR verknüpfung,
löscht es aber beim nächsten Takt wieder... Und genau das versteh ich 
nicht.

Es handelt sich um folgendes Programm:
-PIC Simulator IDE v.6.71 (OshonSoft)

LG Eigo

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@eigo

>löscht es aber beim nächsten Takt wieder... Und genau das versteh ich
>nicht.

Möglicherweise löscht der Befehl das Z-Flag. Wäre zwar doof, aber bei 
PICs ist alles möglich ;-)
Schau dir mal die Doku der Assemblerbefehle an.

MFG
Falk

: Bearbeitet durch Admin
Autor: PIC Nico (eigo) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Befehle hab ich studiert. Und bin deshalb ja so verwirrt.

Aber es scheint ja eigentlich zu klappen, denn im Stiumlus geht es ja
nur in diesem anderen Simulation Programm macht er Quatsch..

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, und was macht er in der Realität, und was sagt das Datenblatt dazu.

Kann es sein, dass Software (auch ein Simulator) Fehler enthält?

Autor: tachauch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die MOVL.. Befehle beeinflussen keine Flags. Ist ja auch logisch, 
denn Literal ist immer ein fester Wert und da ist ja bekannt, was 
passiert. Wenn ich eine '0' lade, dann braucht mir kein Flag zu sagen, 
dass die Operation '0' ergibt und deswegen wird's auch nicht gemacht.

Ich tippe auch eher auf einen Bug(?) in deinem 3rd-Party-Simulator.

Autor: PIC Nico (eigo) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tachauch wrote:
> Also die MOVL.. Befehle beeinflussen keine Flags. Ist ja auch logisch,
> denn Literal ist immer ein fester Wert und da ist ja bekannt, was
> passiert. Wenn ich eine '0' lade, dann braucht mir kein Flag zu sagen,
> dass die Operation '0' ergibt und deswegen wird's auch nicht gemacht.
>
> Ich tippe auch eher auf einen Bug(?) in deinem 3rd-Party-Simulator.


Also sagst du auch es müsste so funktionieren?

;Das für ne 0

movf PORTA,0
xorlw B'00011111'
movlw '0'
BZ Para

;Dann weiter für ne 1

movf PORTA,0
xorlw B'00011110'
movlw '0'
BZ Para

und so weiter..

Autor: tachauch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, sollte funktionieren.

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.