#include rtx51tny.h
#include reg51.h
#define MOTOR 0x01 // Motor connected to P2.0
#define WATER_PUMP 0x02 // Water pump connected to P2.1
#define BUZZER 0x04 // Buzzer connected to P2.2
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);
P2 = 0x00;
os_delete_task (0);
}
// Task 1: Filling Water
void task_water_fill(void) _task_ 1 {
while (1) {
P2 |= WATER_PUMP; // Turn on water pump
delay_ms(5000); // Fill water for 5 seconds (simulate enough water)
P2 &= ~WATER_PUMP; // Turn off water pump
os_send_signal(2); // Signal Task 2 to start washing
os_wait(0x01); // Wait for signal from Task 2
}
}
// Task 2: Washing and Rinsing
void task_washing(void) _task_ 2 {
while (1) {
os_wait(0x01); // Wait for signal from Task 1
// Start washing process
P2 |= MOTOR; // Turn on motor
delay_ms(7000); // Simulate washing for 7 seconds
P2 &= ~MOTOR; // Turn off motor
// Drain old water
delay_ms(3000); // Simulate water draining for 3 seconds
// Rinse process
P2 |= WATER_PUMP; // Turn on water pump to add fresh water
delay_ms(5000); // Fill water for 5 seconds
P2 &= ~WATER_PUMP; // Turn off water pump
// Start rinsing process
P2 |= MOTOR; // Turn on motor
delay_ms(5000); // Simulate rinsing for 5 seconds
P2 &= ~MOTOR; // Turn off motor
// Drain water again
delay_ms(3000); // Simulate water draining for 3 seconds
os_send_signal(3); // Signal Task 3 to start drying
}
}
// Task 3: Drying and Buzzer
void task_drying(void) _task_ 3 {
while (1) {
os_wait(0x01); // Wait for signal from Task 2
// Start drying process
P2 |= MOTOR; // Turn on dryer (reusing motor)
delay_ms(5000); // Simulate drying for 5 seconds
P2 &= ~MOTOR; // Turn off dryer
// End process with buzzer
P2 |= BUZZER; // Turn on buzzer
delay_ms(2000); // Buzzer sound for 2 seconds
P2 &= ~BUZZER; // Turn off buzzer
os_send_signal(1); // Signal Task 1 to repeat the process
}
}