Hallo Forum,
ich wollte mal die Genies fragen ob sie eine Antwort auf mein Problem
haben.
Die frage ist dämlich aber gibts es nicht soetwas wie subi für add?
Ich muss nämlich die Konstante 10 zu einem Register addieren, bis jetzt
mach ich das relativ umständlich indem ich ein Register vorlade, und
dann 2 Register addiere.
Nach sbic kann ja nur ein Befehl stehen so wies aussieht.
Gibt es irgendeine möglichkeit Temp so zu bearbeiten dass in einem
Befehl 10 addiert werden?Wenn nicht, was wäre auf jeden fall schneller
als meine Lösung?
Aber schaut selbst, dies ist das Unterprogramm zur Heizungsregelung.
T1 ist das was gemessen wird, der Messbereich ist 10°C bis 35,5°C,
damit alles in ein Byte passt wird z.B. 23,2°C als 132 interpretiert ,
für Aquarienverhältnisse ist der Messbereich angemessen.
Die Routinen zur Messwerterstellung existieren noch nicht, aber das hier
ist schonmal die Regelroutine.
Tsoll ist die gewollte Temperatur (+-1°C jeweils)
1
eHeizung:
2
3
ldi tsoll, 155 ;Testing only
4
5
mov temp, tsoll
6
7
Sbis portb, PB0 ;skip if PB0=1(Heizung an)
8
sbci temp, 10
9
10
11
sbic portb, PB0 ;skip if PB0=0
12
rcall addieren ;An diesem Rcall reg ich mich so auf
>gibts es nicht soetwas wie subi für add?
Nein. Die schlauen Entwickler der AVR-Controller haben gecheckt, dass es
verschwenderisch wäre, sowohl eine "addi"- als auch eine
"subi"-Instruktion zu realisieren. Man braucht ja nur eine davon: "addi
10" = "subi -10". Beides bewirkt exakt das gleiche (insbesondere auch
bzgl. der gesetzten Flags im SREG). Deshalb hat man auf das "addi"
verzichtet und den Platz auf der Chipfläche für was anderes,
sinnvolleres genutzt.
Ich habe gedacht -10 wäre nicht so valid, ist auch schon ne weile her
als ich mich letztes mal mit AVR's beschäftigt habe ohne den Durchbruch.
Danke für die Info klasse, die AVR Entwickler hatten viel Verstand...
BTW Chipfläche :
In welcher Strukturgröße gibt es denn unsre Dinos?
120nm? Oder 240nM?
Gruß Jens
> Danke für die Info klasse, die AVR Entwickler hatten viel Verstand...
Naja, ich bin nicht so ganz zufrieden, ich denke, es sollte zumindestens
ein Pseudoinstruction "ADDI" geben um Programme besser lesbar zu halten.
Der Assembler würde das dann natürlich zu "SUBI" codieren. Beim ST6
gibt's sowas dauernd, u.a. die NOP Instruction.
Der Befehl "JMP irgendwohin" könnte auch heissen "LD PCR,irgendwohin"
Ist klar =)
Kanns sein dass der AVR Simulator nicht viel von den EEProm
Codebesipielen hält oder warum liest er immer 0xFF aus (wie als wär der
EEPROM an der Sprungmarke leer)?
Hab die Files genauso kopiert und dem simulator gesagt atmega 8....
komisch
Gruß Jens
>Naja, ich bin nicht so ganz zufrieden, ich denke, es sollte zumindestens>ein Pseudoinstruction "ADDI" geben um Programme besser lesbar zu halten.
Dann mach dir doch den Befehl mit einem Macro.
Gruss Helmi
Ein ADDI Rd,K als Pseudoinstruktion für SUBI Rd,-K wäre verwirrend, da
das Carry-Flag andersherum gesetzt würde als man es bei den anderen
Addierbefehlen (bspw. ADD Rd,Rr) gewohnt ist. Vermutlich deswegen
haben ihn die Atmel-Entwickler weggelassen, obwohl sie sonst mit
Pseudoinstruktionen nicht gegeizt haben.
Ein Makro könnte aus diesem Grund ebenfalls für Verwirrung sorgen.
Jens wrote:
> Ahjo, habt recht...>> aber geht bei euch im Simulator auch EEPromsachen ned?
Doch, geht, musst nur vorher die aktuellen Werte von der Platte laden,
das macht der Sim nicht von alleine, das hat sein Schöpfer vergessen.
...
Hannes Lux wrote:
> Doch, geht, musst nur vorher die aktuellen Werte von der Platte laden,> das macht der Sim nicht von alleine, das hat sein Schöpfer vergessen.>> ...
Wie macht man denn das? Mit Stimulus datei und dann eine Simu-Eigene
Port-EEProm Schreiberoutine oder gibts was eingebautes_
Menu Debug Upload Memories
oder so ähnlich, ich habe es jetzt nicht vor mir.
Ist es denn soooo schlimm, mal etwas in den Menüs herumzukramen und zu
schauen, was die Software so alles anbietet?
...