-
-
Neuer Benutzer
Öfters hier
Adresse von Basic aus weitergeben ???
Hi leute
Möchte Adresse von PCF 8574 AP aus Basic weitergeben in Assembler.
Wie kann ich mir sicher sein, das diese Adresse unter $96 im Assembler
auftaucht.
Danke
-
Administrator
Robotik Visionär
Du kannst in Assembler auf alle Basic Variablen zugreifen. Du mußt nur daran denken das die Basic Variablen immer bei $0A1 anfangen. Es ist also wichtig in welcher Reihenfolge du welche Variablentypen in Basic definierst.
Zum Beispiel hab ich als erstes imme rfolgendes in Basic definiert:
define Adresse byte 'Bytevar $0A1 für I2C Bus
define Daten byte 'Bytevar $0A2 für I2C Bus
Dann konnte ich auch in Assembler über $a1 auf Adresse und $a2 auf Daten zugreifen. Genauso geht es mit nachfolgenden Variablen. Du mußt nur bedenken das Variablen vom Typ Word beispielsweise 2 Bytes benötigen. Also aufpassen beim weiterzählen. Am besten wie ich immer die Adresse dahinterschreiben
Übrigens beim AVR-Basic (Bascom-Compiler) ist das alles etwas einfacher, zudem braucht man da Assembler kaum. Also wenn man beginnt viel in Assembler zu machen und an die Grenzen von 250 Byte kommt, dann ist das ne tolle Alternative.
Gruß Frank
-
Erfahrener Benutzer
Roboter-Spezialist
CCBASIC pusht die Parameter des SYS Aufrufs als WORDs auf den Stack; der Stack begint ab $91(HI)/$92(LO); durch den PUSH wrden die WORDs "von hinten nach vorne" gepusht.
Also:
SYS ADDR DREI, ZWEI, EINS
pusht die drei WORDs
"EINS" nach 91/92,
"ZWEI" nach 93/94
"DREI" nach 95/96
und startet das Assembler-Prog auf ADDR.
Wenn in DREI die PCF-Adresse steht (z. B. DREI = &H70),
dann steht in $96 der LO-Teil davon ($70), und in $95 der HI-Teil (0).
-
Die erste Methode ist immer dann sinnvoll, wenn auch von Assembler an Basic übergeben werden müssen.
-
Hi....Danke für Antwort.
Ich komme aber nicht weiter......es geht einfach nicht.
Ihr mal kurz das Basic.
define adresse byte
define wert byte
define richtung byte
define ausgabe byte
define nummer byte
nummer = 0
#loop
adresse = &H70 ;PCF 8574 AP
richtung = &H00000001
wert = nummer
sys &H0101 adresse,wert,richtung
Pause 50
nummer = nummer + 1
print ausgabe
print nummer
goto loop
syscode "I2CASM.S19"
im Assembler sieht das so aus:
cport equ $02 ;Digitalport 9-16
cpdir equ $06 ;Richtung Port c
daten equ 0 ;Port(9)
clock equ 1 ;Port(10)
richtung equ $92 ;Schreiben(1),Lesen(0)
i2cwert equ $94 ;Stackwert(Uebergabe
adresse equ $96 ;aus Basic
ausgabe equ $A1 ;Basic Useradresse
merker equ $91 ;RAM - Variable
wert equ $93 ;RAM - Variable
Es ist bestimmt nur eine sache der Variablen.
Denn der Assembler läft, sehe ich an den Pausenzeiten.
Es muß ja nur ein Zeichen kommen, dann weiß ich auch wo ich ansetzen muß.
Aber es geht ja gernicht.
-
Erfahrener Benutzer
Roboter-Spezialist
Wenn nur ein einziges WORD von Assembler an Basic übergeben werden muss ("return value"), dann geht auch die zweite Methode:
Man schreibt das Ergebnis-WORD im Assembler nach $91/$92, und kann es dann nach dem SYS Aufruf in Basic lesen:
result = assembler
mit
#assembler
SYS ADDR...
RETURN
-
Erfahrener Benutzer
Roboter-Spezialist
Ich hab Dein Basic / Assembler - Programm so verstanden:
In Assembler schreibst Du ein Ergebnis nach "ausgabe"; das ist $A1.
In Basic printest Du "ausgabe".
Das liegt aber nach Deinen DEFINEs (wegen automatischer Vergabe der Adressen durch den Compiler) nicht auf $A1, sondern auf $A4; auf $A1 liegt "adresse".
Also z. B.
In Basic als erstes DEFINE die "ausgabe" hinschreiben
-
Neuer Benutzer
Öfters hier
Ich möchte im Basic die Adresse für den Pcf angeben und dies in Assembler übernehmen.
Danach muß ich im Basic angeben, ob er schreiben oder lesen soll.
Das erfolgt duch die Angabe der Richtung. (&H00000001)
Nun muß der Wert übergeben werden, den er dann im Assembler schreiben soll.
Habe auch eine Relaiskarte angeschlossen um den Erfolg zu sehen.
Der wert soll bei 0 beginnen und um +1 add. werden.
Nach jedem schreiben müsste ein Relais schalten.
Es stimmt entweder die adresse für PCF nicht oder der wert wirt nicht übergeben.
-
Erfahrener Benutzer
Roboter-Spezialist
Hast Du das Basic DEFINE für "ausgabe" schon angepasst?
-
Neuer Benutzer
Öfters hier
Ja hab ich
Hat den der PCF 8574 AP denn überhaupt die Adresse &H70 ??
ist &h70 = &H01110000 ?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen