Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Ist bei wahlfreiem Speicherzugriff auch WORD-Speicherung möglich? Kategorie: Programmierung ASM (von Micha - 20.02.2004 8:33)
 Als Antwort auf Re: Ist bei wahlfreiem Speicherzugriff auch WORD-Speicherung möglich? von Christian - 12.02.2004 16:45
hi,

warum schwer, wenns auch einfach geht?
zum Assembler-Programm:
In den ersten 4 Zeilen werden die Parameter übergeben, die du im Basic definiert hast.
Also Basic-Code:

define I2C_Addy byte [1]
define EEprom_Daten byte [2]
define EEprom_High byte [3]
define EEprom_Low byte [4]

so korrespondiert das noch mit dem Assembler.
Nun darfst du aber auch statt 2 Bytes ein Word definieren:

define EEprom_HiLo word [2]

so entsprechen byte 3 und 4 dem word 2!!!

Du willst aber ein Word ins EEprom schreiben.
Hast also z.B. folgendes definiert:

define SpeicherWord word [12]

dann darfst du auch die enstprechenden Bytes definieren (zusätzlich):

define SpeicherByteHigh byte [23]
define SpeicherByteLow byte [24]

oder umgekehrt.

Nun kannst du Daten als Word berechnen und dann beide Bytes nacheinander im EEprom ablegen (die ja letztlich das Word sind).

OKI???

grüße
Micha




> hola!!
>
> vielen dank, werd ich gleich mal ausprobieren, auf die idee wär ich nie
> gekommen.
> danke nochmal
> GREETZ
>
> Christian
>
> > da du schreibst dass du von assembler wenig ahnung hast,
> > denk ich mal das du lediglich diese assembler routine
> > von basic aus aufrufen willst.
> >
> > die EEprom Bausteine 24C.. sind allesamt 8 Bit Speicher,
> > können also nicht direkt 16 Bit wörter aufnehmen.
> > Du wirst also dein 16 Bit wort in 2 Byte Teilen müssen.
> >
> > probier es mal so:
> >
> > define w word
> > define b1 byte
> > define b2 byte
> >
> > b1=w
> > b2=abs(w/256)
> > end
> >
> > Die beiden Bytes kannst du dann speichern und später wieder
> > zusammenfügen:
> >
> > w=b1+(b2*256)
> >
> >
> > > Hola!
> > >
> > > Ich hab mit untem stehenden ASSEMBLER-Programm die Möglichkeit BYTE-Werte zu schreiben und zu lesen. Jetzt würde ich aber gerne auch WORD-Werte schreiben/lesenkönnen. Da das Proggi aus dem Netz ist und ich keine bis wenig Ahnung von Assembler habe, hoffe ich auf Hilfe!!
> > > Hier das ASSEMBLER-PROGRAMM
> > >
> > > ;Wahlfreier Zugriff auf ein EEPROM EEIO.ASM
> > >
> > > AdrI2C .equ $A1  ;Uebergabe Busadresse
> > > Dat .equ $A2  ;Daten in/out
> > > AdrHi .equ $A3  ;interne Adresse
> > > AdrLo .equ $A4  ;als Word
> > >
> > > .org $101
> > > ;Einsprung $101, Daten schreiben
> > > ;CC-EEPROM vom Bus abmelden
> > > jsr $08BB  ;I2C_ReadLast
> > > ;Byte in eigenes EEPROM schreiben
> > > ldx AdrI2C  ;I2C-Adresse
> > > jsr $083C  ;I2C_Start
> > > ldx AdrHi  ;Adr High
> > > jsr $0846  ;I2C_Write
> > > ldx AdrLo  ;Adr Low
> > > jsr $0846  ;I2C_Write
> > > ldx Dat    ;Daten
> > > jsr $0846  ;I2C_Write
> > > jsr $08E5  ;I2C_Stop
> > > ;CC-EEPROM wieder anmelden
> > > ldx #$0A0  ;Adresse 24C65, write
> > > jsr $083C  ;I2C_Start
> > > ldx $066  ;AdrCounter Hi
> > > jsr $0846  ;I2C_Write
> > > ldx $067  ;AdrCounter Lo
> > > jsr $0846  ;I2C_Write
> > > ldx #$0A1  ;Adresse 24C65, read
> > > jsr $083C  ;I2C_Start
> > > rts
> > > ;Einsprung $130, Daten lesen
> > > ;CC-EEPROM vom Bus abmelden
> > > jsr $08BB  ;I2C_ReadLast
> > > ;Byte aus eigenem EEPROM lesen
> > > ldx AdrI2C  ;I2C-Adresse
> > > jsr $083C  ;I2C_Start
> > > ldx AdrHi  ;Adr High
> > > jsr $0846  ;I2C_Write
> > > ldx AdrLo  ;Adr Low
> > > jsr $0846  ;I2C_Write
> > > ldx $0A1  ;I2C-Adresse
> > > incx    ;Adr+1
> > > jsr $083C  ;I2C_Start
> > > jsr $086F  ;I2C_Read
> > > sta Dat    ;Daten speichern
> > > jsr $08BB  ;I2C_ReadLas
> > > ;CC-EEPROM wieder anmelden
> > > ldx #$0A0  ;Adresse 24C65, write
> > > jsr $083C  ;I2C_Start
> > > ldx $066  ;AdrCounter Hi
> > > jsr $0846  ;I2C_Write
> > > ldx $067  ;AdrCounter Lo
> > > jsr $0846  ;I2C_Write
> > > ldx #$0A1  ;Adresse 24C65, read
> > > jsr $083C  ;I2C_Start
> > > .end
> > >
> > > DANKE schon mal im Voraus!
> > >
> > > Christian
> > >
> > >

 Antwort schreiben

Bisherige Antworten: