Toggle program branch ussing interrupot by button?


Closed Thread
Results 1 to 14 of 14

Hybrid View

  1. #1
    Join Date
    Feb 2013
    Posts
    1,122


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    I don't want to include the button status check routine in the loops, since whole program works with microsecond delays and high accuracy. This is why I wanted to use interrupt. LOOP1 and LOOP2 are totally independent tasks, they don't use same variables, timings or whatsoever.

  2. #2
    Join Date
    Nov 2007
    Location
    West Covina, CA
    Posts
    219


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    That's a good question...

    I wonder if something like this would work?

    Code:
    x VAR BIT
    
    ;----------------------- Setup Interrupts --------------------------------
    INCLUDE "DT_INTS-18.bas"     ; Darrel Taylor's Base Interrupt System
    INCLUDE "ReEnterPBP-18.bas"  ; Include if using PBP interrupts
    ASM
    INT_LIST  macro ; IntSource,          Label,  Type, ResetFlag?
        INT_Handler    INT0_INT,     Button_ISR,   PBP,  yes
        
        endm
        INT_CREATE             ; Creates the interrupt processor
    ENDASM
    
    ;----------------------[Initialise Interrupts]-----------------------
    @   INT_ENABLE  INT0_INT         ; Enable Button interrupt input
    x = 0       ' Clear button status flag bit
    
    PAUSE 100
    GOTO loop1  ' Start at loop1 routine
    
    ' ---------------- Independent program routines -------------------------
    loop1_start:
    @ INT_RETURN    ; Reset the ISR
    
    loop1:
        ' Perform one type of "time critical" function
    GOTO loop1
    
    
    loop2_start:
    @ INT_RETURN    ; Reset the ISR
    
    loop2:
        ' Perform a different type of "time critical" function   
    GOTO loop2
    
    ;--------------------[Program routine selector ISR]----------------------
    ; make sure button signal debounced
    
    Button_ISR:    
        x = !x      ' Toggle x status flag bit
        
        IF !x THEN
            GOTO loop1_start    ' Go here when x=0
        ELSE 
            GOTO loop2-start    ' Go here when x=1
        
    @ INT_RETURN
    Like Henrick said, the routines could be cut short anytime the button is pushed though.
    Louie

  3. #3
    Join Date
    Feb 2013
    Posts
    1,122


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    Thanks. As I can see, the code is for PIC18xxx family. Will it work on 12xx or 16xx ?

  4. #4
    Join Date
    Nov 2007
    Location
    West Covina, CA
    Posts
    219


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    Not for PIC12's or 16's.
    You'll have to download DT's Interrupts for them here and replace entry with:
    Code:
    INCLUDE "DT_INTS-14.bas"    ; Base Interrupt System
    INCLUDE "ReEnterPBP.bas"    ; Include if using PBP interrupts
    I was kinda hoping someone would point out my errors in my suggestion, if any, before you went too far into a possible dead end.

    If you haven't tried DT's INTS, you're missing out on some awesome timing control when it comes to sequence of events. It took me a little while to understand but finally got some handle on it when I monitored two interrupts taking turns to run their routines, especially when one occurs while the other ISR is taking care of business.
    Louie

  5. #5
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,604


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    Hi,
    I was kinda hoping someone would point out my errors in my suggestion, if any, before you went too far into a possible dead end.
    Ok Louie, I'll take a stab at that if you wish... :-)

    If the program is looping around in Loop2 (x=1) when the interrupt occurs the ISR will toggle x to 0 and then GOTO Loop1_Start.
    At Loop1_Start there's an @INT_RETURN which will send it back into Loop2 since that's where it was when the interrupt occured.

    /Henrik.

  6. #6
    Join Date
    Nov 2007
    Location
    West Covina, CA
    Posts
    219


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    Thanks Henrik, I stand corrected.

    CuriousOne, I tried to do something like this in the past and thought I came up with a better idea all of a sudden, but to avail.
    Louie

  7. #7
    Join Date
    Feb 2013
    Posts
    1,122


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    I found a sample code here:

    http://darreltaylor.com/DT_INTS-14/hello.html

    The code is OK for me, since I also need a selected loop indication via led. What if I mod it a like this:

    Code:
    '---[INT - interrupt handler]---------------------------------------------------
    ToggleLED1:
         TOGGLE LED1
    IF LED1=1 then goto LOOP1 ELSE GOTO LOOP2
    
    LOOP1:
    
    LOOP2: 
    @ INT_RETURN

  8. #8
    Join Date
    Nov 2007
    Location
    West Covina, CA
    Posts
    219


    Did you find this post helpful? Yes | No

    Default Re: Toggle program branch ussing interrupot by button?

    Sorry for the delay, but I don’t think that would be a good solution since the ISR should only spend enough time in there to update values, take readings, turn things ON/OFF, etc.. Pretty much just get in and get out.

    Your example is like the one Henrik suggested but within the ISR.

    But got another wild idea if your tight loop can sacrifice just a little time to test the ISR flag bit:
    Code:
    INT VAR BIT
    
    INT = 0
    '------------------------
        
    loop1:
        code
        IF INT THEN GOTO loop2   ' Jump to loop2 after loop1 finished if interrupt triggered
    GOTO loop1                                                  
    
    loop2:
        more code
        IF !INT THEN GOTO loop1  ' Jump to loop1 after loop2 finished if interrupt triggered
    GOTO loop2
    
    
    ; --------------  ISR toggles a flag bit ----------
    Button_ISR:
        
        INT = !INT
        
    @ INT_RETURN
    This way, I'm thinking, any one of the loops can complete it's mission before jumping to the other routine should an interrupt happen. Or just continue in it's loop until the button is pushed.
    Louie

Similar Threads

  1. TOGGLE will not go LOW
    By SUNFLOWER in forum mel PIC BASIC Pro
    Replies: 17
    Last Post: - 10th August 2014, 16:53
  2. toggle switches and buttons-- need little help
    By electromark in forum General
    Replies: 2
    Last Post: - 25th October 2012, 22:35
  3. Toggle command
    By mr.sneezy in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 16th December 2011, 02:07
  4. toggle or count?
    By earltyso in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 26th May 2008, 08:54
  5. BRANCH/BRANCHL for GOSUB
    By selbstdual in forum PBP Wish List
    Replies: 11
    Last Post: - 20th February 2007, 14:29

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