
#include <reg51.h>
#include <generic.h>

sbit GREEN = P3^6;
sbit YELLOW = P3^7;
sbit output_ = P1^2;
bit START = 0;
bit STOP = 1; 
/*=============================================================================
SET FREQUENCY : 50Hz

Each half of the AC cycle lasts 0.01 sec. and the timer counts 0000h to FFFFh in this time.
We will control this time and switch on and off pin 1.0 that is the output.
We will take the ext int 0 negetive edgs as the start point.
/*=============================================================================*/
unsigned char set_point_L = 0x00,set_point_H = 0x00;
/*=============================================================================*/
/*=============================================================================*/
void ex0_isr (void) interrupt 0
{
output_ = STOP;			//stop trigger
TR0 = 0;			//Stop timmer
TL0 = 0x00;			//Loading the initial value, lower Byte - thus reseting timmer
TH0 = 0x00;			//Loading the initial value, Higher Byte - thus reseting timmer
TR0 = 1;			//start timmer
}
/*=============================================================================*/
void timer0_ISR (void) interrupt 2
{
if(set_point_L == TL0 && set_point_H == TH0)
	output_ = START;				//start trigger
}
/*=============================================================================*/
void initialize_global_interupt(void)
{
IE = 0x9B;							//10011011 global enable, ext int 0 ,timer int 0 and timmer int 1 (for baud rate) enabled
}
/*=============================================================================*/
void initialize_timer_0(void)
{
TR0 = 0;
TMOD = 0x21;  			//00100001Set Mode(16-bit timer with reload)
TL0 = 0x00;			//Loading the initial value, lower Byte
TH0 = 0x00;			//Loading the initial value, Higher Byte
TR0 = 1;			//Starting the timmer internally so that it can be accessed externally
}
/*=============================================================================*/
void initialize_external_int_0(void)
{
IT0 = 1;						//making the external interupt edge trigerred
}
/*=============================================================================*/
void main (void)
{
initialize_timer_0();
initialize_external_int_0();
initialize_global_interupt();
while(1)
  {
	set_point_L = 0x00;
	set_point_H = 0x24;
	sec_wait(1);
	
	set_point_L = 0x28;
	set_point_H = 0x23;
	sec_wait(1);

	set_point_L = 0x58;
	set_point_H = 0x1B;
	sec_wait(1);

	set_point_L = 0x88;
	set_point_H = 0x13;
	sec_wait(1);

	set_point_L = 0xB8;
	set_point_H = 0x0B;
	sec_wait(1);

	set_point_L = 0xE8;
	set_point_H = 0x03;
	sec_wait(1);

	set_point_L = 0xF4;
	set_point_H = 0x01;
	sec_wait(1);


	set_point_L = 0x64;
	set_point_H = 0x00;
	sec_wait(1);

	set_point_L = 0xF4;
	set_point_H = 0x01;
	sec_wait(1);

	set_point_L = 0xE8;
	set_point_H = 0x03;
	sec_wait(1);

	set_point_L = 0xB8;
	set_point_H = 0x0B;
	sec_wait(1);

	set_point_L = 0x88;
	set_point_H = 0x13;
	sec_wait(1);

	set_point_L = 0x58;
	set_point_H = 0x1B;
	sec_wait(1);

	set_point_L = 0x28;
	set_point_H = 0x23;
	sec_wait(1);

	set_point_L = 0x00;
	set_point_H = 0x24;
	sec_wait(1);
  }
}
/*====================================*/
