#include <reg51.h>

sbit wave = P1^0;              // Output pin

void half_400Hz(void)          // 1.25 ms delay
{
    TH0 = 0xFB;
    TL0 = 0x80;
    TR0 = 1;                   // Start Timer 0
    while (TF0 == 0);          // Poll overflow flag
    TR0 = 0;                   // Stop timer
    TF0 = 0;                   // Clear flag
}

void half_900Hz(void)          // 555.6 us delay
{
    TH0 = 0xFE;
    TL0 = 0x00;
    TR0 = 1;
    while (TF0 == 0);
    TR0 = 0;
    TF0 = 0;
}

void main(void)
{
    unsigned char i;

    TMOD = 0x01;               // Timer 0, Mode 1 (16-bit)
    wave = 0;                  // Start LOW

    while (1)
    {
        for (i = 0; i < 4; i++)    // 2 cycles of 400 Hz
        {
            wave = ~wave;
            half_400Hz();
        }

        for (i = 0; i < 4; i++)    // 2 cycles of 900 Hz
        {
            wave = ~wave;
            half_900Hz();
        }
    }
}
