activating i/o ports according to variable value


Closed Thread
Results 1 to 13 of 13

Hybrid View

  1. #1
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile I'll see what happens

    Thanks Charles, I haven't had time to run a test but maybe I've spotted my problem whilst checking your code.

    IF PortValue = 4 THEN
    HSEROUT [10,13,"Port A4 is Open Collector!",13,10]
    ENDIF
    ADCON1 = $FF
    TRISA.0(PortValue)= 0 'Make it an output
    PauseUs 20
    PORTA.0(PortValue) = 0 'Write a '0'
    GOTO StateCheck
    ENDIF


    My understanding, according to the code, is that I should use round brackets not square brackets as I misunderstood? JEC's code to show???? I'll try and see if it works

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    What port and chip are you using?
    Have you shut the ADC off if the port has one.
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile 16F's

    I'm using mainly 16f628a's or a spare f84a I found lying around...all been tested and humming nicely.
    With the code for 16f628a I am setting porta.4 to standard i/o with CMCON = 7 ... but I tested with ports b 1 through 5 earlier when I got the compiler error.
    Am I right about the brackets? (round vs square)??

  4. #4
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    It works with [] or () for the bit index variable, but the high & low commands won't work with a variable bit index.

    For bit indexing port pins you need to assign a 0 or 1 to the pin like this;
    Code:
    Main:
      for x = 0 to 7
        portb.0[x] = 1
        pauseus 200
        portb.0[x] = 0
        pauseus 200
      next
     
      GOTO Main
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  5. #5
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    If you are using LEDs to see what is happening you may want to change
    PAUSEUS
    to
    PAUSE
    in the Bruce's code.
    Dave
    Always wear safety glasses while programming.

  6. #6
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile High Low Vs 1/0 value

    Well that's great news - I will try the new code tonight assigning binary values as opposed to using the 'high' or 'low' statements.

    Here is the test code I was using:

    device = 16f628a
    x var byte
    loop:
    for x=0 to 5
    high portb.(x)
    pause 500
    low portb.(x)
    pause 500
    next x
    goto loop

    and here is the error message:

    Error at line [9] in file [84test.bas] ***Unrecognised characters '(x)'! ***
    Error at line [11] in file [84test.bas] ***Unrecognised characters '(x)'! ***

    Hopefully assigning a value will work...I'll try it out in about 3 hours when I get the kids to bed and I'm sensing a breakthrough here

  7. #7
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Unhappy oh no

    Still no joy. Now I get a missing operator '=' error at both the lines where I assign portvalues.. sorry about not posting code however my programming terminal has no net access and I forgot to put it into my flashdrive.)

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