PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zwei Einsprungadressen im Assemblerprogramm



andyoo1
20.02.2004, 11:59
Hi

Kann mir jemand sagen, wie ich zwei Einsprungadressen im Assemblerprogramm bekomme.
Ich dachte .org $101 und .org $102 ( aber das geht einfach nicht)

jörg
20.02.2004, 13:20
Ich verstehe Deine Frage nicht ganz, und weiss auch nicht, was "geht einfach nicht" bedeutet.

Wenn Du ein AS-Programm schreibst und dann die Adresse(n) für die SYS-Aufrufe in CCBASIC brauchst: Schau ins Übersetzungs-Listing, und schreib die Adressen in den SYS-Befehl hin, die Du aufrufen willst. Dazu musst Du im Assembler nix besonderes machen; CCBASIC springt zu Laufzeit einfach da hin und hofft, dass das schon gut gehen wird.

Wenn Du (warum auch immer) im Assembler ORG-en willst: beim AS80 hab ich nicht ".ORG" geschrieben, sondern " org" (ohne Punkt, mit SPACE vorneweg), und per Parameter (war das "-i" ?) die Befehlssyntax auf "Gross-/Kleinschreibung" gesetzt.

andyoo1
20.02.2004, 14:57
Hi

Ich möchte aus dem Basic ins Assembler springen, um einen PCF 8574 einmal zu lesen.
Weiter untem im Basic möchte ich wieder ins Assembler springen um auf diesem PCF zu schreiben.
Dafür brauch ich zwei Einsprungadressen. Beide habe ich aus der Liste.
Aber im Testlauf geht nichts mehr. Assemblerprogramm zeigt auch keinen Fehler an.


im Basic einmal: sys &H0101 und weiter unten sys &H0102
im Assembler:
.org $101
jsr I2C_Start
lda $0A1
jsr I2C_Write
lda $0A2
jsr I2C_Write
jsr I2C_Stop
jsr I2C_Ack
rts

.org $102
jsr I2C_Start
lda $0A1
jsr I2C_Read
lda $0A2
jsr I2C_Stop
jsr I2C_NoAck
rts

20.02.2004, 15:00
jsr I2C_Write hab ich noch vergessen.kommt nach lda $0A1

mike123
20.02.2004, 15:14
Hi

Kann mir jemand sagen ob sich das lesen auf einem PCF 8574 kürzen läst.

I2C_Read BCLR SDA,DIR
CLRA
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
LDX PORT1
LDX PORT2
RORX
ROLA
BSET SCL,PORT1 ; scl hi
BSET SCL,PORT2 ; scl hi
RTS

Ich dache mit (LDX #8)aber komme nicht weiter.
Es ist doch 8x das gleiche. Das muß doch gehen ?????ODER

jörg
20.02.2004, 16:32
Hallo andy001:
Mir kommen 2 Dinge komisch vor:
1. Durch den ORG auf &102 überschreibt Dein READ code den WRITE code, der ja bei $101 beginnt und bei $102 noch lange nicht fertig ist. Das kann nicht gehen. Lass den ORG weg, und übernimm für den SYS zum Lesen genau die Adresse, die im Listing für den READ rauskommt (das ist dann nicht mehr $102).
2. In der READ routine muss das eben gelesene Byte gespeichert werden, also sollte es wohl nicht heissen "jsr I2C_Read / lda $0A2 " sondern "jsr I2C_Read / sta $0A2".



2. Ich meine, es fehlt generell noch ein JSR auf I2C_ReadLast.
3
Vorschlag: Nimm meinen I2C Code

jörg
20.02.2004, 16:34
PS: der Rest meiner Antwort war Mist:
Du verwendest ja wohl nicht den system I2C-Bus, sondern Deinen eigenen...

jörg
20.02.2004, 16:50
Hallo mike123,

wenn ich's recht sehe, willst Du nicht von EINEM PCF lesen, sondern von ZWEI, die an verschiedenen I2C Bussen hängen (eine Bus am PORT1 und der andere Bus am PORT2). Aber irgendwie hast Du Dich da ver-kopiert:
1. " LDX PORT1 / LDX PORT2": damit ist der zuerst gelesene Wert vom PORT1 nicht mehr da
2. "BSET SCL,PORT1 ; scl hi / BSET SCL,PORT2 ; scl hi ": Du setzt zwar SCL bei beiden Port auf HI, aber die müssen doch auch beide wieder LO werden, damit der PCF was tut.

Willst Du denn wirklich von zwei I2C-Bussen lesen?

Verkürzen: das sollte auch in einer Schleife gehen: Zähler von 8 runterzählen und dann Schleife oder aufhören.

Aber schau doch vorher mal da rein: https://www.roboternetz.de/phpBB2/viewtopic.php?t=676

andyoo1
20.02.2004, 16:56
Hi Jörg

Alles i.o.
Ich bin durch das &H0102 in die falsche Richtung gelaufen,
denn das Programm ist bei &H0102 noch lange nicht fertig.
Habe meinen Fehler erkannt. Im List steht doch alles drin.
Habe Adresse nur auf &H0115 gesetzt und alles ist ok.
Bei &H0115 ist auch der Assembler mit dem Programm fertig.

Ich Danke Dir für Antwort, denn List brachte mich zum umdenken.

andyoo1
20.02.2004, 18:38
Hi mike123

Kannst du deine Frage bitte besser beschreiben.
Womit möchtest du den Pcf lesen.
Das ist wichtig, um dir eine Antwort zu geben. Hier eine Adresse die du dir anschauen solltest......
http://www.wolfgang-back.com/PDF/Assembler.pdf

jörg
20.02.2004, 19:06
@andyoo1: hey, gut!

Frank
20.02.2004, 19:53
Hi
Die Linkadresse steht schon ewig im Linkverzeichnis. Ihr solltet auch mal rein schaun das lohnt sich ;-) Ist wirklich eine sehr gute Seite.

Außerdem könnte mal der ein oder andere einen Link in der Linksektion ergänzen - noch immer muss ich 90% eingeben :-(

Also wenn ihr mich fragt, dann lohnt es sich nicht an den 255 Bytes so lang rum zu knappern! Wenn es zu eng wird dann wäre ein Umstieg auf AVR sicher günstiger. Mit Bascom ist die Programmierung sogar sehr ähnlich in Basic. Und Assemblerbefehle lassen sich da auch schön einfügen! Aber war nur persönliche Meinung ;-)

jörg
21.02.2004, 17:15
Hi Frank:

Folgsam wie ich bin, hab ich noch gestern versucht, Link's zu ergänzen; die wurden zwar quittiert, stehen aber nicht drin. Tut mir leid!

Frank
21.02.2004, 18:06
Danke! Jetzt stehen sie drin! Dauert manchmal etwas weil ich die erst bestätigen muss und das nicht immer gleich sehe.

Gruß Frank