PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CPI und BREQ funktionieren nicht



Digital-Ghost
24.12.2012, 13:33
Hallo und frohe Weihnachten :p

ich sitze jetzt bestimmt schon 2 Stunden vor dem Problem einen Vergleich durchzuführen ohne Erfolg.
Und zwar habe ich auf dieser Seite http://www.dieelektronikerseite.de/uC%20Ecke/Lections/AVR-ASM/Flags%20-%20Der%20AVR%20gibt%20Flagsignale.htm diesen Beispielcode gefunden:

.include "m8def.inc"

Start:
ldi r16,0xFF
out DDRD,r16

ldi r16,127 ; Lade r16 mit 127

cpi r16,127 ; Vergleiche r16 mit 127

breq LED_on ; Wenn Werte gleich, springe

LED_off:
ldi r16,0b00000000
out PORTD,r16

rjmp Start

LED_on:

ldi r16,0b00000001

out PORTD,r16
rjmp Start

Dieser sollte ja rein theoretisch zu "LED_on" springen, da die zu vergleichenden Werte bei cdi ja gleich sind und im SREG das ZFLAG auf 0 sein müsste aber dem ist nicht so.
Weder auf dem IC noch mit simulavr. Ich bin mit dem Debugger alles mal Schritt für Schritt durchgegangen und mir ist aufgefallem, dass (laut der oben genannten Seite) das 2 Bit von Rechts im SREG das ZFLAG ist. Dieses ist bei mir jedoch immer 1. Egal welche Vergleiche ich mit cdi durchführe..
Woran kann das liegen? Ich bin total verwirrt momentan vor allem da ich da gerade erst einsteige.

Gruß :Weihnacht

robocat
24.12.2012, 14:46
Ich kenne mich mit Simulavr nicht aus, mit was hast du assembliert?
Jedenfalls funktioniert dein Code mit AVR-Studio, das Z Flag wird in der CPI Zeile gesetzt und nach LED_on gesprungen.

Grüße

markusj
24.12.2012, 14:46
Woran kann das liegen?

Falsches HEX-File simuliert/gebrannt? Ich habe den Code gerade im AVR Studio getestet und er tut genau das was er soll.

mfG
Markus

Digital-Ghost
25.12.2012, 11:30
Ich kenne mich mit Simulavr nicht aus, mit was hast du assembliert?
Jedenfalls funktioniert dein Code mit AVR-Studio, das Z Flag wird in der CPI Zeile gesetzt und nach LED_on gesprungen.

Grüße

Also assembliert habe ich mit folgendem Script das ich in der ersten Zeile für Assembler angepasst habe


VAR1="main"
VAR2="Main"

rm $VAR2".*"

avr-as -o $VAR2".elf" -mmcu=atmega168 $VAR1".S"
avr-objdump -h -S $VAR2.elf >$VAR2".lss"
avr-objcopy -R .eeprom -O ihex $VAR2.elf $VAR2".hex"
avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex $VAR2.elf $VAR2".eep"
avrdude -c avrispmkII -p m168 -P usb -e -v -Uflash:w:$VAR2.hex:a


Es funktioniert damit auch eigentlich alles bisher nur die bedingten Sprünge nicht das verwundert mich.

- - - Aktualisiert - - -

Der Simulavr braucht zum Debuggen die erzeugte .elf Datei und bei der Hex Datei bin ich mir sehr sicher das die gebrannt wurde da die alten bei jedem Scriptaufruf gelöscht werden.

- - - Aktualisiert - - -

Ich habe es gelöst bekommen!
Es war ein Fehler das Script zur C Kompilierung auf Assembler anzupassen.
Nachdem ich nur die Standardparameter für avr-as und avr-ld gesetzt habe gings.
Da sieht man mal das das Script oben alles mitmacht :D

Danke für eure Hilfe :)