Hi mackrackit
"You might get creative and shift the bits 4 four places.
Lower four to one port, upper four to the other???"
How difficult is getting creative for a newbie like me?
My PICkit1 came with a PIC16F684 included.
Dave
Hi mackrackit
"You might get creative and shift the bits 4 four places.
Lower four to one port, upper four to the other???"
How difficult is getting creative for a newbie like me?
My PICkit1 came with a PIC16F684 included.
Dave
The '<<' and '>>' operators shift a value left or right, respectively, 0 to 15 times. The newly shifted-in bits are set to 0.
Code:B0 = B0 << 3 ‘ Shifts B0 left 3 places, (same as multiply by 8) W1 = W0 >> 1 ‘ Shifts W0 right 1 position and places result in W1 (same as divide by 2)
Hi,
SEROUT is for serial RS232 communication. It's just used as an example in the LOOKUP section of the manual.See, when i is 0 the first value in the lookup table (0) will get written to GPIO, all bits will be reset, when i is 6 the seventh value (125) in the lookup table will get written to GPIO. 125 is the same as %01111101 which means all segments except the one driven by Bit1 will be on - the display will show "6".Code:i VAR BYTE Main: For i = 0 to 9 LOOKUP i, [0, 6, 91, 79, 102, 109, 125, 7, 127, 103], GPIO Pause 500 Next Goto Main
Now, this would work on a PIC with seven or more consecutive GPIO pins, which apparently doesn't exist.... Getting a PIC with a "full" PortB and using that instead of GPIO would do it. It's still possible to do on the '684 (which has 6 bits on PortA and 6 bits on PortB, no GPIO) but then maby the Lookup aproach isn't the most suitable.
There are many many ways to skin the cat, sit down and play a bit with what you have, if you already have the BCD-Seven segment decoder go ahead and use that and play around.
/Henrik.
In the Math Operators section of the manual take a look at SHIFT and the Btiwise Operators.
The idea is..
From Henrik
You will have to connect the display so that part is on one port and part on another. half and half...To display a "2" you need to set bits 0, 1, 3, 4 and 6 (%01011011 or 91)
Take the lower 4 bits in the case of #2 (1011) and send them to the display with Port1.
Take the upper 4 bits (0101) and send that to the display with Port2.
Think of Port1 as being 0-3
Port2 as 4-7
Presto... a whole Port...0-7
Dave
Always wear safety glasses while programming.
Well plenty to think about today. Maybe a little consolidation from me, drum those basics into my mind (I still have plenty to learn here).
I see what you're saying regards splitting port1 & port1 to drive the display.
Absolutely fascinating stuff though, I think I'm hooked and I've only managed to flash a few LED's.
Again many thanks to you all.
Dave
Hi everyone. I've been working on a program below which is a modification of Henrik's look up table program. I know if you had a PIC with an eight bit wide output you could store the output words in the lookup table and then drive a seven segment display directly as Henrik explained.
So I thought I'd try and load a lookup table to blink an LED (D0) 3 times using a for-next-loop (I've never used a for-next-loop before). It works except after three cycles it doesn't stop. I read up that after the loop has finished it then moves on down to the next instruction, so I've added STOP / END. IF i = 4 then STOP. None of these work and when any of these lines are added the program only cycles once.
The only thing I can think of is that the 12F683 doesn't support LOOKUP tables.
Any ideas please? Dave
ANSEL = %00000000 'disable analog select so ports work as digital i/o
CMCON0 = %00000111 'Disable analog comparators
TRISIO = %11001111 'Set GPIO.4&5 to input
GPIO = %00000000 ' set all outputs low
i VAR BYTE
START
Main:
pause 500 'pause 500 mili-secs
For i = 1 to 3 ' loop count variable (value i) also number of times to loop.
LOOKUP i, [ 223, 223, 223] ,GPIO '223 = %11011111 D0 switches on (GPIO.4)
Pause 500 'pause 500 mili-secs
LOW GPIO.4 ' DO switches off
Next i ' loop again. ONE is added to count i and prog jumps to FOR
Hi,
I read "somewhere" a program might end by the " END " directive, or loop to a known label in the program...
Alain
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
Dave, use <code> tags and format your code - makes it easier to read.
Code:ANSEL = %00000000 'disable analog select so ports work as digital i/o CMCON0 = %00000111 'Disable analog comparators TRISIO = %11001111 'Set GPIO.4&5 to input GPIO = %00000000 ' set all outputs low i VAR BYTE START Main: pause 500 'pause 500 mili-secs For i = 1 to 3 ' loop count variable (value i) also number of times to loop. LOOKUP i, [ 223, 223, 223] ,GPIO '223 = %11011111 D0 switches on (GPIO.4) Pause 500 'pause 500 mili-secs LOW GPIO.4 ' DO switches off Next i ' loop again. ONE is added to count i and prog jumps to FOR
Hi Dave,
Two things.... First as you figured out and as Alain also pointed out you will need an END after the loop or the PIC will wonder off to never never land eventually starting over (I think). Second, you need another PAUSE in there or you will not see the LED blink. It will get turned on then 500ms later it will get turned off and then on again almost instantly as the loop goes back to the beginning. I guess that's what you were trying with the PAUSE right after Main but remeber that the loop starts over at the FOR statement.Code:Main: pause 500 'pause 500 mili-secs For i = 1 to 3 ' loop count variable (value i) also number of times to loop. LOOKUP i, [ 223, 223, 223] ,GPIO '223 = %11011111 D0 switches on (GPIO.4) Pause 500 'pause 500 mili-secs LOW GPIO.4 ' DO switches off Pause 500 Next i END
Bookmarks