下面贴个详细点的片段- /* Public constants ----------------------------------------------------------------------------------------------------------*/
- #define SYSTEM_OSC_FREQUENCY 11059200UL
- // System time-base(Weak real-time tasks) in ms
- #define SYSTEM_TIME_BASE 5
-
- /* Public macro --------------------------------------------------------------------------------------------------------------*/
- #if ((65536UL - (SYSTEM_OSC_FREQUENCY * SYSTEM_TIME_BASE / 1000UL) / 12UL) & 0x00FF)
- #define _INTEGER_OSC_FREQUENCY
- #endif
- #define TIMER_PERLOAD_HIGH ((UINT8)(((UINT16)(65536UL - (SYSTEM_OSC_FREQUENCY * SYSTEM_TIME_BASE / 1000UL) / 12UL)) >> 8))
- #define TIMER_PERLOAD_LOW ((UINT8)(((UINT16)(65536UL - (SYSTEM_OSC_FREQUENCY * SYSTEM_TIME_BASE / 1000UL) / 12UL))))
- /*******************************************************************************************************************************
- * Function Name : SysTimer_Init
- * Description : Initialize the system time(T0 work in Mode 1 and 16-bit)
- * Parameter :
- * Return :
- * Notes :
- *******************************************************************************************************************************/
- void SysTimer_Init(void)
- {
- TMOD |= 0x01;
- TH0 = TIMER_PERLOAD_HIGH;
- #ifdef _INTEGER_OSC_FREQUENCY
- TL0 = TIMER_PERLOAD_LOW;
- #else
- TL0 = 0x00;
- #endif
- ET0 = 1;
- TR0 = 1;
- }
- /*******************************************************************************************************************************
- * Function Name : Timer0_ISR
- * Description : Timer 0 Interrupt service routine
- * Parameter :
- * Return :
- * Notes :
- *******************************************************************************************************************************/
- void Timer0_ISR(void) interrupt 1
- {
- #ifdef _INTEGER_OSC_FREQUENCY
- TL0 = TIMER_PERLOAD_LOW;
- #endif
- TH0 = TIMER_PERLOAD_HIGH;
- l_SysTimer_TimeBaseTriggered = 1;
- }
|