New At PIC's, need some help with code


Closed Thread
Results 1 to 20 of 20

Hybrid View

  1. #1
    SOHCKing03's Avatar
    SOHCKing03 Guest


    Did you find this post helpful? Yes | No

    Default

    Thanks for the replies...

    I think I will test out a code I created using some of the elements from the code you guys gave me...

    Hopefully it'll work and I can get this thing going...

    -Brad

  2. #2
    SOHCKing03's Avatar
    SOHCKing03 Guest


    Did you find this post helpful? Yes | No

    Default

    Okay well I will use the code from the link Sayzer gave me...

    I am making an LED Underbody Kit though and so one PIC will control the front left, one will control the left side, one will control the the back left, and the same for the right side. So I will need my PIC's to communicate. When the last LED on the front left is turned on I want the side to start sequencing and same goes for the transition from side to back.

    To do this will I have to set the final output on the front left to go high and then have it connected to an input on the side PIC? That way I could tell the side PIC not to do anything until that input receives a "high" signal from the other PIC. I could do that correct? If so, how would I program it?

    Thanks again for all your help guys.

    -Brad

  3. #3
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default

    If I understood correct, this should be it. Just an example though.



    Code:
    Wait:
    
    IF PORTA.1 = 1 THEN GOTO Loop
    'This is the pin you get the input signal from the other PIC.
    
    GOTO Wait
    
    
    Loop:
    
    'Your loop code should be here....
    'When the last loop index is achieved, 
    'you will HIGH a pin to activate the next PIC
    'and you will go back to "Wait"
    
    
    GOTO loop
    "If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte

  4. #4
    SOHCKing03's Avatar
    SOHCKing03 Guest


    Did you find this post helpful? Yes | No

    Default

    Here is the code I came up with...

    ------------------------------------------------------

    SYMBOL PORT_PIN = PORTA
    X VAR BYTE ' For loop & bit index pointer

    Wait:

    IF PORTA.1 = 1 THEN GOTO Main 'checks if input recieves high signal
    GOTO Wait

    On:

    ADCON1 = 7 ' All digital
    PORTA = 0 ' Clear all port pins
    PORTB = 0
    PORTC = 0

    TRISA = 0 ' Make them all outputs
    TRISB = 0
    TRISC = 0

    FOR X = 0 TO 23
    PORT_PIN.0[X] = 1 ' Set all porta, portb, and portc pins high
    PAUSE 200
    NEXT X

    GOTO Off

    Off:

    ADCON1 = 7 ' All digital
    PORTA = 0 ' Clear all port pins
    PORTB = 0
    PORTC = 0

    TRISA = 0 ' Make them all outputs
    TRISB = 0
    TRISC = 0

    FOR X = 0 TO 23
    PORT_PIN.0[X] = 0 ' Set all porta, portb, and portc pins low
    PAUSE 200
    NEXT X

    GOTO On

    ---------------------------------------------------

    My only question now is, how do I set PORTA.1 to be an input? In my code I set all PORTA pins to be outputs. Is there a way I can set just PORTA.1 to be input?

    As always, I appreciate your help.

    -Brad

  5. #5
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default

    1. You first need to set the TRIS register for a port. Having TRISA = %00000000 makes all pins output. From right to left they are arranged as porta.0 to porta.7. (F877 has 6 pins on PORTA). If you want to make one of them an input, say you need PORTA.1 as input, then you state TRISA = %00000010. Now, all of them are outputs except for PORTA.1 (also for some PICs, you need to watch for MCLR pin which is an input-only pin).
    OR, you can just say INPUT PORTA.1

    2. You should keep all registers at the beginning. No need to put them into each subroutine.

    3. ON is a reserved word. Thus, you can not use it for another purpose.

    4. In your code you have "goto Main" but there is no Main. I think you meant "goto ON", but since you can not use "ON", just change ON to Main.

    5. For the FOR loop you have, you will not have 8-bits on PORTA. Thus you need to have a look at there. Check Bruce's example on the link above.


    Check the datasheet of the PIC you will use. Check which pin can be used as an input-only and/or output-only etc.

    Also, check how many pins you have on each port.


    ----------

    ------------
    "If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte

  6. #6
    SOHCKing03's Avatar
    SOHCKing03 Guest


    Did you find this post helpful? Yes | No

    Default

    Okay so then here is an updated code:

    '----------Code for the Front Left, Front Right, Back Left, and Back Right

    SYMBOL PORT_PIN = PORTB
    X VAR BYTE ' For loop & bit index pointer


    ADCON1 = 7 ' All digital

    PORTB = 0 ' Clear port pins

    TRISB = 0 ' Make them all outputs

    Main:

    FOR X = 0 TO 7
    PORT_PIN.0[X] = 1 ' Set all pins high
    PAUSE 200
    NEXT X

    GOTO Off

    Off:

    ADCON1 = 7 ' All digital

    PORTB = 0 ' Clear port pins
    PORTC = 0

    TRISB = 0 ' Make them all outputs
    TRISC = 0

    FOR X = 0 TO 7
    PORT_PIN.0[X] = 0 ' Set all pins low
    PAUSE 200
    NEXT X

    GOTO Main

    '----------Code for Both Sides

    SYMBOL PORT_PIN = PORTB
    X VAR BYTE ' For loop & bit index pointer


    ADCON1 = 7 ' All digital
    PORTA = 0
    PORTB = 0 ' Clear port pins
    PORTC = 0

    TRISB = 0 ' Make them all outputs
    TRISC = 0

    Wait:

    INPUT PORTA.0
    IF PORTA.0 = GOTO Main

    GOTO Wait

    Main:

    FOR X = 0 TO 15
    PORT_PIN.0[X] = 1 ' Set all pins high
    PAUSE 200
    NEXT X

    GOTO Off

    Off:

    ADCON1 = 7 ' All digital

    PORTB = 0 ' Clear port pins
    PORTC = 0

    TRISB = 0 ' Make them all outputs
    TRISC = 0

    FOR X = 0 TO 15
    PORT_PIN.0[X] = 0 ' Set all pins low
    PAUSE 200
    NEXT X

    GOTO Main

    -------------------------------------------------

    How does that look? For the front and back ones I only need 6 outputs but I need 16 for the sides. I hope I did that INPUT thing right. I assumed that PORT_PIN would still equal PORTB since I'm only using PORTA for the INPUT. Did I do everything correct? Also, I am using a 16F876 so all PORTB and PORTC pins can be outputs, however PORTA.6 and PORTA.7 are unimplemented so that is why I am starting with PORTB.

    Thanks again.

    -Brad

  7. #7
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    IF PORTA.0 = GOTO Main
    there's a missing value in that one, 0 or 1

    Also, as you're using PORTB and PORTC, there's no special need to use the array method. Just use
    HIGH x (from 0 to 15)=> refer to section 4.11 of your PBP manual

    something like
    Code:
    X VAR BYTE ' For loop & bit index pointer
    ADCON1 = 7 ' All digital
        '   
        ' Clear portB&C pins
    PORTB = 0 
    PORTC = 0 
        '
        ' Make them all outputs
    TRISB = 0 
    TRISC = 0
        '
        ' Set PORTA.1 as input
    TRISA.1=1
        
    Main:
         FOR X = 0 TO 7
             HIGH X ' Set all pins high
             PAUSE 200
             NEXT X
    Off:
        FOR X = 0 TO 7
            LOW X ' Set all pins low
            PAUSE 200
            NEXT X
    
        GOTO Main
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. decoding quadrature encoders
    By ice in forum mel PIC BASIC Pro
    Replies: 93
    Last Post: - 28th February 2017, 09:02
  2. Nokia COLOR LCD PicBasicPro 2.50a example code
    By skimask in forum Code Examples
    Replies: 49
    Last Post: - 28th September 2011, 01:43
  3. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 08:26
  4. Code: Why is this code greater than 2000 words?
    By DrDreas in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 1st June 2007, 19:51
  5. Writing code for battery operated projects
    By jessey in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 16th June 2005, 03:39

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