|
发表于 2011-1-5 17:00:32
|
显示全部楼层
我也写了个GPRS程序,把定时器那部分贴上来,看看对你有没有什么帮助(用在51片子上面的,友情提示:GPRS在通讯过程中如拨打电话,如果干扰没有处理好,会对51的定时器一定的影响,迅速进入定时器中断)
#define T_Index_UT1_Timer 0
#define T_Index_UT2_Timer 1
#define T_Index_Motor_Timer 2
#define T_Index_GPRS_Timer 3
#define T_Index_Led1_Timer 4
#define T_Index_Led2_Timer 5
#define T_Index_DTMF_Timer 6
#define T_Index_Alarm_Timer 7
#define T_Index_Alarm_Switch_Timer 8
#define T_Index_Alarm_Run_Timer 9
#define T_Index_Light_Catch_Timer 10
#define T_Index_Reg_Timer 11
#define T_Const_UT1 10
#define T_Const_UT2 10
#define T_Const_Motor 100
#define T_Const_GPRS 100
#define T_Const_Led1 50
#define T_Const_Led2 100
#define T_Const_DTMF 1000
#define T_Const_Alarm 20
#define T_Const_Alarm_Switch 6000
#define T_Const_Alarm_Run 3000
#define T_Const_Light_Catch 100
#define T_Const_Reg 35
typedef struct
{
unsigned int Time_Const;
unsigned int Time_Counter;
unsigned char Time_Enable;
unsigned char Time_Out;
}st_Time_Que;
xdata st_Time_Que Timer_Que[] =
{
{T_Const_UT1,0,0,0},{T_Const_UT2,0,0,0},{T_Const_Motor,0,0,0},
{T_Const_GPRS,0,0,0},{T_Const_Led1,0,0,0},{T_Const_Led2,0,0,0},
{T_Const_DTMF,0,0,0},{T_Const_Alarm,0,0,0},{T_Const_Alarm_Switch,0,0,0},
{T_Const_Alarm_Run,0,0,0},{T_Const_Light_Catch,0,0,0},{T_Const_Reg,0,0,0}
};
unsigned char Timer_Mark;
void time1_interrupt(void) interrupt 3
{
TH1 = timer_10ms_h;
TL1 = timer_10ms_l;
Timer_Mark++;
}
void Time_Que_Do(void)
{
unsigned char i,j;
if(Timer_Mark)
{
Timer_Mark = Null;
}else
{
return;
}
i = sizeof(Timer_Que)/sizeof(st_Time_Que);
for(j=0;j<i;j++)
{
if(Timer_Que[j].Time_Enable)
{
if(!(Timer_Que[j].Time_Counter--))
{
Timer_Que[j].Time_Counter = Timer_Que[j].Time_Const;
Timer_Que[j].Time_Out = True;
}
}
}
//添加定时器函数
} |
|