PIC 16F18877
Custom DT_INTS-14.bas entry:
Code:
;---[16F1885x7x]------------------------------------------------------------
; #define IOC_INT INTCON,IOCIF, INTCON,IOCIE ;-- Int On Change
#define IOC_INT PIR0,IOCIF, PIE0,IOCIE ;-- Int On Change *
Will turn LED on when pressed, and off when released:
Code:
#CONFIG
__config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_ON
__config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
__config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_ON & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
__config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_OFF
__config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG
DEFINE OSC 32
include "C:\PBP Includes\DT_INTS-14_16F1885x-7x.bas"
include "C:\PBP Includes\ReEnterPBP.bas"
ASM
INT_LIST macro ;IntSource, Label, Type, ResetFlag?
INT_Handler IOC_INT, _MyIOCinterrupts, PBP, yes
endm
INT_CREATE ;Creates the interrupt processor
ENDASM
'--------------------------------------------------------------------------
' Controlled by DT-INTS
'INTCON = %10000000
' bit 7 GIE Global Interrupt Enable bit
' 1 = Enables all active interrupts
' bit 6 PEIE Peripheral Interrupt Enable bit
' bit 5-1 Unimplemented: Read as ‘0’
' bit 0 INTEDG Interrupt Edge Select bit
'PIE0 = %00010000 ' PERIPHERAL INTERRUPT ENABLE REGISTER 0
' bit 7-6 Unimplemented: Read as ‘0’
' bit 5 TMR0IE: TMR0 Overflow Interrupt Enable bit
' bit 4 IOCIE: Interrupt-on-Change Interrupt Enable bit
' 1 = Enables the IOC change interrupt
' bit 3-1 Unimplemented: Read as ‘0’
' bit 0 INTE: INT External Interrupt Flag bit
'--------------------------------------------------------------------------
IOCCP = %00010000 ' INTERRUPT-ON-CHANGE PORTC POSITIVE EDGE REGISTER
' bit 7-0 IOCCP<7:0> Interrupt-on-Change PORTC Positive Edge Enable bits
' 1 = Interrupt-on-Change enabled on the pin
' for a positive-going edge. IOCCFx bit
' and IOCIF flag will be set upon detecting an edge.
IOCCN = %00010000 ' INTERRUPT-ON-CHANGE PORTC NEGATIVE EDGE REGISTER
' bit 7-0 IOCCP<7:0> Interrupt-on-Change PORTC Negative Edge Enable bits
' 1 = Interrupt-on-Change enabled on the pin
' for a Negative-going edge. IOCCFx bit
' and IOCIF flag will be set upon detecting an edge.
ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000000
TRISA = %00000000
TRISB = %00000000
TRISC = %00010000
TRISD = %00000000
TRISE = %00000000
PushSwitch VAR PortC.4
InterruptLED VAR LatC.2
ButtonWasPressed VAR byte
Pause 500 ' Let PIC stabilize
InterruptLED = 0
ButtonWasPressed = 0
@ INT_ENABLE IOC_INT
IOCCF.4 = 0
Mainloop:
if ButtonWasPressed = 1 then ' Check flag
InterruptLED = 1
else
InterruptLED = 0
endif
goto mainloop
MyIOCinterrupts:
if IOCCF.4 = 1 then
if ButtonWasPressed = 1 then ' toggle flag
ButtonWasPressed = 0
else
ButtonWasPressed = 1
endif
IOCCF.4 = 0
endif
@ INT_RETURN
end
Bookmarks