INT0_INTERRUPT_EDGE_DETECTION_TEST_18f4550
Led changes it's state whenever there is rising edge at RB0.
// Int0 Test
//Input at RB0
#define led PORTb.f1
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
char txt1[] = "INT0_RISING_EDGES";
char str[12],lcd[12],i,j;
int cnt;
void main()
{
OSCCON=0xff;
TRISB=0x01;
ADCON1 = 0x0F;
CMCON = 0x07;
INTCON2.INTEDG0=1; //interrupt on rising edge
INTCON.GIE=1;
INTCON.INT0IE=1;
INTCON.INT0IF=0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,txt1);
while(1)
{
{
cnt=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,txt1);
}
IntToStr(cnt,str); // long to string
j=0;
for(i=0;i<=9;i++)
{
if(str[i]!=' ') // remove blanks
{
lcd[j]=str[i];
j=j+1;
}
}
Lcd_Out(2,7,lcd);
}
}
void interrupt()
{
led=~led ;
cnt=cnt+1;
INTCON.INT0IF=0;
}
Comments
Post a Comment