LDI NUM,0x0A ;laddar NUM med 10, då det är 10 tecken jag vill läsa.
SUB MEMOTY,NUM ;tar bort 10 och sedan kollar vi om vi är under 0 eller över 50.
SUNREADOUT:
SUB MEMOTY,NUM ;tarbort 10 för att läsa 10 tecken, om jag inte tar SUB så kommer jag att läsa om 10 tecken.
Jag ser dock att jag borde kolla om SUBREADOUT: är under noll då jag tar sub en gång till. Detta är vad det borde hända. (mina grymma paint skills)
Vi börjar på röd prick.
Grönt kryss är det vi har läst
Lila är pekaren som går två steg bak
Blå läser 10 gånger, och då har vi läst blått kryss
Märkte något när jag gjorde paint. Så om jag minskar int2 med 2 gånger istället för en gång och sedan hoppar över minskningen innan läsning så borde jag inte komma på negativ sida.
INT1:
LDI NUM,0x0A ;ladda med 10 då vi vill läsa 10 gånger
ADD MEMORY,NUM
CP MEMORY,MAX ;kollar om vi är över 50 (MAX =50)
BRLO SUBREADOUT ;om inte över 50 läs minnet 10 gånger, ta bort 10 innan läsning
SUB EEADDR2,NUM ;om över 50 gå till baka där vi var och gå ut ur int1
RETI
INT2:
LDI NUM,0x0A
SUB MEMORY,NUM
SUB MEMORY,NUM ;minskar två gånger
BRMI READOUT ;om under 0 lägg till 10, annars läs minnet 10 gånger
ADD MEMORY,NUM
ADD MEMORY,NUM
RETI
SUBREADOUT:
SUB MEMORY,NUM ;gå tillbaka ditt vi var först i MEMORY
READOUT:
DEC NUM ;minska med 1
BRMI RETURN ;om under 0 avsluta
RCALL READ ;här läser den ett tecken
INC MEMORY_PLACE ;vi ökar platsen i MEMORY med 1 så att den läser nästa tecken
RJMP READOUT
RETURN: RETI
Detta borde funka bättre? (har svårt att kolla med hårdvaran nu i helgen)
Edit:
Det är Atmel studio jag kör med, men har hårdvara då Atmel studio suger med interrupts och lite annat.