Forum: Mikrocontroller und Digitale Elektronik Einfaches addieren mit 10?


von Jens343 (Gast)


Lesenswert?

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
13
       
14
15
16
     cp t1, temp
17
     brsh aus  ;same or higher
18
     brlo an   ;lower
19
20
     
21
addieren:
22
23
     ldi temp2, 10   ;unschön
24
     add temp, temp2 ;1°C addieren ;unschön
25
       ret  
26
       
27
aus:
28
     cbi Portb, PB0 ;clear bit
29
     ret
30
31
32
an:
33
     sbi Portb, PB0 ;set bit (Heizung an)
34
     ret
35
36
;*************eHeizung_Ende***************

Gruß Jens

von Fabian B. (fabs)


Lesenswert?

Probiers mal mit

subi temp, -10

funktioniert einwandfrei ;-)

Gruß
Fabian

von AVRFan (Gast)


Lesenswert?

>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.

von Jens343 (Gast)


Lesenswert?

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

von Peter X. (vielfrass)


Lesenswert?

> 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"

von Jens343 (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

>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

von yalu (Gast)


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

Ahjo, habt recht...

aber geht bei euch im Simulator auch EEPromsachen ned?

von Hannes L. (hannes)


Lesenswert?

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.

...

von Moritz E. (devmo)


Lesenswert?

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_

von Hannes L. (hannes)


Lesenswert?

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?

...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.