/* Standard Include for 16F877 Chip */
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT
#use delay (clock=20000000)            //Delay for 20 mhz crystal2q

int16 horizontalCounter;
int1 vertCounter;

void pictureTime()
{

   output_low(PIN_D1);
   output_high(PIN_D0);
   delay_us(49);
   #asm
   nop
   #endasm

}

void picturelacetime()
{
   output_high(PIN_B7);
      output_high(PIN_D1);
   output_high(PIN_D0);
   delay_us(24);
      output_low(PIN_B7);
}

void vrtsynctime()
{
    output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //second set of three full (63.5) pulses
//extra 2 us delay at the end to accomadate timing in next set
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
        output_low(PIN_D0);
    delay_us(33);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(4);
//third set of three full (63.5) pulses
//questionable timing at the end of the set.  may need to do a horizontal synch pulse instead
 //    output_low(PIN_D1);
 //   output_high(PIN_D0);
 //   delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
    //output_low(PIN_D1);
    output_low(PIN_D0);
    //delay_us(2);
    //output_low(PIN_D1);

    //delay_us(2);
    //output_low(PIN_D1);
    output_high(PIN_D0);
    delay_us(36);
}

main()
{

horizontalCounter = 0;

   delay_ms(1500);

   while(TRUE)
   {



      if (horizontalCounter <= 241)
         {
            output_low(PIN_D1);
            output_high(PIN_D0);
               output_high(PIN_B7);
            pictureTime();
               output_low(PIN_B7);
            output_low(PIN_D1);
            output_high(PIN_D0);
            output_low(PIN_D1);
            output_low(PIN_D0);
            #asm
            nop
            nop
            nop
            #endasm
            delay_us(2);
            horizontalCounter++;

         }
      else if (horizontalCounter == 242)
         {
          output_low(PIN_D1);
          output_high(PIN_D0);
          picturelacetime();
          output_low(PIN_D1);
            output_low(PIN_D0);
            delay_us(2);
             output_high(PIN_B6);
          vrtsynctime();
           output_low(PIN_B6);
         horizontalCounter=252;

         }

               else if (horizontalCounter <= 506)
         {
            output_low(PIN_D1);
            output_high(PIN_D0);
                 output_high(PIN_B7);
            pictureTime();
               output_low(PIN_B7);
            output_low(PIN_D1);
            output_high(PIN_D0);
            //delay_us(1);
            output_low(PIN_D1);
            output_low(PIN_D0);
            //delay_us(2);
            horizontalCounter++;
         }
           else if (horizontalCounter == 507)
         {
          output_low(PIN_D1);
          output_high(PIN_D0);
     output_high(PIN_B7);
            pictureTime();
               output_low(PIN_B7);
             output_low(PIN_D1);
            output_low(PIN_D0);
          output_high(PIN_B6);
          vrtsynctime();
           output_low(PIN_B6);
         horizontalCounter=516;

         }
                        else if (horizontalCounter <= 524)
         {
            output_low(PIN_D1);
            output_high(PIN_D0);
     output_high(PIN_B7);
            pictureTime();
               output_low(PIN_B7);
            output_low(PIN_D1);
            output_high(PIN_D0);
            //delay_us(1);
            output_low(PIN_D1);
            output_low(PIN_D0);
            //delay_us(2);
            horizontalCounter++;
         }
           else if (horizontalCounter == 525)
         {
            output_low(PIN_D1);
            output_high(PIN_D0);
            pictureTime();
            output_low(PIN_D1);
            output_high(PIN_D0);
            //delay_us(1);
            output_low(PIN_D1);
            output_low(PIN_D0);
            //delay_us(2);
            horizontalCounter=0;
         }

   }

}

