|
|
View previous topic :: View next topic |
Author |
Message |
Ned Israelsen Guest
|
No external interrupt with PIC12F675?? |
Posted: Fri Jan 24, 2003 12:52 am |
|
|
I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s. The interrupt flag never gets set. Example code (trying to trigger by pulling GP2 low):
////////////////////////////////////////////////////////
//trying to make the INT external interrupt on GP2 work
//to switch state of a couple of LEDs on GP4,5
////////////////////////////////////////////////////////
#include <12f675.h>
#fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
#use delay(clock=4000000)
//define IO pins
#bit gpio5 =0x05.5
#bit gpio4 =0x05.4
#bit gpio3 =0x05.3
#bit gpio2 =0x05.2
#bit gpio1 =0x05.1
#bit gpio0 =0x05.0
#use fast_io(a)
#byte OSCCAL = 0x90
#rom 0x3ff = {0x3470} /// input the calibration code
#int_ext
void external_handler(void)
{
gpio5=!gpio5; //instantly flip LEDs on external interrupt
gpio4=!gpio4;
delay_ms(100);
}
#int_default
void default_isr(void)
{}
main()
{
//setup i/o
set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
gpio5=1; gpio4=0; gpio1=0; gpio0=0; //turn on LED on gp5
//set timer0 not to use GP2
setup_counters(rtcc_internal, rtcc_div_2);
//setup interrupts
enable_interrupts(int_ext);
ext_int_edge(h_to_l); //GP2 is pulled high with resistor
enable_interrupts(global);
//loop and wait for interrupt
while(true)
{
delay_ms(2500);
gpio5=!gpio5; //toggle LEDs just to show program is running
gpio4=!gpio4;
}
}
___________________________
This message was ported from CCS's old forum
Original Post ID: 10958 |
|
|
Tomi Guest
|
Re: No external interrupt with PIC12F675?? |
Posted: Fri Jan 24, 2003 1:53 am |
|
|
<font face="Courier New" size=-1>Remove your delay_ call from the ISR. ITs are disabled under execution of delay_ms() call in main() (so practically always is disabled).
:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s. The interrupt flag never gets set. Example code (trying to trigger by pulling GP2 low):
:=
:=////////////////////////////////////////////////////////
:=//trying to make the INT external interrupt on GP2 work
:=//to switch state of a couple of LEDs on GP4,5
:=////////////////////////////////////////////////////////
:=#include <12f675.h>
:=#fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
:=#use delay(clock=4000000)
:=//define IO pins
:=#bit gpio5 =0x05.5
:=#bit gpio4 =0x05.4
:=#bit gpio3 =0x05.3
:=#bit gpio2 =0x05.2
:=#bit gpio1 =0x05.1
:=#bit gpio0 =0x05.0
:=#use fast_io(a)
:=
:=#byte OSCCAL = 0x90
:=#rom 0x3ff = {0x3470} /// input the calibration code
:=#int_ext
:=void external_handler(void)
:={
:=gpio5=!gpio5; //instantly flip LEDs on external interrupt
:=gpio4=!gpio4;
:=delay_ms(100);
:=}
:=
:=#int_default
:=void default_isr(void)
:={}
:=
:=main()
:={
:=//setup i/o
:=set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
:=gpio5=1; gpio4=0; gpio1=0; gpio0=0; //turn on LED on gp5
:=
:=//set timer0 not to use GP2
:=setup_counters(rtcc_internal, rtcc_div_2);
:=
:=//setup interrupts
:=enable_interrupts(int_ext);
:=ext_int_edge(h_to_l); //GP2 is pulled high with resistor
:=enable_interrupts(global);
:=
:=//loop and wait for interrupt
:=while(true)
:={
:=delay_ms(2500);
:=gpio5=!gpio5; //toggle LEDs just to show program is running
:=gpio4=!gpio4;
:=}
:=}
:=</font>
___________________________
This message was ported from CCS's old forum
Original Post ID: 10959 |
|
|
Ned Israelsen Guest
|
Re: No external interrupt with PIC12F675?? |
Posted: Fri Jan 24, 2003 10:22 am |
|
|
I have removed the delay_ms call and bit flip from main() and the delay call from the isr. So, most of the time the program should be sitting in the while(true) loop doing nothing. Also tried different 12F675s. Still no interrupt. (Code works fine with properly-set-up RB port change interrupt on GP3.)
:=<font face="Courier New" size=-1>Remove your delay_ call from the ISR. ITs are disabled under execution of delay_ms() call in main() (so practically always is disabled).
:=
:=:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s. The interrupt flag never gets set. Example code (trying to trigger by pulling GP2 low):
:=:=
:=:=////////////////////////////////////////////////////////
:=:=//trying to make the INT external interrupt on GP2 work
:=:=//to switch state of a couple of LEDs on GP4,5
:=:=////////////////////////////////////////////////////////
:=:=#include <12f675.h>
:=:=#fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
:=:=#use delay(clock=4000000)
:=:=//define IO pins
:=:=#bit gpio5 =0x05.5
:=:=#bit gpio4 =0x05.4
:=:=#bit gpio3 =0x05.3
:=:=#bit gpio2 =0x05.2
:=:=#bit gpio1 =0x05.1
:=:=#bit gpio0 =0x05.0
:=:=#use fast_io(a)
:=:=
:=:=#byte OSCCAL = 0x90
:=:=#rom 0x3ff = {0x3470} /// input the calibration code
:=:=#int_ext
:=:=void external_handler(void)
:=:={
:=:=gpio5=!gpio5; //instantly flip LEDs on external interrupt
:=:=gpio4=!gpio4;
:=:=delay_ms(100);
:=:=}
:=:=
:=:=#int_default
:=:=void default_isr(void)
:=:={}
:=:=
:=:=main()
:=:={
:=:=//setup i/o
:=:=set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
:=:=gpio5=1; gpio4=0; gpio1=0; gpio0=0; //turn on LED on gp5
:=:=
:=:=//set timer0 not to use GP2
:=:=setup_counters(rtcc_internal, rtcc_div_2);
:=:=
:=:=//setup interrupts
:=:=enable_interrupts(int_ext);
:=:=ext_int_edge(h_to_l); //GP2 is pulled high with resistor
:=:=enable_interrupts(global);
:=:=
:=:=//loop and wait for interrupt
:=:=while(true)
:=:={
:=:=delay_ms(2500);
:=:=gpio5=!gpio5; //toggle LEDs just to show program is running
:=:=gpio4=!gpio4;
:=:=}
:=:=}
:=:=</font>
___________________________
This message was ported from CCS's old forum
Original Post ID: 10969 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: No external interrupt with PIC12F675?? |
Posted: Fri Jan 24, 2003 1:00 pm |
|
|
:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s. The interrupt flag never gets set.
------------------------------------------------------
I think the start-up code inserted by the compiler
may not be correct. Try doing the following:
Insert these lines above main():
#byte ADCON0 = 0x1F
#byte ANSEL = 0x9F
#byte CMCON = 0x19
Insert these lines at the very beginning of main():
ADCON0 = 0; // ADC off
ANSEL = 0; // GPIO pins 0,1,2 and 4 set to all digital
CMCON = 7; // Comparators off
See if that helps.
___________________________
This message was ported from CCS's old forum
Original Post ID: 10971 |
|
|
Ned Israelsen Guest
|
Re: No external interrupt with PIC12F675?? |
Posted: Fri Jan 24, 2003 8:31 pm |
|
|
:=:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s. The interrupt flag never gets set.
:=------------------------------------------------------
:=I think the start-up code inserted by the compiler
:=may not be correct. Try doing the following:
:=
:=Insert these lines above main():
:=
:=#byte ADCON0 = 0x1F
:=#byte ANSEL = 0x9F
:=#byte CMCON = 0x19
:=
:=
:=Insert these lines at the very beginning of main():
:=
:=ADCON0 = 0; // ADC off
:=ANSEL = 0; // GPIO pins 0,1,2 and 4 set to all digital
:=CMCON = 7; // Comparators off
:=
:=See if that helps.
Yep. That fixed it! Thanks much!!
___________________________
This message was ported from CCS's old forum
Original Post ID: 10986 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|