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
Viel Spaß beim Ostereier suchenCode:.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![]()
Lesezeichen