Forum: Mikrocontroller und Digitale Elektronik Assemblerdirektiven für IO-Register?


von Michael (Gast)


Lesenswert?

Servus,

Programmierumgebug ist AVR Studio, Assembler, Zielobjekt ein ATMega8.

Ich suche eine Möglichkeit, wie ich zum Beispiel "PORTB, 0" durch 
"Ausgang1" ersetzen kann.

Will nämlich möglichst einfach bei Bedarf nachträglich die Pinbelegung 
meiner IO-Ports ändern, ohne an sehr vielen Stellen im Quelltext 
rumzusuchen.

.def und .equ führten nicht zum Erfolg, komisch... ;)

Bliebe mir natürlich noch Suchen und Ersetzen, aber es gibt doch 
sicherlich einen komfortableren Weg?

Vielen Dank und Grüße,
Michael

von Peter R. (gelb)


Lesenswert?

1
.equ LED_port = PORTA
2
.equ LED_bit = 0
3
4
SBI LED_port, LED_bit

Grüße, Peter

von Karl H. (kbuchegg)


Lesenswert?

Michael schrieb:

> Will nämlich möglichst einfach bei Bedarf nachträglich die Pinbelegung
> meiner IO-Ports ändern, ohne an sehr vielen Stellen im Quelltext
> rumzusuchen.
>
> .def und .equ führten nicht zum Erfolg, komisch... ;)

Warum nicht?
1
.include "m8def.inc"
2
3
.equ LED_PORT = PORTB
4
.equ LED_DDR  = DDRB
5
.equ LED_PIN  = PB4
6
7
     sbi DDRB, LED_PIN         ; am Led Port den Pin auf Ausgang stellen
8
9
loop:
10
     sbi LED_PORT, LED_PIN     ; den Pin auf 1
11
     cbi LED_PORT, LED_PIN     ; den Pin auf 0
12
     rjmp loop

von Peter R. (gelb)


Lesenswert?

1
.macro LED_ein
2
  sbi PORTA, 0
3
.endmacro
4
5
;...
6
LED_ein
7
;...


Grüße, Peter

von Michael (Gast)


Lesenswert?

Danke für die Antworten,

die Aufteilung in z.b. "PORTB" und "2" ginge natürlich schon...

Vielleicht schweif ich mal kurz aus:
Ich habe auf meiner Platine zum Beispiel zwei Ausgangspins nebeneinander 
liegen. Verdrahtet ist der eine z.b. auf PB0, der andere allerdings auf 
PC7.

Will ich nun beide softwaretechnisch vertauschen, muss ich also sowohl 
den Port als auch den Pin ändern.
Wenn ich nun die "Smbole" änder, auch für die Ports, sind die anderen 
Ausgangspins am Port B und C natürlich daneben. Also wieder im Quelltext 
korrigieren.

Deswegen hätt ich am liebsten eine Lösung, wo ich zum Beispiel
"AusgangA1 = PORTB, 0" definiere, und dann nur noch "sbi AusgangA1" 
schreiben muss.

Grüße,
Michael *der wahrscheinlich mal wieder voll auf dem Schlauch steht...*

von Peter D. (peda)


Lesenswert?

In C kann man ganz bequem nur einen Namen für ein Bit zuweisen und der 
wird dann in das Byte und die Bitnummer auseinanderklamüsert.

Hier mal ein Beispiel:
http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip

Der Assembler kann ja auch #define, da müßte es auch irgendwie 
hinzukriegen sein.


Peter

von Michael (Gast)


Lesenswert?

Ja, mit
1
#define AusgangA1 PORTB,1
2
;...
3
SBI AusgangA1

funktionierts so wie gewünscht.

Vielen Dank für die Hilfe euch allen :-)


*auf #define wär ich wohl nie gekommen...*

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.