Witam!
W programie napisanym w Bascom do wyświetlania na matrycy 8x8 , używam rejestru przesównego, do którego ładuję dane poleceniem " SHIFTOUT" wygląda to tak:
Chcąc troszkę to przyspieszyć wpadłem na pomysł żeby zoptymalizować tą funkcję i skleciłem kod w ASM:
Niby wszystko działa, ale
Zmienna temp wyświetlana jest do góry nogami.
Dlaczego tak się dzieje i jak to poprawić

W programie napisanym w Bascom do wyświetlania na matrycy 8x8 , używam rejestru przesównego, do którego ładuję dane poleceniem " SHIFTOUT" wygląda to tak:
Shiftout Ds_a6276 , Clock_a6276 , Temp
Chcąc troszkę to przyspieszyć wpadłem na pomysł żeby zoptymalizować tą funkcję i skleciłem kod w ASM:
$asm
lds r18 , {Temp} 'Wczytaj do r18 zmienną Temp
rcall ShiftByte
ret
Shiftbyte:
ldi r19, 8 ' 8 bitów do wysłania
Shiftloop:
sbrc r18, 8 '
sbi PORTB, 0 ' Ds 1
sbrs r18, 8 '
cbi PORTB, 0 ' Ds 0
nop '
sbi PORTB, 1 ' pulse shift clock
lsr r18 ' next bit
cbi PORTB, 1 ' end shift clock pulse
dec r19 '
brne ShiftLoop ' loop for 8 bits
sbi PORTB, 2 ' pulse storage clock high
nop '
cbi PORTB, 2 ' then return low
ret
$end AsmNiby wszystko działa, ale
Zmienna temp wyświetlana jest do góry nogami.
Dlaczego tak się dzieje i jak to poprawić
