Shuffling variables


Closed Thread
Results 1 to 18 of 18

Hybrid View

  1. #1
    Join Date
    Jan 2010
    Posts
    88


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    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.

  2. #2
    Join Date
    May 2013
    Location
    australia
    Posts
    2,656


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    up until now I never found a use for "swap" this makes even smaller and more elegant code

    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 bit
      x var byte
      all_off var byte
      
      pins_on var byte
      
     
      
      
      
      a=1        ;portb.0
      b=2         ;portb.1
      c=4         ;portb.2
      d=16        ;portb.4
      pin_mode=0
      
      all_off=!(a+b+c+d)
     
      lata =   lata & all_off
     action:
      pins_on=a+b
      for x = 1 to 5
      lata =   lata | pins_on
      
      
      pause 200
      lata =   lata & all_off
      
      pause 200
      next x
      pins_on=c+d
      for x = 1 to 5
       lata =   lata | pins_on
      pause 200
      lata =   lata & all_off
      pause 200
      next x
      gosub shuffle
      goto action
      
       shuffle :
       pin_mode =!pin_mode
      if pin_mode then
      swap a,d
      swap b,c
      else
      swap a ,c
      swap b ,d
      endif
      
      
      
      
      
      return

  3. #3
    Join Date
    May 2013
    Location
    australia
    Posts
    2,656


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    shuffle wrong this is better
    Code:
       shuffle :
       pin_mode =!pin_mode
      if pin_mode then
      swap a,d
      swap b,c
      else
      swap b ,d
      swap c ,d
      endif
    Last edited by richard; - 30th November 2014 at 11:26. Reason: pressed wrong button

  4. #4
    Join Date
    Apr 2011
    Location
    Welches, Oregon
    Posts
    198


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    Quote Originally Posted by richard View Post
    ...this is better...
    Better? I'd say it's AWESOME! I had thought to suggest (as your original answer) using array values or various mask patterns perhaps, but - to my humble skills - there is simply no improvement possible to "swap". Somewhere, in the back of my mind, I remember seeing it, but had forgotten... I'll remember now!

  5. #5
    Join Date
    Jan 2010
    Posts
    88


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    That's awesome, however, I have one question. What is (=!)? Can you please translate to English what the line "pin_mode =!pin_mode" means. That's the only part I'm having a problem with right now. The good book references it at !=, but that is used when you have two expressions, not the same expression. The same expression will always be equal to itself.

    Thanks,
    Tony

  6. #6
    Join Date
    May 2013
    Location
    australia
    Posts
    2,656


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    ! is the logical not operator afaik , anyway that's the way I use it (its a C thing but works in pbp too)

    I think its the same as the "tilde" ~ but my laptop keyboard makes it hard to find. maybe someone can confirm this


    pin_mode = ! (pin_mode) is the way to read it , if pin_mode is 1 then ! pin_mode becomes 0 or if pin_mode is 0 then ! pin_mode becomes 1
    not to be confused with != which is not equal to

    ps
    just tried it . seems "~ ! not" are all the same thing (on bit and byte vars anyway) for what it worth
    Last edited by richard; - 2nd December 2014 at 05:12. Reason: more

  7. #7
    Join Date
    Apr 2011
    Location
    Welches, Oregon
    Posts
    198


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    In binary, where there are two states, "NOT" or any variation thereof (~ ! etc) reverses the bit value, so... NOT 1 = 0. It makes sense on a bit level... if it's NOT a zero, it must be a one, yes? Now, of course if it is not, not a one, then it was all along a zero. In comedy, the "double negative" can lead to all sorts of Don Knott's style of humor - in computer science... not so much.

Similar Threads

  1. How about String Variables?
    By mytekcontrols in forum PBP Wish List
    Replies: 40
    Last Post: - 20th January 2015, 12:53
  2. Replies: 2
    Last Post: - 12th November 2014, 07:57
  3. IF - WHILE and variables
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 15th April 2009, 13:01
  4. Using Variables with Debug
    By krohtech in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 17th December 2007, 02:47
  5. Help with using variables
    By jessey in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 19th June 2005, 16:03

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts