void main() while(1) P1_0 = 0; // LED ON (assuming common cathode) delay_ms(500); P1_0 = 1; // LED OFF delay_ms(500);
Timer interrupts, random number generation, button debouncing. Project 4: Frequency Counter (0-50 kHz) Difficulty: Advanced Components: External TTL signal source, LCD 16x2 (optional via 4-bit mode) at89c2051 projects
Since the AT89C2051 lacks hardware PWM, we generate it using Timer0 interrupt. unsigned int duty = 1500; // 1.5ms center void timer0_isr() interrupt 1 static bit state = 0; if(state == 0) P1_0 = 1; TH0 = 0xFC; // 1ms? Actually calculate for 1.5ms TL0 = 0x18; state = 1; else P1_0 = 0; TH0 = 0xFE; // 20ms - duty TL0 = 0x??; state = 0; void main() while(1) P1_0 = 0; // LED
void send_string(char *s) while(*s) SBUF = *s++; while(!TI); TI = 0; Actually calculate for 1
while(1) if(button_pressed()) display_dice((random % 6) + 1); delay_ms(200);