View previous topic :: View next topic |
Author |
Message |
aruna1
Joined: 14 Oct 2008 Posts: 103
|
12F675 invalid preprocessor directive with INT_RA4 |
Posted: Sat Aug 08, 2009 9:56 pm |
|
|
Hello guys, according to 12F675.h file there is a interrupt INT_RA4.
I tried to setup this interrupt but it gives me "invalid preprocesor
directive". What is the wrong? Here is my code part:
Code: |
#INT_RA4
void int_on_change_A4 (void)
{
if(A4_int_mode==1)
{
led('r',2,50);
}
} |
and used as
Code: | enable_interrupts (INT_EXT);
enable_interrupts(INT_RA4);// today
disable_interrupts (INT_TIMER1);
disable_interrupts (INT_TIMER0);
enable_interrupts (GLOBAL);
// TODO: USER CODE!!
WHILE (1)
{
chk_ir ();
if (first_INT_done == 1)
{
first_INT_done = 0;
set_timer ();
}
}
} |
and here is 12F675.h
Code: |
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
// CLEAR_INTERRUPT(), INTERRUPT_ACTIVE(),
// EXT_INT_EDGE()
//
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H 0x40
#define H_TO_L 0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL 0x0BC0
#define INT_RTCC 0x0B20
#define INT_EXT 0x0B10
#define INT_AD 0x8C40
#define INT_TIMER1 0x8C01
#define INT_TIMER0 0x0B20
#define INT_EEPROM 0x8C80
#define INT_COMP 0x8C08
#define INT_RA 0xFF0B08
#define INT_RA0 0x010B08
#define INT_RA1 0x020B08
#define INT_RA2 0x040B08
#define INT_RA3 0x080B08
#define INT_RA4 0x100B08
#define INT_RA5 0x200B08
#list |
thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Aug 08, 2009 10:37 pm |
|
|
Always post your compiler version. We don't remember it from previous
threads. |
|
|
aruna1
Joined: 14 Oct 2008 Posts: 103
|
|
Posted: Sat Aug 08, 2009 11:11 pm |
|
|
version is 4.084 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Aug 08, 2009 11:52 pm |
|
|
Here is the explanation:
There is only one "interrupt on change" interrupt. It's called #INT_RA.
But, each pin (GP0-GP5) can be individually enabled for the interrupt-on-
change feature. So the interrupt routine itself will always only have
#INT_RA above it. But in your code, for the enable_interrupts() and
disable_interrupts() functions, you should use INT_RA0 to INT_RA5 as
the parameter. See the example below:
Code: |
#include <12F675.h>
#fuses INTRC_IO, NOWDT, NOMCLR, PUT, BROWNOUT
#use delay(clock=4000000)
#int_ra
void int_ra_isr(void)
{
int8 temp;
temp = input(PIN_A4); // Read pin to clear mismatch condition
}
//======================
void main()
{
// There is only one "INT_RA" interrupt. Clear it.
clear_interrupt(INT_RA);
// Enable interrupt-on-change for pin A4 only.
enable_interrupts(INT_RA4);
enable_interrupts(GLOBAL);
while(1);
} |
|
|
|
aruna1
Joined: 14 Oct 2008 Posts: 103
|
|
Posted: Sun Aug 09, 2009 1:21 am |
|
|
So interrupt code will only run for changes in A4? and it will not run even other pins are changing?
Thanks
edit:
i just checked its working
thanks PCM |
|
|
|