Hi,
Try something like/Henrik.Code:Pattern = %11001010 FOR index = 0 to 7 PORTB.0 = pattern.0[index] 'turn portb.0 on or off based on whether the bit is 0 or 1 pause 100 NEXT index
Hi,
Try something like/Henrik.Code:Pattern = %11001010 FOR index = 0 to 7 PORTB.0 = pattern.0[index] 'turn portb.0 on or off based on whether the bit is 0 or 1 pause 100 NEXT index
Would a look up table work? Something like this:
I cut this out of a program I was using to control 20 LEDs so you'd have to modify the table to suit your needs.Code:starthere: IF gpio.3 = 1 THEN GOTO main GOTO starthere '------------------------------------flash them all to make it look cool main: FOR i = 1 TO 20 RANDOM myword mybyte = (myword//20) IF previous_random = mybyte THEN GOTO main GOSUB high_led PAUSE delay gpio = %000000 PAUSE delay previous_random = mybyte NEXT i gpio = 0 trisio = %111111 ' ----------------------------------------------------send it back to nap GOTO starthere high_led: LOOKUP mybyte,[%000001,%000010,%000001,%000100,%000001,%010000,%000001,%100000,%000010,%000100,%000010,%010000,%000010,%100000,%000100,%010000,%000100,%100000,%010000,%100000],gpiostate gpio = gpiostate LOOKUP mybyte,[%111100,%111100,%111010,%111010,%101110,%101110,%011110,%011110,%111001,%111001,%101101,%101101,%011101,%011101,%101011,%101011,%011011,%011011,%001111,%001111],tristate trisio = tristate RETURN END
I think this would work too - thanks! It amazes me how many ways there are to do the same thing.
Wait, there's more, the brainiacs will post assembler solutions now.
Robert
Actually, before I saw Henrik's method, I came up with ANOTHER solution that worked too. I used byte-sized arrays. It worked great, only it used 160 bytes of 367 bytes of total RAM available. Using arrays the way Henrik showed me (same thing, only on the bit level) it's only a few bytes.
Before I came up with the byte array solution, I was toying with an assembler subroutine that used BTFSC f,b (if bit 'b' in register 'f' is a one, the next instruction is executed, otherwise skipped).
So I would have tested the bit, then next instruction would branch to a routine that set the light on, the instruction after would set the light off.
I just KNEW that PBP would be able to do it though.
The best part? The dang program worked first try! Only a couple of syntax errors to clear up, but IT WORKED! Tested everything on a breadboard, now all I have to do is build it in a box and make it look pretty......
Thanks for all the help!
Andy
Bookmarks