srikanthind
New Member
could you someone suggest me, why the program not coming back to main from ISR..
the code is
thank you
the code is
Code:
/* pin1 -- pedestrain green (RED is NOT of GREEN)
2--- ped LED
3-- Button
4 --- cars Green (RED is NOT of GREEN)
5 ---- car amber
*/
#define _LEGACY_HEADERS
#include <pic.h>
#define _XTAL_FREQ 4000000
__CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);
#define TRISIO_DEFAULT 0b11101101
#define TRISIO_LED 0b11111011
#define TRISIO_LEDAMB 0B11011011
#define TRISIO_AMBER 0B111011111
#define GPIO_DEFAULT 0b00011001
#define GPIO_LED 0b00000101
#define GPIO_LEDAMB 0b00100101
#define GPIO_PED 0B000000011
#define GPIO_AMBER 0B00101001 // AMBER ON
unsigned char cnt=0, i,j, cnt_delay=1;
// Interrupt service routine
void interrupt Isr(void)
{
if(GPIF)
{
if(GPIO3==0)
{
for (cnt=0; cnt<=5; cnt++) // prevent debouncing
{
__delay_ms(1);
if((GPIO3)==0)
cnt=0;
}
}
for (cnt=0;cnt<15;cnt++) // LED ON
{
TRISIO = TRISIO_DEFAULT;
GPIO= GPIO_DEFAULT ;
__delay_ms(150);
TRISIO= TRISIO_LED;
GPIO=GPIO_LED;
}
for(j=0;j<95;j++) // AMBER LIGHT IS ON WITH DELAY
{
for (cnt =0; cnt<250; cnt++); // 2 seconds delay
{
TRISIO = TRISIO_LEDAMB;
GPIO = GPIO_LEDAMB;
__delay_ms(20);
TRISIO = TRISIO_DEFAULT;
GPIO = GPIO_DEFAULT;
}
}
// task d:
__delay_ms(55);
GPIO &= ~(1<<2); // PED Led indicator OFF,
TRISIO = TRISIO_DEFAULT; // PED GREEN ON.
GPIO= GPIO_PED;
while((GPIO0 == 0) && (cnt_delay!=6)) // VARIABLE DELAY
{
cnt_delay++;
GPIO |= (1<<0);
for(cnt=0; cnt<10;cnt++) // 1 second delay
__delay_ms(100);
}
for(cnt_delay;cnt_delay!=0; cnt_delay--)
{
for(cnt=0; cnt<50;cnt++) // 5 seconds delay
__delay_ms(100);
}
__delay_ms(155);
for(j=0;j<30;j++) // AMBER IS ON, PEDSTRAIN GREEN ON WITH 3 SECONDS DELAY
{
for (cnt =0; cnt<250; cnt++); // 3 seconds delay
{
TRISIO = TRISIO_DEFAULT;
GPIO = GPIO_PED;
__delay_ms(100);
TRISIO= TRISIO_AMBER;
GPIO=GPIO_AMBER;
}
}
__delay_ms(155);
TRISIO=TRISIO_DEFAULT; // GOES BACK TO DEFAULT
GPIO=GPIO_DEFAULT;
}
GPIF=0;
}
void main(void)
{
ANSEL = 0b00000000;
OPTION = 0b10000001; // Configure the time (bit5=0, bit3=0, bits 2-0=100 - prescaler=32); Thus, overflow occurs each 8.192ms
CMCON = 0b00000000;
GPIO=0;
GIE = 1;
T0IE = 1;
GPIE = 1;
IOCB3 = 1;
T0IF = 0;
GPIF = 0;
GPIO |= (1<<3);
TRISIO = TRISIO_DEFAULT; //
GPIO = GPIO_DEFAULT;
while(1){}
}
thank you