PDA

View Full Version : Confused by "on Interrupt"



retepsnikrep
- 9th January 2010, 19:10
I would like to setup a simple GP3 pin going high interrupt on a 12f683 chip.

Nothing fancy simply interrupt a loop when pin goes high.

The intcon command is confusing me, as is how to select GP3 as the interrupt pin?

I note that cmcon0 and ansel also have to be set to configure pin as digital input.

The "on interrupt" comand in the manual doesnt show how to select the choosen pin for the interrupt? Please help. Thanks

Acetronics2
- 9th January 2010, 19:35
Hi,

Open your Pic datasheet on $ 12.4 and you'll find everything about 12F683 interrupts ...

Alain

retepsnikrep
- 9th January 2010, 20:01
already done that can't understand it well enough im afraid :(

ScaleRobotics
- 9th January 2010, 20:43
already done that can't understand it well enough im afraid :(

on interrupt is painful compared to Darrel Taylor's interrupts. Check out:

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

and some talk about using the 12f683 with DT_INTS
http://www.picbasic.co.uk/forum/showthread.php?t=3251&page=3

Walter

retepsnikrep
- 10th January 2010, 08:02
OK thanks. Can anyone show me how to set up a simple interrupt as per my original post using DT Interrupts?

Archangel
- 13th January 2010, 05:44
OK thanks. Can anyone show me how to set up a simple interrupt as per my original post using DT Interrupts?

hI retepsnikrep,
Sorry for the delay. DT_INTS-14.bas Works excelently as is for all the 14 bit core PICs with ports defined as PortA, PortB . . . . I ran into a little snag porting it to the 12F series for GPIO on change in the port naming convention, and the fact they do not have RBC port to interrupt. I tried making appropriate changes in DT ints but got flag errors, so I took another tact which works. I added aliases in the P12F683.inc file of mpasm so as to give the compiler the belief that GPIO and PortB were the same.
I added this to it in the area of INTCON Bits


RBIF EQU H'0000' ; ADDED FOR dt INTS
RBIE EQU H'0003' ;ADDED

This tells the assembler to act on RBIF as the same as GPIF and RBIE as GPIE .
I didn't have a 683 so I compiled for a 683 and loaded into a 675, it works anyway, maybe Darrel has better ideas, this is what I was able to do.





@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF
DEFINE OSC 4
Include "DT_INTS-14.bas"

CMCON0 = 7 ' comparator pins configured as I/O
ANSEL = 0 ' all I/O as digital
OSCCON = %01100000 ' 96 decimal
GPIO = %00000000
TRISIO = %00001000 ' GPIO Input all others as Outputs
Option_Reg = %01000000 ' Interrupt on rising edge INTEDG bit
IOC = %00001000 ' Enable interrupt on change gpio.3
i var byte
Mainloop:
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler RBC_INT, _Do_This, ASM, no
endm
INT_CREATE ; Creates the interrupt processor
ENDASM

@ INT_ENABLE RBC_INT ; enable external (INT) interrupts



for i = 0 to 9
GPIO.0 = 1
pause 500
gpio.0 = 0
pause 500
next i
gpio = 0

Goto Mainloop



end

Do_This:
;@ INT_DISABLE RBC_INT
gpio.1 = 1
INTCON.0 = 0
;@ INT_ENABLE RBC_INT
goto mainloop

ScaleRobotics
- 13th January 2010, 06:19
That was nice of you to do that Joe.

I think Darrel may have fixed that in his new version of interrupts. It is v1.00. You can find it at the bottom of this page:
http://darreltaylor.com/DT_INTS-14/intro2.html

It says it has GPC_INT -- GPIO Int On Change , among a bunch of other additions. But I have not played much with the DT-INTS-14 ... yet.

Archangel
- 13th January 2010, 06:56
That was nice of you to do that Joe.

I think Darrel may have fixed that in his new version of interrupts. It is v1.00. You can find it at the bottom of this page:
http://darreltaylor.com/DT_INTS-14/intro2.html

It says it has GPC_INT -- GPIO Int On Change , among a bunch of other additions. But I have not played much with the DT-INTS-14 ... yet.
Thanks, I was still using ver .93, I will download the newer ver now. I am curious to see what I missed in my attempt. I got the defines and the ifdefs but couldn't figure out the flag handler.
EDIT:
Well Darrel's been busy ! Added GPIO and PortA interrupts too and it looks like a whole lot more. <font color=red>Thanks Darrel !,</font color>
So using DT_INTS-14.bas ver 1.0


@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF
DEFINE OSC 4
Include "DT_INTS-14.bas"

CMCON0 = 7 ' comparator pins configured as I/O
ANSEL = 0 ' all I/O as digital
OSCCON = %01100000 ' 96 decimal
GPIO = %00000000
TRISIO = %00001000 ' GPIO Input all others as Outputs
Option_Reg = %01000000 ' Interrupt on rising edge INTEDG bit
IOC = %00001000 ' Enable interrupt on change gpio.3
i var byte
Mainloop:
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler GPC_INT, _Do_This, ASM, no
endm
INT_CREATE ; Creates the interrupt processor
ENDASM

@ INT_ENABLE GPC_INT ; enable external (INT) interrupts



for i = 0 to 9
GPIO.0 = 1
pause 500
gpio.0 = 0
pause 500
next i
gpio = 0

Goto Mainloop



end

Do_This:
gpio.1 = 1

goto mainloop

Do not forget to open DT_INTS and uncomment these 2 lines


wsave VAR BYTE $20 SYSTEM ' location for W if in bank0
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1

retepsnikrep
- 14th January 2010, 03:19
Thanks that looks good.