Instant Interrupts - Revisited


Closed Thread
Results 1 to 40 of 773

Hybrid View

  1. #1
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Smile

    Quote Originally Posted by Ioannis View Post
    Thanks Alain.

    But with MCS does it compile OK?

    Ioannis
    Hi, Ioannis

    I've verified in real life ... my old programs Work fine, compiled With MCS.

    Was not so evident due to little changes in the resulting HEX ...

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  2. #2
    Join Date
    Dec 2005
    Posts
    24


    Did you find this post helpful? Yes | No

    Default

    Darrel,
    In my PBP code the only assembly routine would be your code for the interrupt and I have no branch routines. My interrupt routine is in PBP, not assembly, but if is was, could this then be a possible issue. Also in searching this thread, I did see the possibly of inserting "@ errorlevel -306 " to suppress the warning, if this is a OK, where does it makes sense to insert it, such as right after the includes.
    Thanks for your help,
    Terry

  3. #3
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    The ASM that declares Interrupts, will be OK because all the GOTO's and GOSUB's/CALLs in DT_INTS already use Paging code.

    If the ISR is assembly language, there would be a possibility of page problems.
    But if you use L?GOTO or L?CALL instead of goto or call, then it won't be a problem either.
    They are macro's that are part of PBP and automatically set PCLATH to the correct page before jumping. They also reset to BANK0, so anywhere they jump to should assume the bank is currently 0.

    The -306 line can technically be put anywhere in the program before the first Page Crossing. But it's usually found at the very top, right up there with your __CONFIG lines.
    <br>
    DT

  4. #4
    Join Date
    Dec 2005
    Posts
    24


    Did you find this post helpful? Yes | No

    Default

    Many Thanks Darrel,
    For your help now and for a GREAT easy to use approach for interrupts using PBP.
    Terry

  5. #5
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Alain,

    I got ahold of Charles Leo, RE: the duplicate label problem.

    Like I said before, I don't use MPLAB so I didn't know you could do this.

    Under Project | Build Options | Project | PICBASIC PRO tab ...
    Check the "Use Alternate Settings" checkbox, and remove the -k- or -k# parameter.

    The Tracteur program then compiles without error within MPLAB.
    And the setting only affects the Tracteur program.



    HTH,
    DT

  6. #6


    Did you find this post helpful? Yes | No

    Default RBC_INT Question

    I am running into a problem trying to figure out how to use RBC_INT on portB.1

    I am using a 16F883 and I am looking for B.1 to drop from high to low. Below is part of my code to read the interrupt.

    readchar:
    @ INT_DISABLE RBC_INT
    Dummy = PortB
    if Dummy.1 = 0 then
    goto good_int
    Else
    @ INT_CLEAR RBC_INT
    @ INT_ENABLE RBC_INT
    @ INT_RETURN
    endif
    good_int:
    ' process the interrupt code here


    I know this is not correct but I cannot figure out why?

    Any help would be appreciated.

  7. #7
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Wink

    Quote Originally Posted by Darrel Taylor View Post
    Alain,

    I got ahold of Charles Leo, RE: the duplicate label problem.

    Like I said before, I don't use MPLAB so I didn't know you could do this.

    Under Project | Build Options | Project | PICBASIC PRO tab ...
    Check the "Use Alternate Settings" checkbox, and remove the -k- or -k# parameter.

    The Tracteur program then compiles without error within MPLAB.
    And the setting only affects the Tracteur program.

    HTH,
    Hi, Darrel

    Thanks for the trick ...

    Now, we've completely lost the debug view of produced ASM ... no more labels and even breakpoints can't be used.

    Hope Melabs will correct that soon ... !!!

    BTW I've appreciated Melabs has cleaned the LOOKUP tables ... New EEPROM commands are also fine ... knowing the LSByte is written first !!!

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

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


    Did you find this post helpful? Yes | No

    Default Disturbance in the force

    Hi everyone,
    I think I'm getting very close to understanding DT's interrupt routine but need some direction.
    I'm using a PIC16F688 to make myself a test fixture to test some product but pretty sure I did something wrong in the setups.
    Using this small test program and a scope to monitor an output, I see the "Toggling" led stop during the interrupt routine. This only happens when PAUSE, FOR/NEXT and PAUSEUS is used in the main.
    Ultimately, I will need to send serial data using SEROUT2 continueously in the background so I can do other chores in the foreground that will use TMR1, A/D and some simple LED indications.

    Code:
    '*************************************************************************
    '*  Name    : Test fixture.BAS                                 
    '*  Author  : Louis Chagoya                                     
    '*  Notice  : Copyright (c) 2008 Link M Technologies            
    '*          : All Rights Reserved                               
    '*  Date    : 8/24/2009                                       
    '*  Version : 1.1                                         
    '*  Notes   : This system uses the PIC16F688 to learn DT's Interrupt system
    '*  while utilizing other signalling functions at the same time.
    '*************************************************************************
    '/////////////////////////////////////////////////////////////////////////
    '                       Configs
    '/////////////////////////////////////////////////////////////////////////
    @ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF
    OSCCON = %01100001      ' Oscillator set to 4MHz, bits 6-4
    CMCON0 = 7		        ' Analog comparators off
    ADCON0 = %10010000      ' A/D right justified, Vref=VDD, AN2 selected
    ADCON1 = %01010000      ' A/D conversion CLK/16
    ANSEL = %00000100       ' AN2 set to analog input rest digital
    TRISA = %00101101       ' Set ports 0,2,3 and 5 as inputs, rest outputs
    TRISC = %00000000       ' Set all pins as outputs
    
    'DEFINE OSC 8           ' Define OSC to 8Mhz for PAUSE setting
    DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
    DEFINE ADC_CLOCK 5     ' ADC clock source  (Fosc/16)
    DEFINE ADC_SAMPLEUS 7  ' ADC sampling time (uSec)
    DEFINE SER2_BITS 8     ' Set up baud rate for 7812bps
    
    '/////////////////////////////////////////////////////////////////////////
    '                        Pin I/O naming
    '/////////////////////////////////////////////////////////////////////////
    Data_In VAR PORTA.0     ' Pin 13 Data from UUT
    Data_Out VAR PORTA.1    ' Pin 12 Data to UUT
    '        VAR PORTA.2    ' Pin 11 GPS input from UUT
    Test VAR PORTA.3        ' Pin 4 Push button to begin test
    Bypass VAR PORTA.4      ' Pin 3 Puts UUT into Bypass or Active mode
    Byp_Sel VAR PORTA.5     ' Pin 2 Select type switch input
    BCDval var PORTC        ' All of PortC declared as variable
    Ready VAR PORTC.0       ' Pin 10 READY LED
    Byp_Pass VAR PORTC.1    ' PIn 9 BYPASS test PASS LED - Green
    Byp_Fail VAR PORTC.2    ' PIn 8 BYPASS test FAIL LED - Red
    Act_Pass VAR PORTC.3    ' PIn 7 ACTIVE test PASS LED - Green
    Act_Fail VAR PORTC.4    ' PIn 6 ACTIVE test FAIL LED - Red
    Pwr_ON VAR PORTC.5      ' PIn 5 Provides power to UUT
    
    
    '/////////////////////////////////////////////////////////////////////////
    '                        Variable declarations
    '/////////////////////////////////////////////////////////////////////////  
    i VAR BYTE              ' Increment counter when needed
    cksm VAR BYTE           ' Checksum variable
    
    
    '/////////////////////////////////////////////////////////////////////////
    '                       DT's Interrupt Routine
    '/////////////////////////////////////////////////////////////////////////
    INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
    INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts
    
    ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
            INT_Handler   TMR0_INT,    _Gen_Data,   PBP,  YES
        endm
        INT_CREATE               ; Creates the interrupt processor
    ENDASM
    
    '.....Various OPT_Reg tries....
    
    'OPTION_REG.3 = 1             ' Prescaler is assigned to the WDT
    'OPTION_REG.2 = 1             ' N/G, even with WDT ON
    'OPTION_REG.1 = 1
    'OPTION_REG.0 = 1             ; REGISTER 5-1: Prescaler = 1:1 via WDT rate
    
    OPTION_REG = 7               ' Times out in 65.2ms. Will need 100ms when
                                 ' get it to work
    @ INT_ENABLE  TMR0_INT       ; enable Timer 0 interrupts
    
    cksm = 85
    
    '/////////////////////////////////////////////////////////////////////////
    '                           Main Program
    '/////////////////////////////////////////////////////////////////////////
    start:     
         
         TOGGLE act_fail    ' Use this output to monitor routine
         PAUSE 1
         TOGGLE act_fail
         PAUSE 1
           
    GOTO start
    
    '---[TMR0 - interrupt handler]--------------------------------------------
    
    Gen_Data:
    
        SEROUT2 Data_out, 108, [cksm]   ' Serial out cksm value at 7812bps
        PAUSEUS 3720                    ' Total time= 5ms
    
    @ INT_RETURN
    
    
    END
    My understanding is that main program should not be disturbed by the interrupt routine if done properly. In this case, I'm hoping I'm not being proper rather than using the wrong PIC for my app.

    Thank for your help...
    Louie

Similar Threads

  1. Clock using Instant Interrupts
    By PICpocket in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 16th February 2009, 22:43
  2. DT instant interrupts with mister_e keypad
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th November 2008, 21:02
  3. DT's Instant Interrupts trouble
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 24th November 2008, 21:48
  4. Keypad and DT's Instant Interrupts
    By Homerclese in forum General
    Replies: 11
    Last Post: - 27th April 2007, 07:32
  5. Replies: 1
    Last Post: - 1st November 2006, 04:11

Members who have read this thread : 5

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