#include rtx51tny.h
#include reg51.h
#define LED_PORT1 P1
#define LED_PORT2 P2
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 120; j++);  // Approximate 1ms delay at 12MHz
    }
}
void job0 (void) _task_ 0  {                   
  os_create_task (1);
  os_create_task (2);
  os_create_task (3);
	os_delete_task (0);
}
void job1 (void) _task_ 1 
{
	 unsigned char i;
    while (1) {
        for (i = 0; i < 10; i++) {
            LED_PORT1 = 0xFF;  // Turn all LEDs on
            delay_ms(100);
            LED_PORT1 = 0x00;  // Turn all LEDs off
            delay_ms(100);
        }
        delay_ms(10);  // Delay 10ms
        os_send_signal(2);  // Signal Task 2
        os_wait(0x01);      // Wait for signal from another task
    }
}
void job2 (void)  _task_ 2
{
	unsigned char i;
    while (1) {
        os_wait(0x01);  // Wait for signal from Task 1
        for (i = 0; i < 20; i++) {
            LED_PORT2 = 0xFF;  // Turn all LEDs on
            delay_ms(100);
            LED_PORT2 = 0x00;  // Turn all LEDs off
            delay_ms(100);
        }
        os_send_signal(3);  // Signal Task 3
    }
}
void job3 (void) _task_ 3
{
	unsigned char message[] = "Hello\r\n";
    unsigned char i;

    SCON = 0x50;  // Configure UART in Mode 1 (8-bit UART)
    TMOD = 0x20;  // Timer 1 in Mode 2
    TH1 = 0xFD;   // Set baud rate to 9600 (11.0592 MHz crystal)
    TR1 = 1;      // Start Timer 1
    while (1) {
        os_wait(0x01);  // Wait for signal from Task 2
        for (i = 0; message[i] != '\0'; i++) {
            SBUF = message[i];  // Send character
            while (!TI);        // Wait for transmission to complete
            TI = 0;             // Clear transmit interrupt flag
        }
        os_send_signal(1);  // Signal Task 1
    }
}