PIC Microcontoller Bit Math Method

Converting a 3-bit number to a 8-bit mask

From: Mike Keitz. There is a trick method that works for 4 bits. It replaces a 2-bit number in a variable with a 4-bit mask:

	mov	W, ++BitP	;W = 0001 0010 0011 0100
	snb	BitP.1	;If 0 or 1, result is almost correct now.
	or	BitP, W	;BitP = [0000] [0001] 0011 0111
	inc	BitP	;BitP = 0001 0010 0100 1000

It could be the core of an 8-bit routine thus:

; Convert 3-bit number (0-7) in INDEX to a 8-bit mask (00000001 ...
; 10000000) in BitP.
	mov	W, INDEX
	and	W, #%00000011	;Start with half of the mask.
	mov	BitP, W
	mov	W, ++BitP	;The 4-bit converter
	snb	BitP.1
	or	BitP, W
	inc	BitP
	snb	INDEX.2	;Is it high 4 bits?
	swap	BitP