Tracy Smith says
Here are a couple of ideas for getting 1<<TestBit10 cycles: 2^n: clrw btfsc TestBit,2 movlw b'11111100' addwf TestBit,f incf TestBit,w btfsc TestBit,1 iorwf TestBit,f incf TestBit,f skpnc swapf TestBit,f ......... another way (7 cycles [including the call]) two_to_n: andlw 7 addwf pcl,f retlw 1 retlw 2 retlw 4 retlw 8 retlw 0x10 retlw 0x20 retlw 0x40 retlw 0x80 ............ or probably more to the point movf portb,w movwf portb_shadow btfss TestBit,2 swapf portb_swadow,f btfss TestBit,0 rlf portb_shadow,f movlw b'10000000' btfss TestBit,1 movlw b'00100000' andwf portb_shadow,f skpnz goto _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 incf bit ; make it 1 to 8, so decfsz works nicely bsf STATUS, C ; set the carry flag. This will be rotated in 'bit' times loop: rlf mask, f decfsz bit, f ; skip out after 'bit' times. goto 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
file: /Techref/scenix/lib/math/bit/setbit.htm, 1KB, , updated: 2004/6/10 13:40, local time: 2024/11/27 09:46,
13.59.73.248:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://techref.massmind.org/Techref/scenix/lib/math/bit/setbit.htm"> Setting bit number X</A> |
Did you find what you needed? |
Welcome to massmind.org! |
Welcome to techref.massmind.org! |
.