Kleines Problem mit dem Z-Flag

OP Persönliche Seite #1214121
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
Gast #1214245
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.
OP Persönliche Seite #1214269
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..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren