Atmega 8535 avr assembly da autodidatta, aiuto

di il
1 risposte

Atmega 8535 avr assembly da autodidatta, aiuto

Buongiorno, devo superare un esame universitario e sto studiando assembly per programmare un microcontrollore atmega 8535, ho studiato la teoria ma si sa che con la pratica non c'entra nulla quindi chiedo il vostro aiuto. Ecco un esempio di compito :
Si scriva una routine di servizio dell'interrupt associato al INT_1 (INT_1_int) in modo che svolga la seguente funzione: Si supponga che nella memoria programma alla locazione di indirizzo DOVE ci siano contenuti due byte di dati come in figura. HDATA LDATA. I dati si intendono come rappresentazione in binario naturale di numeri interi. La funzione sviluppi la seguente espressione: conti il numero n di zeri nel registro a 16 bit composto da HDATA e LDATA calcoli HDATA+ 4^n su 16 bit e lo mandi in uscita alla porta B e C. In caso di overflow mandi in uscita il valore 0F alla porta A. Si configurino le interrupt e le porte, tutti i registri devono restare invariati.
Un collega me lo ha mandato risolto ma non capisco molte cose, eccolo
in r16,gimsk
ori r16 ,0b10000000
out gimsk, r16
in r16, mcucr
ori r16, 0b00001100
out mcucr ,r16
ser r16
out ddra,r16
out ddrb, r16
out ddrc, r16
in r16 ,sreg
fin qua ci sono ma poi mi perdo, potreste dirmi in cosa consistono tutti questi passaggi?
push r16
push r0
push r17
push r18
push r19
push r20
push r21
push r29
push r30
push r31
INT_1_int:

lds zh,high(dove)
lds zl, low(dove)
lsl zl
ror zh
lpm
mov r16,r0
inc zl
lpm
mov r17, r0
clc
ldi r18 ,16
mov r29, r17
conteggio0:lsl r16
rol r17
dec r18
tst r18
breq calcolo4n
brcs conteggio0
brcc trovato0

trovato0: inc r19 ; zeri
rjmp conteggio0

calcolo4n: ldi r20,4
dec r19 ; bisogna sempre dec di uno prima di una moltiplicazione o potenza
espon: lsl r20 ;|
rol r21 ;|
lsl r20 ;|>>>> 2 volte perchè 4^n e non 2
rol r21 ;|
brcs overflow
dec r19
tst r19
breq somma
brne espon
somma: add r20, r29
brcs riporto
brcc uscita

riporto:adc r21 ,r30
brcs overflow
brcc uscita

uscita: out portb, r20
out portc, r21
rjmp fine
overflow:ldi r16 ,0x0f
out porta ,r16
rjmp fine

fine : pop r31
pop r30
pop r29
pop r21
pop r20
pop r19
pop r18
pop r17
pop r0
pop r16
out sreg , r16
reti

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte