#include #include "task_hal.h" #include "main.h" #define T1VALUE (0X10000UL-FOSC/12UL/TICKPER1S) sbit LED_R = P1^0; sbit LED_G = P2^7; sbit LED_B = P2^6; sbit LED_C = P2^5; sbit LED_W = P2^4; void InitT0(void) { TIM0_DeInit(); TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER ); //Timer0 12分频,做定时器 TIM0_WorkMode1Config(T1VALUE); //设置Timer0工作模式0,初值为7192,定时1ms TIM0_ITConfig(ENABLE, LOW); //使能Timer0中断 TIM0_Cmd(ENABLE); //使能Timer0计数 } #if TASK_WITH_PT PT_THREAD(TaskWDT(struct pt *pt1 )) #else PT_THREAD(TaskWDT(void)) #endif { WDT_SetReload(); UNUSED(pt1); return 0; } void InitWdt(void) { WDT_DeInit(); OPTION_WDT_Cmd(ENABLE); WDT_Init(WDT_OverflowTime_500MS); } void InitPort(void) { GPIO_DeInit(); GPIO_Init(GPIOR,LEDR,GPIO_MODE_OUT_PP); GPIO_Init(GPIOG,LEDG,GPIO_MODE_OUT_PP); GPIO_Init(GPIOB,LEDB,GPIO_MODE_OUT_PP); GPIO_Init(GPIOC,LEDC,GPIO_MODE_OUT_PP); GPIO_Init(GPIOW,LEDW,GPIO_MODE_OUT_PP); } void T0_Handler(void) interrupt INT_T0 { uint16_t value = T1VALUE+TL0; TF0 = 0; TL0 = value&0xFF; TH0 = (value >> 8); Task_SysTick_Handler(); } void idle(void) { PCON |= 0x01; //8 nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } //under voltage Reset Count unsigned char xdata UV_RESET_CNT _at_ 0x02F0; xdata int8_t timerID = -1; xdata int8_t param = -1; void InitTask(void) { StopAllTimer(); InitT0(); enableInterrupts(); } void Init(void) { InitTask(); InitPort(); InitKey(); InitLT89xxRF(); InitWdt(); InitPWM(); ResetTimer(); waitForInitOrUnInit(); } int InitTimerStack(void) { unsigned long now = get_system_ms() ; if(now==0) { TaskLT89xx_thread_entry(NULL); #if TASK_WITH_PT #else #endif } return 0; } // int InitTaskStack(void) { //把所有任务放一起,然Overlay扫描一下,好分配变量地址,免得被错误覆盖 unsigned long now = get_system_ms() ; if(now==0) { #if TASK_WITH_PT struct pt pt1; TaskTimer(&pt1); TaskBlinLed(&pt1); TaskWDT(&pt1); TaskScanKey(&pt1); #else TaskTimer(); TaskBlinLed(); TaskWDT(); TaskScanKey(); #endif } return 0; }