Assembly avr szubrutin

Assembly avr szubrutin
2014-10-27T16:16:55+01:00
2014-10-29T12:22:39+01:00
2022-12-01T18:41:51+01:00
Jhanee
itt a feladatom: 
A problémám a 2-es gombon(B2) lévő menüponttal van: "az előző feladatrészben feltöltött terület utolsó 10 bájtján levő értéket kell összeadni"
az én kódom az első 10 bájtot agyja össze. Hogyan ugrok a végére?

;Készítsen menüt, amelyben a 0-4-ig levő gombokkal választhatja a megvalósítandó feladatot a ;mátrix billentyűzeten: include "m128def.inc" .CSEG .org 0x0 rjmp start .org 0x100 start: ;Stack: ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ;Inic: ;LED ldi r16,0xF0 out ddrb,r16 out ddrd,r16 ;7szegmenses ldi r16,0xFF out ddra,r16 ;Bill.matrix ldi r16,0b0_1111_000 out ddrc,r16 ;RGB led sbi ddrc,7 sbi ddre,2 sbi ddre,3 ;Kesleltetes delay: /* ldi r22,0 ldi r21,0 c1: dec r21 brne c1 dec r22 brne c1 ret */ ;Gombok ldi r16,0b0_1000_000 out portc,r16 ; call delay sbis PINC,1 call B0 ldi r16,0b0_0001_000 out portc,r16 ; call delay sbis PINC,0 call B1 ldi r16,0b0_0001_000 out portc,r16 ; call delay sbis PINC,1 call B2 ldi r16,0b0_0001_000 out portc,r16 ; call delay sbis PINC,2 call B3 ldi r16,0b0_0010_000 out portc,r16 ; call delay sbis PINC,1 call B4 B0: ;Töltse fel az r10 regiszter 12-vel, az r12 regisztert 5-tel! Abban az esetben, ha r10-ben levő ;érték 4-gyel osztható maradék nélkül és r12 páros, akkor LED-ekre írjon 5 értéket, különben ;pedig 6 értéket! ldi r17,12 mov r10,r17 ldi r17,5 mov r12,r17 ciklusB0: ldi r19,1 and r19,r12 brbs 1,ciklusB02 jmp nemoszthato ciklusB02: ldi r18,3 and r18,r10 brbs 1,oszthato jmp nemoszthato oszthato: ldi r16,5 swap r16 out portb,r16 ret nemoszthato: ldi r16,6 swap r16 out portb,r16 ret B1: ;Töltse fel az adatmemória 0x50 db bájtját a 0x200-as címtől kezdődően számokkal 0x200- ;tól kezdődően visszafele! ldi ZL,low(0x0200) ldi ZH,high(0x0200) ldi r17,0x50 ldi r18,0x020 ciklusB1: st Z+,r18 subi r18,1 dec r17 brne ciklusB1 ret B2: ;Adja össze az előző feladatrészben feltöltött terület utolsó 10 bájtján levő értéket ;szubrutin segítségével, és az összeget írassa ki a LED-ekre! ldi ZL,low(0x0200) ldi ZH,high(0x0200) ldi r17,10 ldi r18,0 ciklusB2: ld r19,Z+ add r18,r19 dec r17 brne ciklusB2 out portd,r18 swap r18 out portb,r18 ret B3: ;Olvassa be a billentyűzet mátrix 4-es billentyűzetet tartalmazó sorának billentyűjének ;bármelyikét, és írja ki a hétszegmenses kijelző 3. digitjére! ldi r18,0b0_0010_000 out portc,r18 ; call delay sbis PINC,4 ldi r17,0b1_011_0100 out porta,r17 ret B4: sbi porte,2 cbi porte,2 ret
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd