Hi Mister_E,
Unfortunately this does not help. I removed all irrelevant code from the program to make it more clear, sorry for not doing this before. The code I have now for test is below. When it starts, calling empty Test subroutine always triggers interrupt so the GREENLED is ON. If I disable the GOSUB TEST, then it starts with GREENLED OFF (interrupt handler did not run)
This is the first time I play with interrupt - most likely do something wrong. The MCU is PIC16F688
@ DEVICE pic16F688, WDT_OFF, INTOSCIO, PWRT_ON, MCLR_ON, BOD_OFF
define OSC 4
clear
'---------INTERRUPTS CONFIG-----------
INTCON = %10000 'ENABLES RA2 (1,) OTHER INTERRUPTS ON PORTA ARE OFF (BIT 3)
IOCA = %100 'ENABLES INTERRUPT ON PORTA.2
;---------VARIABLES----------------------
BTN VAR PORTA.2
YW VAR PORTC.2
REDLED VAR PORTC.4
GREENLED VAR PORTC.5
N VAR BYTE
'-----------PORTS CONFIGURATION------------
OPTION_REG = 0
ANSEL = %1000 'PORTA4/AN3 IS ANALOG
TRISA = %111100 'SET PORT A FOR OUTPUTS ON PINS 0,1 (UNUSED) ALL OTHER INPUTS
TRISC = %000010 'SET PORT C FOR INPUT ON PIN 1 (DIAG IN) ALL OTHER OUTPUTS
'THE FOLLOWING DID NOT HELP
N=PORTA 'JUST TO READ PORTA
INTCON.0=0 'CLEAR INTERRUPT FLAG AFTER READING PORT (RAIF FLAG)
INTCON.1=0 'CLEAR INTF FLAG FOR PORT RA2
PORTC=0 'GREENLED SHOULD STAY OFF
GOSUB TEST 'THIS SUBROUTINE ALWAYS CAUSES INTERRUPT!!!
'NOW GREENLED ON PORT C5 IS ON !!!
'THE FOLLOWING DID NOT HELP
N = PORTA 'READ PORT A TO CLEAR MISMUTCH, NOTHING ELSE
INTCON.0=0 'CLEAR INTERRUPT FLAG AFTER READING PORT
INTCON.1=0
ON INTERRUPT GOTO BTN_CHECK ' CHECK ON/OFF BUTTON
START:
GOTO START 'WAIT HERE TILL INTERRUPTED
TEST: 'NO CODE IN THIS SUBROUTINE
RETURN
DISABLE
BTN_CHECK:
IF GREENLED = 0 THEN
GREENLED = 1
ELSE
PORTC=0
ENDIF
'' PAUSE 1000 'ANTI VIBRATION
N = PORTA 'READ PORT A TO CLEAR MISMUTCH, NOTHING ELSE
INTCON.0=0 'CLEAR INTERRUPT FLAG AFTER READING PORT (RAIF FLAG)
INTCON.1 = 0 'CLEAR INTF FLAG FOR PORT RA2
RESUME
ENABLE
Bookmarks