Forum: Mikrocontroller und Digitale Elektronik Register25 wird nicht benutzt


von Koe (Gast)


Lesenswert?

1
;
2
; Definitionsdatei für Atmega8
3
;
4
.NOLIST
5
.include "m8def.inc"
6
.LIST
7
8
;
9
; Register Definition
10
;
11
12
.DEF regA = R24
13
.DEF regB = R25
14
.DEF tmp = R16
15
16
.equ c1 = 1 ; Bestimmt die Blinkfrequenz
17
  ldi tmp,1<<DDB0 | 1<<DDB1 ; Portbit ist Ausgang
18
  out DDRB,tmp
19
  clr tmp
20
21
Loop:
22
  sbi PORTB,1 ; Portbit auf high
23
  cbi PORTB,0
24
  ldi regB, HIGH(c1)
25
  ldi regA, LOW(c1)
26
27
Loop1:
28
  nop
29
  nop
30
  nop
31
  nop
32
  nop
33
  sbiw regA,1
34
  brne Loop1
35
  cbi PORTB,1 ; Portbit auf low
36
  sbi PORTB,0 ; Protbit0 auf high
37
  ldi regB, HIGH(c1)
38
  ldi regA, LOW(c1)
39
40
Loop2:
41
  nop
42
  nop
43
  nop
44
  nop
45
  nop
46
  sbiw regA,1
47
  brne Loop2
48
  rjmp Loop

Bin gerade daran dieses Programm zu Simulieren. Mir ist aufgefallen das 
in Register25 gar kein Wert geladen wird. Warum wird dieser dann 
Deklariert?
( hier regB )
bei
1
ldi regB, HIGH(c1)
 müsste dort ein Wert geladen werden.

HIGH ist dazu nirgend wo deklariert ob dies nun 1 oder 0 ist. Wenn 
natürlich hier 0b00000000 geladen wir ist verständlich warum ich nichts 
sehe. Aber dann währe ja regB gar nicht notwendig.

von Ralf G. (ralg)


Lesenswert?

Koe schrieb:
> sbiw regA,1
Hier wird's verwendet.

LOW, HIGH sind Makros, mit denen man eine 16-Bit-Konstante in die 
Register verteilen kann.

: Bearbeitet durch User
von Heinz V. (heinz_v)


Lesenswert?

Koe schrieb:
> Bin gerade daran dieses Programm zu Simulieren. Mir ist aufgefallen das
> in Register25 gar kein Wert geladen wird. Warum wird dieser dann
> Deklariert?

Weil im aktiven Teil des Codes ein sbiw (Subtract Immediate from Word) 
steht, würdest Du das Highbyte micht Initialisieren würde der Assembler 
einen 'Type mismatch Error' monieren, und das ist auch sinnvoll das das 
so ist.

von Koe (Gast)


Lesenswert?

Ralf G. schrieb:
>> sbiw regA,1
> Hier wird's verwendet.

regA ist doch R24 laut .def also wir hier auf das register24 zugegriffen 
und nicht r25 oder versteh ich da was falsch ?

von Heinz V. (heinz_v)


Lesenswert?

Koe schrieb:
> regA ist doch R24 laut .def also wir hier auf das register24 zugegriffen
> und nicht r25 oder versteh ich da was falsch ?

Auf beide den ein Word sind 2x8Bit

von Ralf G. (ralg)


Lesenswert?

Koe schrieb:
> oder versteh ich da was falsch ?

Ja.
Wie findest du das raus?
Du nimmst deine Assemblerreferenz und schaust mal, was 'sbiw' eigentlich 
macht.

von Heinz V. (heinz_v)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

Vergiss dieses .def-Gedödel. Kannst du für Spielzeug-Proramme benutzen. 
Wenn es mal etwas großer wird, gehen dir die Register aus.

MfG Spess

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.