Interrupt 101


Closed Thread
Results 1 to 17 of 17

Thread: Interrupt 101

Hybrid View

  1. #1
    Join Date
    Sep 2007
    Posts
    59

    Default Interrupt 101

    I'd like to learn about using interrupts and have been reading several of the timer interrupt threads and looks like some fancier stuff as well. However, I'm trying to start with understanding it in PBP listening to a couple inputs then bake in some timing and high or low priority.

    But before I get there I'm not understanding the nomenclature in the manual on p108. I'm using a PIC 18F6520. and the manual has:
    INTCON = %10010000 'enable RB0 interrupt

    I don't quite get this statement. Can external interrupts only be read on the RB# port?
    And then the 10010000, is this presetting the values for each RB_ to all zeros except for the 5th and 8th to 1?

    Then to further confuse myself the code sample I'm looking at which doesn't use interrupts at all (to the best of my knowledge) has a line in the declarations:
    INTCON2.7 = 0
    I'm not sure what this one means or if it has something to do with interrupts or not.

    I've been able to teach myself quite a bit from the manual but this one has me stumped.

    Any help is appreciated.
    Thank you,
    Hylan

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,521


    Did you find this post helpful? Yes | No

    Default Re: Interrupt 101

    Hi,
    External interrupts are available on one or more pins. The 18F6520 seems to have four located on RB0-RB3. Smaller chips may only have one which is "always" on RB0. (Then you have the interrupt on change but lets leave that for now).

    INTCON is the interrupt control register (one of them in the 18F6520). Look at the INTCON register in the datasheet, it'll show you what each bit does. In this case the MSB enables all unmasked interrupts and bit 4 enables the INT0 interrupt.

    INTCON2.7=0 disables the internal pullup resistors for PortB.

    The PBP is only part of the documentation, you must use the datasheet for your particular PIC as well.

    Good luck!
    /Henrik.

  3. #3
    Join Date
    Sep 2007
    Posts
    59


    Did you find this post helpful? Yes | No

    Default Re: Interrupt 101

    Henrik,

    I appreciate it. I've been looking at the datasheet and it's starting to make more sense. I'm not a programmer or circuit designer but am having to learn as this falls under the "other duties as deemed necessary" in the job description and the original guy who did it is no longer available.

    So I think I now understand the physical input. Let's say I want to see an incoming serial message on pin RC7 (RX1 pin) and interrupt the home routine. I would need to first trigger RB0 to interrupt and goto the interrupt routine to read the serial data? Am I thinking correctly?

    Second question. How do I set up software interrupts? Like if a certain value occurs like 3 I/O's are turned on then I want a variable like "AllON = 1" to interrupt the routine and do something.
    Thank you,
    Hylan

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


    Did you find this post helpful? Yes | No

    Default Re: Interrupt 101

    There's USART interrupt as well. Check out the USART/EUSART section of the datasheet.

    A really easy and efficient way to start right now with interrupts is to use Darrel Taylor Instant Interrupts. Check out this link.
    http://www.pbpgroup.com/modules/wfse...p?articleid=19

    For your, and any, specific requirement, there's a load of different approach.. say one different per programmer

    The basic skelleton:
    Main program (Loop)
    Interrupts.

    Whatever happen in your Interrupts, you may set flags there and process them in your main loop.

    OR you may process some dull duties in your main loop and force interrupts to happen in your main loop too.

    To read I/Os and evaluate them, you may use something like that (Which assume some push button connected to gnd on PORTB<3:0> (b3, b2, b1, b0)
    Code:
    SomePushButton VAR BYTE
    '
    '
    '
    '
    SomePushButton = PORTB & $0F ' read PORTB and keep only <3:0> bits (Bitwise AND)
    SELECT CASE SomePushButton
         CASE %1110 ' PORTB.0
              ' code for PORTB.0 here
         CASE %1101 ' PORTB.1
              ' code for PORTB.1 here
         CASE %1011 ' PORTB.2
              ' code for PORTB.2 here
         CASE %0111 ' PORTB.3
              ' code for PORTB.3 here
         END SELECT
    Steve

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

  5. #5
    Join Date
    Sep 2007
    Posts
    59


    Did you find this post helpful? Yes | No

    Default Re: Interrupt 101

    Beautifull! I feel like I now have enough to be dangerous or at least dangerous in a productive, 'hmmm that didn't work but I learned something' sort of way.

    Thank goodness for reprogrammable pics!

    Thank you,
    Hylan

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


    Did you find this post helpful? Yes | No

    Default Re: Interrupt 101

    Quote Originally Posted by Hylan View Post
    Thank goodness for reprogrammable pics!
    Amen! Couldn't even think to re-use my UV Eraser anyway

    I still have some UV one though... good on a pinboard or as staple... (again)

    if someone talk about software simulator I'll kick his butt
    Steve

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

Members who have read this thread : 1

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

Tags for this Thread

Posting Permissions

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