Typ HIGH/LOW. Dvs anta att man har en 32-bitars konstant och vill ha MSbyte i rega0, nästa byte i rega1 etc?
Tänkte fråga före jag skriver själv.
MPASM makron för att bryta ut bitar ur 32 bitars tal?
Mja tex:
Och vad katten är det för skillnad mellan HIGH och UPPER?
Ah, jo, det var väl i de banorna jag tänkte.
Kod: Markera allt
banksel regd0 ; Prime rega with suitable value
clrf regd3
clrf regd2
movlw 0x35
movwf regd1
movlw 0xac; ; 0x35ac
movwf regd0
;
Kod: Markera allt
movlw (DLY-1) & H'FF'
movwf Dly0
movlw (DLY-1) >>D'08' & H'FF'
movwf Dly1
movlw (DLY-1) >>D'16' & H'FF'
> Och vad katten är det för skillnad mellan HIGH och UPPER?
(Från MPLAB's help file, "Low, High and Upper Operators"...)Low, high and upper operators are used to return one byte of a
multi-byte label value. If low is used, only bits 0 through 7 of the expression
will be used. If high is used, only bits 8 through 15 of the expression will be
used. If upper is used, only bits 16 through 21 of the expression will be used.
Ahhh.. Jag var så låst i att se det som 16-bitar. Då borde man kunna skriva ett generellt makro:
eller så..
och sedan använda som
Skall testa
Edit: Finns även ett exempel i MPASM manualen på sidan 165 (DS33014J)
Kod: Markera allt
movbyte macro reg,var,byte
movlw var >>(D'08' * byte) & H'FF'
movwf reg
endm
och sedan använda som
Kod: Markera allt
movbyte regd0,0x35ac,0
movbyte regd1,0x35ac,1
movbyte regd2,0x35ac,2
movbyte regd3,0x35ac,3
Edit: Finns även ett exempel i MPASM manualen på sidan 165 (DS33014J)