PIC's ports individual bits manipulation - how to?


Closed Thread
Results 1 to 39 of 39

Hybrid View

  1. #1
    Join Date
    Aug 2006
    Location
    SWITZERLAND (french speaking)
    Posts
    938


    Did you find this post helpful? Yes | No

    Default

    Well it's actually pretty simple once you know how.
    Ça, c'est la phrase qui tue :-)

    I wish this could be as simple as it looks like... to your (expert) eyes.

    Going to sleep now but tomorrow, MELABS will have to be nice with me!

    Bonne nuit.
    Roger

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


    Did you find this post helpful? Yes | No

    Default

    MELABS or MPLAB?

    Bonne nuit
    Steve

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

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


    Did you find this post helpful? Yes | No

    Default

    Update to the VSM... painful and useless as you can't create your OWN neither modify the provided sample...

    Idiot and useless...
    Steve

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

  4. #4
    Join Date
    May 2006
    Location
    Del Rio, TX, USA
    Posts
    343


    Did you find this post helpful? Yes | No

    Default

    I might have misread the original intent, but you did ask:

    How is it possible to handle ONLY those four bits wihtout modifying the other (MSB) four bits?
    "Under the hood" PBP will either write to the port as a Byte, or set/clear individual bits. This means you have 2 basic approaches:
    1) Dave's approach, which deals with the port as a byte. This uses some bit manipulation to preserve the status of the MSBs.
    2) And what I was trying to get at, but was not very clear, and that is to set each bit individually.

    Just so I've got it straight, as your FOR...NEXT loop counts from 0 to 3 you would like to see a pattern on PORTAs LSB like: 0001, 0010, 0100, 1000. Is this correct?

    If this is the case, then this should work:

    Code:
    Digit VAR Byte
    DCD_temp VAR Byte
    
    FOR Digit = 0 TO 3
         DCD_temp = DCD Digit 
         PORTA.0 = DCD_temp.0
         PORTA.1 = DCD_temp.1
         PORTA.2 = DCD_temp.2
         PORTA.3 = DCD_temp.3
    NEXT Digit
    SteveB
    Last edited by SteveB; - 26th February 2007 at 05:53.

  5. #5
    nish's Avatar
    nish Guest


    Did you find this post helpful? Yes | No

    Default Timer1 in pic16f877a

    hi all
    i m new to pic16f877a.i need a help regarding timers in pic 16f877a.
    in the timer1,T1CON register what is the purpose of using T1OSCEN bit and the T1SYNC bit.if we are using T1SYNC bit,with what signal it will get synchronised and the purpose of synchronization.expecting the reply.

    thanx n advance

    nish

  6. #6
    Join Date
    Aug 2006
    Location
    SWITZERLAND (french speaking)
    Posts
    938


    Did you find this post helpful? Yes | No

    Default MPLAB, of course...

    I was already sleeping when I wrote this big mistake.

    Thanks SteveB; indexing the ports, like "PORTA.0[Var]", works well. But you're right, it is about to adress the four LSBs.
    Roger

  7. #7
    Join Date
    Feb 2003
    Location
    Salt Lake City, Utah USA
    Posts
    517


    Did you find this post helpful? Yes | No

    Smile

    If the upper four bytes are guaranteed to always be inputs then you do not need to worry about how “they” are affected by your modifications of the lower four output bytes. Your
    Code:
    PORTA = ~DCD digit
    should work fine (all reads are of the actual values of the pins irrespective of any previous written values; all writes are read-modify-write operations).

    If the upper four bits could be outputs then you do need to worry and you can use one of the suggested fixes. If speed is an issue as you suggest (but I do not see why it would be, especially with a pause in the main loop), then you could 1) switch to real interrupts (see Darrel's methods) and 2) unroll your for-next loop. A possible version is shown below for the latter.

    Code:
    ' PORTA = XXXX1111
    
    value_d = value dig 3    'Select the 3 Digit Value
    lookup value_d, [$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE], Segments
    PORTA = PORTA - 8 ' PORTA = XXXX0111
    PORTB = Segments
    pause Scan
    
    MAIN:
    value_d = value dig 0    'Select the 0 Digit Value
    lookup value_d, [$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE], Segments
    PORTA = PORTA +7 ' PORTA = XXXX1110
    PORTB = Segments
    pause Scan
    
    value_d = value dig 1    'Select the 1 Digit Value
    lookup value_d, [$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE], Segments
    PORTA = PORTA - 1  ' PORTA = XXXX1101
    PORTB = Segments
    pause Scan
    
    value_d = value dig 2    'Select the 2 Digit Value
    lookup value_d, [$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE], Segments
    PORTA = PORTA - 2  ' PORTA = XXXX1011
    PORTB = Segments
    pause Scan
    
    value_d = value dig 3    'Select the 3 Digit Value
    lookup value_d, [$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE], Segments
    PORTA = PORTA - 4 ' PORTA = XXXX0111
    PORTB = Segments
    pause Scan
    
    Goto MAIN

    and for clarity – any change to a single pin in PBP actually is writing to the entire port. (i.e, if you do this PORTA.0=1 then the microprocessor does this PORTA = uuuuuuu1 where the u is the value of the port pin at the time of the execution of the command)
    Paul Borgmeier
    Salt Lake City, UT
    USA
    __________________

Similar Threads

  1. Bits, Bytes Words and Arrays
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 24
    Last Post: - 14th June 2016, 07:55
  2. Individual Variable bits
    By tazntex in forum General
    Replies: 4
    Last Post: - 31st January 2008, 18:27
  3. Equating Ports to Data Bits
    By Osiris in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 22nd March 2006, 15:00
  4. error on compiling
    By parker in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 16th June 2005, 14:31
  5. pics with 3 hardware PWM ports
    By CBUK in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 5th August 2004, 00:14

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