/* --- STC12C5Axx Series 16-bit Timer 1 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 tm1_isr() interrupt 3 using 1 { TL1 = T1MS; //reload timer1 low byte TH1 = T1MS >> 8; //reload timer1 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 = 0x40; //timer1 work in 1T mode #endif TMOD = 0x10; //set timer1 as mode1 (16-bit) TL1 = T1MS; //initial timer1 low byte TH1 = T1MS >> 8; //initial timer1 high byte TR1 = 1; //timer1 start running ET1 = 1; //enable timer1 interrupt EA = 1; //open global interrupt switch count = 0; //initial counter while (1); //loop }