Ciao forum,
il titolo da una figura di cosa sarei curioso di sapere a livello di assembly.
Stavo studiando una situazione di ottimizzazione per un 16F1826, che usa il codice avanzato di assembly. Ora visto che si tratta(va) di muovere dei dati dalla memoria programma (la flash) ad un buffer di trasmissione, ho notato solo questa pagina
http://microchipdeveloper.com/mcu1102:indirect-addressing
Io vorrei fare questa operazione
LIST P = 16F1826, F = INHX32, W = 2, X = ON, R = DEC, MM = ON, N = 0, C = 255
#include <p16f1826.inc>
cblock 0x20
txbuffer:8, count
endc
cmpi16 macro Y,CONST,FAR
local NEAR
clrc
movf Y+1,W
sublw high (CONST)
bnc FAR
bnz NEAR
movf Y,W
sublw low (CONST)
bc FAR
NEAR
endm
movlw (high txmtdata) | 0x80
movwf FSR0+1
movlw low txmtdata
movwf FSR0
repeat
movlw txmtdata & b'0011111'
bsf WREG,5
movwf FSR1+1
movlw low txbuffer
movwf FSR1
call copy
cmpi16 FSR0, enddata, endloop
goto repeat
endloop
goto $
copy
movlw 8
movwf count
loop
moviw FSR0++
movwi FSR1++
decfsz count
goto loop
call senddata
return
senddata
return
txmtdata
dt 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 109,235, 0,0,1, 109,235
dt 0,0,1, 109,235
dt 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188
dt 0,0,1, 114,188, 8,1,1, 114,153, 8,2,1, 114,98, 8,3,1, 114,218
dt 8,4,1, 114,167, 8,5,1, 114,31, 8,6,1, 109,179, 8,7,1, 114,92
dt 8,8,1, 99,72, 8,9,1, 114,166, 8,10,1, 114,93, 8,11,1, 109,178, 8,12,1
dt 114,152, 8,13,1, 99,118, 8,14,1, 109,140, 8,15,1, 114,99, 8,16,1, 109,8
dt 8,17,1, 109,176, 8,18,1, 109,75, 8,19,1, 114,164, 8,20,1, 114,217, 8,21,1
dt 109,54, 8,22,1, 109,205, 8,23,1, 114,34, 0,0,1, 114,188, 0,0,1, 114,188
dt 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 109,235, 0,0,1
dt 114,188, 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188
dt 0,0,1, 114,188, 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1
dt 114,188, 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188
dt 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 109,235
dt 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 109,235
dt 0,0,1, 109,235, 0,0,1, 109,235, 0,0,1, 109,235, 0,0,1, 114,188, 0,0,1
dt 114,188, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188, 0,0,1, 114,188
enddata
end
Siccome non ho ancora il micro, stavo facendo delle prove con il simulatore di MPLAB 8.60, ma il byte va in una posizione diversa da txbuffer.
Dove trovo l' errore ?