Daten lesen/schreiben von/auf SRAM
Hallo Gemeinde,
es kommt doch schon mal öfters vor das man Daten in längerer Form speichern oder lesen muss, hier mal ein kleines Beispiel
wie man es organisieren könnte.
PortB = Ein/Ausgabe
PortD = schreiben/lesen
Code:
.include "m8def.inc" ;Atmega8
.def temp0 = r16 ;
.def temp1 = r17 ;
.def temp2 = r18
.def temp3 = r19 ;
.def temp4 = r20
.def cnt = r21
.equ Data = $0060 ;Startzelle festlegen
.equ Dataend = Data+5 ;Endpunkt
.cseg
.org $0000
rjmp stack
.org $0001 ;1
reti;rjmp INT_0
.org $0002 ;2
reti;rjmp INT_1
.org $0003 ;3
reti;rjmp INT_OC2
.org $0004 ;4
reti;rjmp INT_OVF2
.org $0005 ;5
reti;rjmp INT_ICP1
.org $0006 ;6
reti;rjmp INT_OC1A
.org $0007 ;7
reti;rjmp INT_OC1B
.org $0008 ;8
reti;rjmp INT_OVF1
.org $0009 ;9
reti; rjmp INT_OVF0
reti ;a keine SPI Routinen
.org $000b ;b
reti;rjmp INT_URXC
.org $000c ;c
reti;rjmp INT_UDRE
.org $000d ;d
reti;rjmp INT_UTXC
.org $000e ;e
reti;rjmp adc_rdy
.org $000f ;f
reti;rjmp eeprom_rdy
.org $0010 ;10
reti;rjmp ac_int
reti ;11 keine 2wireRoutinen
reti ;12 keine SPMRoutinen
;***************************Init mit allem drumdran*****************
stack: ldi temp1,high(ramend) ;Stackpointer festlegen
out sph, temp1
ldi temp1,low(ramend) ;Stackpointer festlegen
out spl, temp1
start: sbic pind,0
rcall write_sram ;Daten speichern
sbic pind,1
rcall read_sram ;Daten lesen
rjmp start
;Daten schreiben
write_sram:
clr temp0
out portb,temp0
out ddrb,temp0 ;Ausgabe
rcall load_Data_point ;Startpunkt laden
write_sram2:
in temp0,pinb ;Datenquelle ist nur ein Bsp
st x+,temp0 ;von temp0 auf Sram speichern dann +1
cpi xl,Dataend ;vergleiche
brne write_sram2 ;solange != springe
ret
;Daten lesen Ausgabe auf Portc
read_sram:
ldi temp0,$ff
out ddrb,temp0 ;Ausgabe
rcall load_Data_point ;Startpunkt laden
read_sram2:
ld temp0,x+ ;in temp0 laden von Sram dann +1
out portb,temp0 ;Datenausgabe ist nur ein Bsp
cpi xl,Dataend ;vergleiche
brne read_sram2 ;solange != springe
ret
;**Pointer kann X, Y, Z sein
load_Data_point:
ldi xh,high(Data)
ldi xl,low(Data)
ret
Viel Spaß beim Ostereier suchen ;)