View previous topic :: View next topic |
Author |
Message |
thb Guest
|
INT_RAx with PIC 12F629 Problem |
Posted: Thu Jan 05, 2006 4:44 pm |
|
|
Hi,
I've got a problem on writing some simple code for the PIC 12F629. The 12F629.h file contains this:
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
// 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
<b>#define INT_RB 0x0B08</b>
#define INT_EXT 0x0B10
#define INT_TIMER1 0x8C01
#define INT_TIMER0 0x0B20
#define INT_EEPROM 0x8C80
#define INT_COMP 0x8C08
<b>#define INT_RA0 0x010B08
#define INT_RA1 0x020B08
#define INT_RA2 0x040B08
#define INT_RA3 0x080B08
#define INT_RA4 0x100B08
#define INT_RA5 0x200B08</b>
Why is there a INT_RB? The 12F629 just has this GP-Port which seems to correspond to Port A in the CCS. At least I can switch the outputs by output_low(PIN_A3) for example.
But how can I use interrupts on let's say GP3 (or A3)?
<i>enable_interrupts(INT_RA3); </i>does not cause a problem but with
<i>#INT_RA3
void RB_isr(){
output_low(PIN_A0);
}</i>
the compiler complains about the #INT_RA3 ("Invalid Pre-Processor directive").
Can anyone help me? Thanks a lot!!!
Thomas |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Jan 05, 2006 6:49 pm |
|
|
Quote: | #define INT_RB 0x0B08
Why is there a INT_RB? |
In the current version of the compiler (PCM 3.241), it has been
changed to INT_RA. |
|
|
thb Guest
|
but how to use the INT_RA3? |
Posted: Thu Jan 05, 2006 10:09 pm |
|
|
Hi, thanks so far,
but how can I use an interrupt with the GP3? Which interrupts do I have to enable and which #-statement do I have to write to introduce my interrupt routine?
Or doesn't it work at all with my compiler version 3.15?
Thank you,
Thomas |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Jan 05, 2006 10:48 pm |
|
|
Quote: | but how can I use an interrupt with the GP3? Which interrupts do I have to enable and which #-statement do I have to write to introduce my interrupt routine?
Or doesn't it work at all with my compiler version 3.15? |
You didn't give your exact version number, so I couldn't check to
see if the following code works with your version. I did look at the
.LST file for vs. 3.241, and it looks OK.
Code: |
#byte Port_A = 0x05
#INT_RA
void int_ra_isr(void)
{
char c;
// Put code to hand the interrupt here.
c = Port_A; // Read port to clear "change" condition
}
//===========================
void main()
{
enable_interrupts(INT_RA3);
enable_interrupts(GLOBAL);
while(1);
}
|
|
|
|
Ttelmah Guest
|
|
Posted: Fri Jan 06, 2006 5:00 am |
|
|
Just as an 'explanation', the 'GP' port on these chips, sits at the address occupied by port B, on the larger chips. Hence in some othe code, the 'port B' nomenclature was used. As PCM Programmer has posted, this has been updated on latter compiler releases.
Best Wishes |
|
|
thb Guest
|
It works! |
Posted: Fri Jan 06, 2006 8:09 am |
|
|
Hello,
thanks a lot for your help PCM programmer and Ttelmah, now it works. It's a bit confusing, in my version I have to use
enable_interrupts(INT_RA3); and #INT_RB.
Greetings,
Thomas |
|
|
Ttelmah Guest
|
|
Posted: Fri Jan 06, 2006 8:14 am |
|
|
That is typically 'brilliant'. It almost matches some of MicroSoft's labelling genius!... :-)
I find myself trying to visualise driving a car with controls as logical as this.
Glad you found the combination that works.
Potentially, just to make things 'clearer', you should be able to do something like:
#define INT_RA INT_RB
and then use INT_RA.
Best Wishes |
|
|
|