PDA

View Full Version : Need help on pic connect 4



lockjawz
- 16th November 2011, 18:42
Im doing a pic based connect 4 using a led matrix for my senior project in high school. I am very novice at coding so please make sure to keep that in mind while critiquing my work. All i want it to do for now is to have a light at the top left to be on and when you push a button it falls down and stops at the bottom,then when you press a button again another one falls on top of that and so on. I have the first led falling but after the led stops it starts stacking until the whole left column is on. I don't know how this is possible when i have
if (b.0[rows]=0)then fall=0 : goto main
it acts if it keeps going through the loop main. Any suggestions?



fall var byte
Shift var byte
pb1 var porta.0
pb2 var porta.1
rowvar var byte
b var byte
rows var byte
stack var byte
row1 var byte
row2 var byte
row3 var byte
row4 var byte
row5 var byte
row6 var byte
row7 var byte












ansel=0
anselh=0
fall = 0
Shift = 7
down=1
portb=b
rows=0
stack=0








trisA=111111
trisb=000000
trisc=000000
trisd=000000
b=~000000
portc=000001
portd=000000










loopa:
portb=b+b1
portb=b

pause 500
if (pb1==0 & b.7==0) then fall=1
if (fall==1) then
b.0[Shift] = 1
b.0[Shift - 1] = 0
Shift = Shift - 1
endif
if (b.0[rows]=0)then fall=0 : goto main

goto loopa


main:
portb=b


rows=rows+1
if rows=6 then rows=0

if stack=6 then stack=5



if stack = 0 then b=~000010
if stack = 1 then b=~000110
if stack = 2 then b=~001110
if stack = 3 then b=~011110
if stack = 4 then b=~111110
if stack = 5 then b=~111110
portc=000001

stack=stack+1

goto loopa

Heckler
- 16th November 2011, 20:04
This line in your code ...

if (b.0[rows]=0)then fall=0 : goto main
is the same as...


if (b.0[rows]=0)then fall=0
goto main

you probably need this...

if (b.0[rows]=0)then
fall=0
goto main
endif

That way the "goto main" will only be executed if the preceding IF statement is true

from the PBP manual...


4.13. Multi-statement Lines




In order to allow more compact programs and logical grouping of related commands, PBP supports the use of the colon


":" to separate statements placed on the same line. Thus, the following two examples are equivalent:




W2 = W0
W0 = W1
W1 = W2




is the same as:




W2 = W0 : W0 = W1 : W1 = W2



This does not, however, change the size of the generated code.