/* --- STC12C5Axx Series 16-bit Timer0 Demo -------------------------*/ #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; //----------------------------------------------- /* define constants */ #define FOSC 11059200L #define MODE1T //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE1T #define T1MS (65536-FOSC/1000) //1ms timer calculation method in 1T mode #else #define T1MS (65536-FOSC/12/1000) //1ms timer calculation method in 12T mode #endif /* define SFR */ sfr AUXR = 0x8e; //Auxiliary register sbit TEST_LED = P0^0; //work LED, flash once per second /* define variables */ WORD count; //1000 times counter //----------------------------------------------- /* Timer0 interrupt routine */ void tm0_isr() interrupt 1 using 1 { TL0 = T1MS; //reload timer0 low byte TH0 = T1MS >> 8; //reload timer0 high byte if (count-- == 0) //1ms * 1000 -> 1s { count = 1000; //reset counter TEST_LED = ! TEST_LED; //work LED flash } } //----------------------------------------------- /* main program */ void main() { #ifdef MODE1T AUXR = 0x80; //timer0 work in 1T mode #endif TMOD = 0x01; //set timer0 as mode1 (16-bit) TL0 = T1MS; //initial timer0 low byte TH0 = T1MS >> 8; //initial timer0 high byte TR0 = 1; //timer0 start running ET0 = 1; //enable timer0 interrupt EA = 1; //open global interrupt switch count = 0; //initial counter while (1); //loop }