Quote Originally Posted by rsocor01 View Post
Well, you are having great difficulty because you cannot reassign ports like that in the program. Ports are only assigned to variables at the beginning of the program.
Yes I know this. I was having difficulty because I was trying to think of a way to do it in a manner that the pic would understand. Our brains can easily process this and substitute that values, but with the pic, it's not that easy.

Quote Originally Posted by richard View Post
looks like a dead end to me . try this way
code is for a 12f1822 so uses porta and porta.3 is input only . but you get the idea

Code:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29/11/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :   pic12f1822                                                *
'****************************************************************
#CONFIG
cfg1 = _FOSC_INTOSC
cfg1&= _WDTE_ON
cfg1&= _PWRTE_OFF
cfg1&= _MCLRE_ON
cfg1&= _CP_OFF
cfg1&= _CPD_OFF
cfg1&= _BOREN_ON
cfg1&= _CLKOUTEN_OFF
cfg1&= _IESO_ON
cfg1&= _FCMEN_ON
  __CONFIG _CONFIG1, cfg1
cfg2 = _WRT_OFF
cfg2&= _PLLEN_OFF
cfg2&= _STVREN_ON
cfg2&= _BORV_19
cfg2&= _LVP_OFF
  __CONFIG _CONFIG2, cfg2
#ENDCONFIG

   osccon=$6a    '4 mhz
   anselA=0  
   trisa=000
   
  a  var  byte
  b  var  byte
  c  var  byte
  d  var  byte
  pin_mode var byte
  x var byte
  
  a=0
  b=1
  c=2
  d=4
  pin_mode=0
 
 action:
  for x = 1 to 5
  lata.0[a] = 1
  lata.0[b] = 1
  lata.0[c]= 0
  lata.0[d]= 0
  pause 200
  lata.0[a] = 0
  lata.0[b] = 0
  lata.0[c]= 0
  lata.0[d]= 0
  pause 200
  next x
  for x = 1 to 5
  lata.0[a] = 0
  lata.0[b] = 0
  lata.0[c]= 1
  lata.0[d]= 1
  pause 200
  lata.0[a] = 0
  lata.0[b] = 0
  lata.0[c]= 0
  lata.0[d]= 0
  pause 200
  next x
  gosub shuffle
  goto action
  
   shuffle :
   pin_mode=pin_mode+1
  select case pin_mode
  case 1
   a=4  ;a  var  portb.3
   b=2  ;b  var  portb.2
   c=1   ;c  var  portb.1
   d=0    ;d  var  portb.0
  case 2
   a=0  ;a  var  portb.0
   b=4  ;b  var  portb.3
   c=2   ;c  var  portb.2
   d=1    ;d  var  portb.1
  case 3
   a=0  ;a  var  portb.0
   b=2  ;b  var  portb.2
   c=1   ;c  var  portb.1
   d=4    ;d  var  portb.3 
  case 4
   a=0  ;a  var  portb.0
   b=1  ;b  var  portb.1
   c=2   ;c  var  portb.2
   d=4    ;d  var  portb.3 
   pin_mode=0
  end select
  return
That's exactly what I was envisioning in my head, but I couldn't get it out. Thank you Richard. I'll try to plug this into my code and see how it works.