|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
I made this code to ease using interrupts - I spent most of a day reading documentation and testing things, so I figured that I'd share the code.
RobotUtils.h Code:
/* RobotUtils.h *\
|* Interface with the more *|
|* advanced controller features *|
|* Created 2004 by *|
\* Steven Schlansker */
#include "ifi_picdefs.h"
#include "printf_lib.h"
typedef void (*int_func)(void);
typedef enum { falling, rising } edge;
void interrupt_pin1(int_func,edge which);
void interrupt_pin2(int_func,edge which);
void interrupt1();
void interrupt2();
Code:
#include "RobotUtils.h"
#define bitbyte(c) (1 << c)
int_func pin1,pin2;
void interrupt_pin1(int_func func,edge which){
pin1 = func;
if(func){
INTCON |= bitbyte(7);
if(which == rising)
INTCON2 |= bitbyte(4);
else
INTCON2 &= ~bitbyte(4);
INTCON3 &= ~bitbyte(7);
INTCON3 |= bitbyte(4);
}else{
INTCON3 &= ~bitbyte(4);
}
}
void interrupt_pin2(int_func func,edge which){
pin2 = func;
if(func){
INTCON |= bitbyte(7);
if(which == rising)
INTCON2 |= bitbyte(3);
else
INTCON2 &= ~bitbyte(3);
INTCON2 &= ~bitbyte(1);
INTCON3 |= bitbyte(5);
}else{
INTCON3 &= ~bitbyte(5);
}
}
void interrupt1(){ pin1(); }
void interrupt2(){ pin2(); }
Code:
void InterruptHandlerLow ()
{
unsigned char int_byte;
if (INTCON3bits.INT2IF) /* The INT2 pin is RB2/DIG I/O 1. */
{
interrupt1();
INTCON3bits.INT2IF = 0;
}
else if (INTCON3bits.INT3IF) /* The INT3 pin is RB3/DIG I/O 2. */
{
interrupt2();
INTCON3bits.INT3IF = 0;
}
else if (INTCONbits.RBIF) /* DIG I/O 3-6 (RB4, RB5, RB6, or RB7) changed. */
{
int_byte = PORTB; /* You must read or write to PORTB */
INTCONbits.RBIF = 0; /* and clear the interrupt flag */
} /* to clear the interrupt condition. */
}
|
|
#2
|
||||
|
||||
|
Re: Easy interrupt setup
Thanks.
![]() |
|
#3
|
||||
|
||||
|
Re: Easy interrupt setup
Glad you posted this, but could you clairify what exactly RoboUtils.c does? It has a lot of bitshiffting and other bitwise operations which are hard to follow. Maybe a few comments?
![]() |
|
#4
|
|||
|
|||
|
Re: Easy interrupt setup
Yeah, it changes a few registers around, specifically the INTCON registers. For a description of the bits, refer to the Microchip documentation on the PIC. I might write comments eventually if I get a chance...
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Competition IR Beacon - how does its physical setup compare to our beacons? | DanL | Electrical | 2 | 25-01-2004 18:05 |
| Interrupts Questions | mightywombat | Programming | 0 | 03-01-2004 14:50 |
| Looking for an easy website for your team? | Jack | Website Design/Showcase | 2 | 30-12-2003 23:32 |
| Official California Robot Games announcement! | Ken Leung | Off-Season Events | 9 | 01-10-2003 03:37 |
| MnM EASY Question of the Day Winners! | Mike Bonham | General Forum | 22 | 03-05-2002 21:21 |