Ladies and Gents,
Before the site was compromised there was a thread about using a 12F683 and getting ON INTERRUPT to work that was started by tracecom. At least I think that's who it was. Henrick commented often along with others. I'm trying to somewhat recreate that thread in an effort to learn something useful. If I screwed up who did what I apologize. If I left you out, again apologies, please chime in and hopefully this thread won't get lost.
Even incorporating all those suggestions for setting WDT and empty or populated main loops, I couldn't get the darned thing to work in Proteus. It's a simple circuit with an LED in series with a resistor connected to pin 7, GPIO.0, with the other end tied to ground and MCLR tied to +V thru a 10k resistor on pin 4, GPIO.3, and that's it.
My intent with this thread to learn/understand how to use ON INTERRUPT. However, using the code presented previously I could never get the LED to flash during the ISR. Henrik foresightedly put blink pattern during PIC start that enabled you to see the PIC started but the ISR didn't work. Proteus informed you when the processor was reset by the WDT if the WDT was ON.
The code I came up with worked only after I set Bit 6 on T1CON to enable the Timer1 Gate Enable bit.
Maybe I'm doing something wrong or missed the point and if so I'd like to know it, preferrably presented in an easy to understand method, as I can use this stuff in a future project. Is this the proper way to use ON INTERRUPT is the ultimate question.Code:define OSC 8 ' just cause osccon = %01110110 ansel = 0 ' all ports digital cmcon0 = 7 ' comparators off T1CON = %00001001 ' for me this was the real problem -- Bit 6 to be exact ' code I copied had TMR1 ON but gate enable was OFF ' setting Bit 6 to 1 stops ISR INTCON = %11000000 ' Enable GIE and PIE PIE1 = %00000001 ' TMR1 Overflow Enable bit enabled ' thanks for whomever pointed out the info files as the ' following is copied straight from them #CONFIG __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_ON & _CP_OFF #ENDCONFIG i var byte on interrupt goto SLOOP for i = 0 to 10 'flash rapily with different on off high gpio.0 ' so I was sure it was doing this not ISR pause 200 low gpio.0 pause 100 ' toggle gpio.0 ' this is the way tracecom and Henrik did it ' pause 100 next main: 'mainloop with or without something in it pause 1 ' WDT ON w/empty main loop causes resets ' WDT OFF w/empty or w/populated mainloop works GOTO MAIN ' do it forever disable ' manual shows it here but if in ISR it still worked SLOOP: 'isr toggle gpio.0 PIR1.0 = 0 resume ' resume must be before enable enable end
Another topic during the thread was the location of DISABLE, ENABLE and RESUME. I found DISABLE could be moved around some but RESUME/ENABLE have to be in a specific order. I think I commented it in the code shown.
If I haven't before now I'm going to show my ignorance. How do you know how often an interrupt occurs? I've looked through the data sheet but I've yet to find the answer. I know someone will say RTFDS or some such but I didn't see it.
I realize this thread is bringing much info together and again I hope I got it correct. Thnaks for your time and patience.





Bookmarks