Interrupt Or I Am Going To Die


Closed Thread
Results 1 to 27 of 27

Hybrid View

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


    Did you find this post helpful? Yes | No

    Default

    Couple of things to remember.

    1. It is not a good idea to post an e-mail on the forum. You will get thousands of junks to your e-mail. I suggest that you remove it right away and PM to members instead.

    2. You are not using PBP, but this is a PBP forum

    3. Lets keep this issue on this forum, so that it can be some help to some other members having similar issue.


    -----------------------------
    Let me try to start by changing the code to PBP first.

    In your schematic, I would use Interrupt on RB0 pin, instead of RB6 pin. May be you should change that first.

    Then, assuming you are now using RB0/Int, we set Intcon Bit 4: RB0/INT External Interrupt Enable bit. Thus, we end up with INTCON = %10010000

    Now the code should look like below but remember it is with PBP statements. You can get around it.


    Code:
    TRISA =  %00000000     'All output.
    TRISB =  %00000001     'RB0 is input, rest is output.
    INTCON = %10010000     'Enable global (Bit7) interrupt, enable RB0/Int (Bit4) 
    ON INTERRUPT GOTO FLASH
    
                                                     
    loop:
        PORTA = 255
        PAUSE 200
        PORTA = 0
        PAUSE 200
        GOTO loop
    
    disable
    
        FLASH:
            PORTA = 0
            INTCON.0 = 0
    
    RESUME
    ENABLE
    
    END

    Also, why do you have to use interrupt?


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

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


    Did you find this post helpful? Yes | No

    Default

    Add this line before your main loop:

    RBIF var INTCON.0

    Add these two lines to your flash subroutine:

    @ MOVE?BA PORTB 'Read PORTB by placing it WREG
    RBIF = 0 'Clear the interrupt flag

    Also, read the pic datasheet on interrupts and under the I/O Ports section. You should find were it mentions both of items added to the ISR.

    Steve

  3. #3
    kunguz's Avatar
    kunguz Guest


    Did you find this post helpful? Yes | No

    Question @ Move?ba Portb

    @ MOVE?BA PORTB

    IDE did not recognize this line

  4. #4
    kunguz's Avatar
    kunguz Guest


    Did you find this post helpful? Yes | No

    Question Retlw Portb.6

    RETLW PORTB.6 when I use this line in top flash block, it doesn't do anything and continue to it's job

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


    Did you find this post helpful? Yes | No

    Default

    I shouldn't have been so brief in my first response, so here is a little more explaination. But, you would be well served to learn more about interrupts if this explaination is still confusing.

    @ MOVE?BA PORTB

    This is a PBP internal macro which reads PORTB and moves the value to W register. It results in the asm instruction: MOVF PORTB, W This is the simplist way to read PORTB to end the mismatch which triggers the interrupt on change. No variables and only one line of code are required.

    RBIF var INTCON.0

    This statement assigns the Interrupt Flag (at INTCON.0) used for the PORTB's interrupt on change to the name "RBIF" (which is what it is refered to in the PIC datasheets).

    RBIF = 0 'Clear the interrupt flag

    This statement clears the interrupt flag, which is also required before exiting the interrupt service routine (ISR), or the program will continue returning back to the ISR. No matter what type of interrupt you use, the Interrupt Flag for that particular interrupt must always be cleared before exiting the ISR, or you will end up in an endless loop.

    Steve

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


    Did you find this post helpful? Yes | No

    Default One Other Thing...

    As Sayzer asked,
    Quote Originally Posted by sayzer
    Also, why do you have to use interrupt?
    Using interrupts may just be overcomplicating the application. Could you just pool the I/O line in question in your main loop?

    Steve

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


    Did you find this post helpful? Yes | No

    Default

    As Steve repeated,

    May be, a code like the one below could do the job for you, may be.

    Code:
    TRISA =  %00000000     'All output.
    TRISB =  %01000000     'RB6 is input, rest is output.
    
    IN_PIN VAR PORTB.6
    
                                                     
    Loop:
    
        WHILE IN_PIN
            PORTA = 255
            PAUSE 200
            PORTA = 0
            PAUSE 200
        WEND
        PORTA = 0
    
        GOTO Loop
    
    END
    Not a real drop-in interrupt compatible code but may work in some cases.

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

  8. #8
    kunguz's Avatar
    kunguz Guest


    Did you find this post helpful? Yes | No

    Question Finally working but still got a problem

    Thanks alot for your helps and replies;

    It finally works with this code below , but to return to main progress takes approximetly 1:20 minute. I think there might be problem with my schematic; If ISIS is that good, may be simulation thinks about small arcs that is created by button .Which gives a unexpected voltage levels for a short time to the PORTB.6.So PIC interrupts it's self for more then one time.The reason that took so long, might be that. Is this the problem or is it still in software _?

    device 16f84a
    ON_INTERRUPT goto flash
    intcon = %10001000
    input portb.6

    loop:
    high porta
    delayms 200
    low porta
    delayms 200
    goto loop

    disable

    flash:
    delayms 1000
    MOVF PORTB, W
    low porta
    intcon.0 = 0
    CONTEXT RESTORE

    end

  9. #9
    kunguz's Avatar
    kunguz Guest


    Did you find this post helpful? Yes | No

    Question Microchip

    After removing delayms1000 waiting for interrupt takes much shorter time like 1 sec. And I look with an osiloscope in simultion to the portb.6 which i see is a clear 5V. http://ww1.microchip.com/downloads/e...tes/00566b.pdf after reading this I get the feeling like this circuit did not fit for a small pulse width. Is this the problem or am I doing something wrong in programming

  10. #10
    kunguz's Avatar
    kunguz Guest


    Did you find this post helpful? Yes | No

    Question For a simple click I get 2 change

    After using this new code below, I get value of sayi +2 each time I click.

    device 16f84a
    ON_INTERRUPT goto flash
    intcon = %10001000
    input portb.6 ' Bu pinleri sıfırladıktan sonra alıcı olarak ayarlamalısın
    dim sayi as byte
    sayi = 0

    loop:
    high porta
    delayms 200
    serout portb.3,16780,[Dec sayi ,13]
    goto loop

    disable

    flash:
    MOVF PORTB, W
    low porta
    intcon.0 = 0
    sayi = sayi + 1
    CONTEXT RESTORE

    end

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


    Did you find this post helpful? Yes | No

    Default

    Hi Kunguz,

    In your code, which you said works, how did you get "HIGH PORTA" or "LOW PORTA" work?


    ?


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

Similar Threads

  1. Won't go back to SLEEP after 1st Interrupt
    By jellis00 in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 29th June 2009, 09:00
  2. Can't ID interrupt source with this IntHandler??
    By jellis00 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 3rd June 2009, 02:35
  3. Help with Analog Interrupt
    By brid0030 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 13th February 2008, 18:14
  4. NEWBIE: Some basic questions using interrupts
    By JackPollack in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 8th March 2006, 02:59
  5. USART interrupt not interrupting right
    By Morpheus in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 6th March 2005, 01:07

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