I am having a problem on my connect 4 game that uses a bi-color matrix. I am able to drop 1 color dot down and stack that same color until it gets to the top. The problem is with my matrix you cant have difrent color dots in the same column. So i think i would need to flash the 2 colors(Portc and portd) at different times by changing them from outputs to inputs really fast.

I tried putting a gosub flash (flash being a loop) in different locations in my code so it would constantly flash anywhere it was in my code.

here is my flash loop

flash:
trisc=%00000000
trisd=%11111111
pauseus 1
trisc=%11111111
trisd=%00000000
pauseus 1
return

The problem is when i add this it causes a red checker to be on when i power up(when it should be off). Then i try to press my drop button and it wont fall and if i click the button to select the red checker then it turns off completely. I have no problem with the green checker.
I don't know what the problem is, i have a feeling it is very simple but i just cant figure it out any suggestions?

If you have any problems understanding my code please ask and i will try to explain it to you.


Code:
fall var byte
Shift var byte
pb1 var porta.0
pb2 var porta.1
pb3 var porta.2
rowvar var byte
b1 var byte
b var byte
c var byte
c1 var byte
c2 var byte
c3 var byte
c4 var byte
d1 var byte
d2 var byte
d3 var byte
d4 var byte
d 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
shift1 var byte
shift2 var byte
shift3 var byte
shift4 var byte
shift5 var byte 
shift6 var byte
shift7 var byte
fall2 var byte
fall3 var byte
fall4 var byte
fall5 var byte 
fall6 var byte
fall7 var byte
greenled var byte
redled var byte


down var byte
counts var byte
'define osc 8


'portc=red
'portd=green







'osccon =%01110101
counts=0
ansel=0
anselh=0

fall = 0
fall2=0
fall3=0
fall4=0
fall5=0
fall6=0
fall7=0

Shift = 7
shift2=7
shift3=7
shift4=7
shift5=7
shift6=7
shift7=7

greenled=0
redled=0



portb=b+b1
rows=1
stack=1

down=1










trisA=%11111111
trisb=%00000000
trisc=%00000000
trisd=%00000000




 
 b1=%11111111
    b= %01111111
portc=%00000000
portd=%00000000

    portb=b1+b
  
 




looppick:
 if pb2=0 then goto red
 if pb3=0 then goto green
gosub flash
 
 goto looppick
 
red:
b1=%11111111
    b= %01111111
portc=%00000001
portd=%00000000
 redled=redled+1
gosub flash

goto loopa
 
 green:
b1=%11111111
   b= %01111111
portd=%00000001
 portc=%00000000
 greenled=greenled+1
gosub flash
 
goto loopa






   loopa:
      portb=b1+b
      
     gosub flash
  
  
      
      
       
   
    pause 500
                    
    

    
    if (pb1==0 & b.7==0) then fall=1    
      if (fall==1) then 
        b1.0[Shift] = 1
        b1.0[Shift - 1] = 0
        Shift = Shift - 1
      endif
      
      if (b1.0[stack]=0)then fall=0:goto main
    
      
     
  
      goto loopa
      
     
      
       
      

      
     gosub flash 
      
     main:
      'fall=0
      'fall2=0
      'fall3=0
      'fall4=0
      'fall5=0
      'fall6=0
      'fall7=0
      portb=b1+b
      
     
      
     
 if down=0 then b1=%11111111 : b=%01111111    
 if down = 1 then b1=%11111101 : b=%01111111
 if down = 2 then b1=%11111001 : b=%01111111
 if down = 3 then b1=%11110001 : b=%01111111
 if down = 4 then b1=%11100001 : b=%01111111
 if down = 5 then b1=%11000001 : b=%01111111
 if down = 6 then b1=%10000001 : b=%01111111

     stack=stack+1
     down=down+1
     if down=7 then down=6
 
 counts=counts+1    
 if counts=1 then goto loopb
 if counts=2 then goto loopc
 if counts=3 then goto loopd
 if counts=4 then goto loope
 if counts=5 then goto loopf
 if counts=6 then goto loopg

     
      
   loopb:
  
 
     portb=b1+b
       gosub flash
    pause 500
    if (pb1==0 & b.7==0) then fall2=1    
      if (fall2==1) then 
        b1.0[Shift2] = 1
        b1.0[Shift2 - 1] = 0
        Shift2 = Shift2 - 1
      endif
      
      if (b1.0[stack]=0)then fall2=0:goto main
      goto loopb
      
      loopc:
     gosub flash
     
  portb=b1+b
       
    pause 500
    if (pb1==0 & b.7==0) then fall3=1    
      if (fall3==1) then 
        b1.0[Shift3] = 1
        b1.0[Shift3 - 1] = 0
        Shift3 = Shift3 - 1
      endif
      
      if (b1.0[stack]=0)then fall3=0:goto main
      goto loopc
      
          loopd:
          gosub flash
         
          portb=b1+b
       
    pause 500
    if (pb1==0 & b.7==0) then fall4=1    
      if (fall4==1) then 
        b1.0[Shift4] = 1
        b1.0[Shift4 - 1] = 0
        Shift4 = Shift4 - 1
      endif
      
      if (b1.0[stack]=0)then fall4=0:goto main
      goto loopd
      
          loope:
          gosub flash
        
   portb=b1+b
       
    pause 500
    if (pb1==0 & b.7==0) then fall5=1    
      if (fall5==1) then 
        b1.0[Shift5] = 1
        b1.0[Shift5 - 1] = 0
        Shift5 = Shift5 - 1
      endif
      
      if (b1.0[stack]=0)then fall5=0:goto main
      goto loope
      
        loopf:
        gosub flash
        
         portb=b1+b
       
    pause 500
    if (pb1==0 & b.7==0) then fall6=1    
      if (fall6==1) then 
        b1.0[Shift6] = 1
        b1.0[Shift6 - 1] = 0
        Shift6 = Shift6 - 1
      endif
      
      if (b1.0[stack]=0)then fall6=0:goto main
      goto loopf
      
      loopg:

     gosub flash
   
  
      portb=b1+b
       
    pause 500
    if (pb1==0 & b.7==0) then fall7=1    
      if (fall7==1) then 
        b1.0[Shift7] = 1
        b1.0[Shift7 - 1] = 0
        Shift7 = Shift7 - 1
      endif
      
      if (b1.0[stack]=0)then fall7=0:goto main
      goto loopg

flash:
trisc=%00000000
trisd=%11111111
pauseus 1
trisc=%11111111
trisd=%00000000
pauseus 1
return

      
    
      
      
  end