#include <reg51.h>

sbit wave = P1^0;          // Output pin for the square wave

void delay_500us(void)
{
    TH0 = 0xFE;            // Load count for 500 us
    TL0 = 0x33;
    TR0 = 1;               // Start Timer 0
    while (TF0 == 0);      // Poll until the overflow flag is set
    TR0 = 0;               // Stop Timer 0
    TF0 = 0;               // Clear the overflow flag
}

void main(void)
{
    TMOD = 0x01;           // Timer 0, Mode 1 (16-bit timer)

    while (1)
    {
        wave = ~wave;      // Toggle P1.0
        delay_500us();     // Wait half a period
    }
}
