This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

please help me to correct the program

I have a written a program for a 4channel IR remote control with keilc for ATMEL89c51.IR sensor(TSOP1738) is coneected with interrupt1 (P3.3) and timer0.I use timer0 as 16 bit counter and timer1 as 16 bit timer.Timer0 counts the no of pulses which comes to it and timer1 is on for .5 second.If the no of pulses in .5 second is between 115 to 125 pin P0.0 becomes on and it becomes off if gets same range of pulse.Now i'm not sure the program is fully correct.Please help me with necessary correction.Where i'll place the infinite loop[while(1)]?
#include<reg51.h>
sbit op1=P0^0;//o/p
sbit op2=P0^1;//o/p
sbit op3=P0^2;//o/p
sbit op4=P0^3;//o/p

int c;

void delay(void)//delay .5 second

{ int d; for(d=0;d<10;d++)
 {
TF1=0;//clear overflow flag
TL1=0xB0;
TH1=0x3C;
TR1=1; //start timer
while(TF1==0)
TR1=0; //stop timer }
}<pre/>

void intr1(void) interrupt 2 //external interrupt1 function
{
 EX1=0; //disable all interrupts
TH0=0x00; //reset counter
TL0=0x00;
TR0=1; //start counter
delay();
TR0=0; //stop counter
c=TL0; //store count
EX1=1; //enable all interrupts
}<pre/>

void main()
{
 TMOD=0x25; //initialize T0 as 16bit counter and T1 as 16bit timer
IE=0x84; //enable external interrupt 1 if((c>=0x73)&&(c<=0x7D))
 {
if(op1==0)
{
op1=1;
 }
else
{
op1=0;
 }
}
else if((c>=0x5F)&&(c<=0x69))
{
if(op2==0)
 {
op2=1;
}
else
{
op2=0;
}
}
else if((c>=0x4B)&&(c<=0x55))
 {
if(op3==0)
{
op3=1;
 }
else
{
 op3=0;
}
}
else if((c>=0x37)&&(c<=0x41))
 {
 if(op4==0)
{
 op4=1;
}
else
{
op4=0;
}
}<pre/>


0