How to write port names into array ?


Closed Thread
Results 1 to 29 of 29

Hybrid View

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


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    Perhaps I misunderstood your inquiry; it is difficult with so little explanation...

    Perhaps you mean:

    'DEFINE ARRAY
    AC var bit[7]

    'ASSIGN ALIAS
    SYMBOL AC[5] = PORTC.5
    SYMBOL AC[4] = PORTC.4
    .
    SYMBOL AC[1] = PORTB.5

    'LOOP THRU VALUES

    FOR LOOP = 5 to 1 STEP -1
    AC[LOOP] = Some assigned bit value
    Next LOOP

    Of course, the bit array may be expanded to include as many elements as you need and you may SYMBOL each element to any port or single bit variable you like to access them through a loop - which need not begin at the first element nor continue through the last.

    You mention ARRAYWRITE, but if the answer was there you would certainly have seen that in the manual, yes?

  2. #2
    Join Date
    Feb 2013
    Posts
    1,153


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    Yes, I want to put different port names into array, so when needed, I can read or address them sequentally.

  3. #3
    Join Date
    Feb 2013
    Posts
    1,153


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    So what I want to do, I'll write a code in some imaginary basic, a bit short code that will do a running led light:

    DIM LEDS(3) 'define array with 3 entries
    LET LEDS(1)=PORTA.2
    LET LEDS(2)=PORTB.3
    LET LEDS(3)=PORTC.1 'enter data into array

    FOR A=1 TO 3
    HIGH LEDS(A)' make pin high
    pause 500 ' wait some time
    LOW LEDS(A) 'make pin low
    NEXT A

  4. #4
    Join Date
    Feb 2013
    Posts
    1,153


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    So I wrote it in this way, but it does not works:

    Code:
    AC VAR BIT[5]
    AR VAR BIT[7]
    
    
    AC[5]=PORTC.5
    AC[4]=PORTC.4
    AC[3]=PORTB.3 
    AC[2]=PORTB.1
    AC[1]=PORTB.5 
    
    AR[1]=PORTB.6
    AR[2]=PORTC.7
    AR[3]=PORTB.2 
    AR[4]=PORTB.0 
    AR[5]=PORTB.4 
    AR[6]=PORTB.7
    AR[7]=PORTC.6 
    
    'make all leds connected to ports on.
    
    low ac[1]
    low ac[2]
    low ac[3]
    low ac[4]
    low ac[5]
    high ar[1]
    high ar[2]
    high ar[3]
    high ar[4]
    high ar[5]
    high ar[6]
    high ar[7]
    
    'but it does not works
    'but it works with code below
    low PORTB.3
    HIGH PORTC.7
    
    
    
    end

  5. #5
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,621


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    Hi
    It doesn't work that way, it won't work that way and it can't work that way.

    When you do AR VAR BIT[7] you are reserving space in RAM for 7 consecutive bits. You can't them simultanously mirror each bit in RAM to a ANOTHER adress (which the ports are) - it won't and can't work.

    Aliases must all point to the SAME location, like
    Code:
    AR VAR BIT[7] 
    myBit VAR AR[2]
    In the above case AR[2] and myBit are the one and same memory location, ie. two names for the same location, you can't do it the other way around. Ie you can't have one name for two locations which is basically what you're trying to do.

    When you do
    Code:
    AR VAR BIT[7]
    
    AR[1]=PORTB.6
    You are reading the state of PORTB.6 and store the result of that in AR[1].

    The only way I know of that is similar to what you're trying is to use a port offsets and a lookup table.

    /Henrik.

  6. #6
    Join Date
    Feb 2013
    Posts
    1,153


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    So,

    PORTB.6=AR[1] won't work?

  7. #7
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,621


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    Hi,
    Well, yes, it'll work.
    It'll set the state of PortB.6 to what is stored in AR[1], either 1 or 0 at the time that the instruction executes.
    What it will NOT do is create a "mirror" where the state of PortB.6 automatically changes whenever AR[1] changes - which I suspect is what you're looking for.

    /Henrik.

  8. #8
    Join Date
    Feb 2013
    Posts
    1,153


    Did you find this post helpful? Yes | No

    Default Re: How to write port names into array ?

    Quite interesting, why it can't ?

    The code example with LET & DIM is from Sinclair Basic, written in 1982 and running on Z80. It can handle such things, and picbasic pro - can't ?

Similar Threads

  1. Setup port pins into an array
    By longpole001 in forum mel PIC BASIC Pro
    Replies: 21
    Last Post: - 25th April 2013, 16:24
  2. Assign different port bits to an array?
    By vamtbrider in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 30th November 2010, 02:40
  3. Why (or how to) make a port array for OW
    By Roy___ in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 22nd February 2009, 23:30
  4. array and port
    By piombazzo in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 9th November 2008, 20:58
  5. Replacing an ARRAY with EEPROM write to save space?
    By Tom Gonser in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 12th March 2005, 18:31

Members who have read this thread : 1

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