Đã làm để bơm bể lọc nước (bơm liên tục thì bị tràn nên lại nghỉ chút xíu, rồi lại bơm tiếp). Hiên tại là 20 phút on, 20 phút off. Bạn có thể thay đổi tùy ý. Viết cho chip 89C2051
Chúc thành công!
Code:
/* Tu dong on/off theo chu ky thoi gian thuc 11.059MHz */ #include <at89x51.h> sbit device = P1^1; sbit LEDblink = P3^7; unsigned char sec100,sec,sec5,min,flag1,temp; //char cputick; bit status; void blink() { if((flag1 & 0x04) != 0) /* check bit 2 if set decrement temp until zero */ { temp--; if (temp != 0) LEDblink=0; else( flag1 &= ~0x04); } else LEDblink=1; } void time () { sec100++; if (sec100 >= 100) /* 100 * 10 ms = 1 s */ { sec100 = 0; sec++; flag1 |= 0x04; /* set bit 0, bit 2 */ temp = 20; if (sec >= 60) { sec = 0; min++; if(status) { if (min >= 20)// time to stop { min = 0; status=0; device=~status; } } else { if (min >= 20)// time to start { min = 0; status=1; device=~status; } } } } } void timer0int (void) interrupt 1 using 1 { TH0 |= 0xdc; // reload timer 0 with 0DC00H time(); // update realtime clock blink(); } void main() { EA = 1; ET0 = 1; // or IE |= 0x82; /* set bit EA and Timer0 enable */ TMOD |= 0x01; /* timer 0 run 16 bit counter */ TR0 = 1; //or TCON |= 0x10; /* run timer 0 */ min = 0; sec = 0; flag1 = 0; status = 1; device=0; while(1); }
Comment