SX Microcontroller Bit Math Method

Setting bit number X

Tracy Smith says

Here are a couple of ideas for getting 1<<TestBit (10 cycles):
2^n:
	clr	W
	snb	TestBit.2
	mov	W, #%11111100
	add	TestBit, W

	mov	W, ++TestBit
	snb	TestBit.1
	or	TestBit, W

	inc	TestBit

	snb	C
	swap	TestBit

.........
another way (7 cycles [including the call])

two_to_n:
	and	W, #7
	add	PC, W
	retw	#1
	retw	#2
	retw	#4
	retw	#8
	retw	#$10
	retw	#$20
	retw	#$40
	retw	#$80


............
or probably more to the point

	mov	W, Rb
	mov	portb_shadow, W

	sb	TestBit.2
	swap	portb_swadow


	sb	TestBit.0
	rl	portb_shadow

	mov	W, #%10000000
	sb	TestBit.1
	mov	W, #%00100000

	and	portb_shadow, W

	snb	Z
	jmp	_the_bit_is_set

.lo

Kevin Blain says:

	clrf    mask    ; empty the mask

; a file called bit contains the 0 to 7 value of the bit position

	inc	bit	; make it 1 to 8, so decfsz works nicely
	setb	C	; set the carry flag. This will be rotated in 'bit' times
:loop
	rl	mask
	decsz	bit	; skip out after 'bit' times.
	jmp	loop
.....               ; rest of code...

Of course, it would be good to ensure that bit is not greater than 7 when
entering the routine.

see: http://www.infosite.com/%7Ejkeyzer/piclist/1999/Nov/0018.html