Interupt for RB1 & RB2


Closed Thread
Results 1 to 4 of 4
  1. #1
    itmsoil's Avatar
    itmsoil Guest

    Red face Interupt for RB1 & RB2

    Help is needed guys.
    i am trying to implement this program below but using either
    RB1 or RB2 as RB0 on my pic is already being used. i am using a
    pic18f452
    Could another help out .


    ' On Interrupt - Interrupts in BASIC Using 18f452
    ' Turn LED on. Interrupt on PORTB.0 (INTE) turns LED off.
    ' Program waits .5 seconds and turns LED back on.

    led var PORTB.7

    INTCON2.7 = 0 ' Enable PORTB pullups
    INTCON2.6 = 0 'interupt on falling edge

    On Interrupt Goto myint ' Define interrupt handler
    INTCON = $90 ' Enable INTE interrupt

    loop: High led ' Turn LED on
    Goto loop ' Do it forever


    ' Interrupt handler
    Disable ' No interrupts past this point
    myint: Low led ' If we get here, turn LED off
    Pause 500 ' Wait .5 seconds
    INTCON.1 = 0 ' Clear interrupt flag
    Resume ' Return to main program
    Enable



    Itm

  2. #2
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    You need to look at your data sheet for the 18F452 page 76 & 77 as they tell you what bits to be set for RB1 & RB2. INTCON2 bit 4 & 5 set the edge to trigger the interrupt. INTCON3 bits 6 & 7 set the interrupt priority, INTCON3 bits 3 & 4 set the enable mask and INTCON3 bits 0 & 1 are the interrupt flags set for the ports RB1 & RB2. It's all in the document.....

  3. #3
    itmsoil's Avatar
    itmsoil Guest


    Did you find this post helpful? Yes | No

    Default

    Dave Thank for the pointer
    i have manage to get just RB0 and RB2 working but i do get strange results for RB1
    when i press the button connected to Rb1, the the message Rb0 pressed displayed before displaying Rb1 pressed.
    Could someone please help me with this


    DEFINE LOADER_USED 1 ' uses a bootloader
    INCLUDE "Modedefs.Bas"

    ' ** Setup Crystal Frequency in mHz **

    DEFINE OSC 20 ' Set Xtal Frequency

    DEFINE LCD_DREG PORTD
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTD
    DEFINE LCD_RSBIT 1
    DEFINE LCD_EREG PORTD
    DEFINE LCD_EBIT 0
    DEFINE LCD_RWREG PORTD ' PORTD for R/w bit
    DEFINE LCD_RWBIT 2 ' PORTD-1 for LCD's R/W line
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 2
    DEFINE LCD_COMMANDUS 2000' Command Delay (uS)
    DEFINE LCD_DATAUS 50 ' Data Delay (uS)



    I CON 254 ' Control Byte
    Clr CON 1 ' Clear the display
    Line1 CON 128 ' Point to beginning of line 1
    Line2 CON 192 ' Point to beginning of line 2



    ' ** Define the bits within the ADCON1 register **

    index VAR BYTE
    R0 VAR BYTE
    R1 VAR BYTE
    R2 VAR BYTE
    TRISA=%00111111
    TRISB=%00100111
    TRISC=%10100110
    TRISD=%00001000
    TRISE.0=1
    TRISE.1=1
    TRISE.2=1


    INTCON2.7=0 'Enable portB pullups
    INTCON2.6=0 '%Interupt on falling edge



    Main:



    Pause 1000 ' delay for lcd

    Loop:
    '==== ================================================== ========================
    LCDOut I,Clr
    LCDOut I,Line1,"Power on"

    For index =1 TO 500
    Pause 1
    Next index

    ON INTERRUPT GoTo myint1 ' Define interrupt handler
    INTCON=%10010000 ' Enable RB0 interupt

    'The RB0 interupts works ok but RB1 & RB2 don't
    'Dummy code
    'kkkkkkkkkkkkkkkkkkk

    ON INTERRUPT GoTo myint2 ' Define interrupt handler
    INTCON2.4=0: INTCON2.5=0 ' Enable RB2 interupt
    INTCON3.7=1:INTCON3.6=1
    INTCON3.4=0:INTCON3.3=1

    ON INTERRUPT GoTo myint3 ' Define interrupt handler

    INTCON2.4=0: INTCON2.5=0 ' Enable RB2 interupt
    INTCON3.7=1:INTCON3.6=1
    INTCON3.4=1:INTCON3.3=0


    GoTo Loop

    End


    ' RB0 Interrupt handler
    ' ===========================

    myint1:
    Disable ' No interrupts past this point
    LCDOut I,Clr
    LCDOut I,Line1,"RB0 Pressed"
    For R0 = 1 TO 500 ' allow user to see
    Pause 1
    Next
    INTCON.1 = 0 ' Clear interrupt flag
    Resume ' Return to main program
    Enable


    ' RB1 Interrupt handler
    ' ===========================
    myint2:
    Disable ' No interrupts past this point
    LCDOut I,Clr
    LCDOut I,Line1,"RB1 Pressed"
    For R1 = 1 TO 500 ' allow user to see
    Pause 1
    Next

    INTCON3.0 = 0 ' Clear interrupt flag
    INTCON3.1 = 0
    Resume ' Return to main program
    Enable


    ' RB2 Interrupt handler
    ' ===========================
    myint3:
    Disable ' No interrupts past this point

    LCDOut I,Clr
    LCDOut I,Line1,"RB2 Pressed"
    For R2 = 1 TO 500 ' allow user to see
    Pause 1
    Next
    INTCON3.0 = 0
    INTCON3.1 = 0 ' Clear interrupt flag
    Resume ' Return to main program
    Enable




    Itm

  4. #4
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    Well you almost have it right. There is only 1 interrupt vector or in other words there can only be 1 interrupt routine. Therefore after entering the interrupt routine you must check each interrupt flag to see which interrupt occured and service that interrupt. After this you must clear the approprate interrupt flag then return.

    Dave Purola,

Similar Threads

  1. Replies: 4
    Last Post: - 17th December 2009, 00:29
  2. Help! My 'interupt', erhm ...only interupts the one time?!!!
    By HankMcSpank in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 2nd November 2009, 12:49
  3. 16F877a Interupt driven Hserin
    By RFsolution in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 3rd November 2006, 00:38
  4. 16F676 Interupt
    By BGreen in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 5th March 2006, 20:56
  5. interupt & Sleep Problem - HELP!!
    By Santana in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 23rd November 2004, 10:39

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