INFO - FAQ - CC2-Forum - CCPro-Forum |
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 |