把GPRS程序移植到51上,以前有RTT系统,可以直接delay,现在没了系统,只能在主循环里写
void GPRSStrart(void){
GPIO_SetBits(GPRS_PWR_GPIO,GPRS_PWR_PIN);
rt_thread_delay(RT_TICK_PER_SECOND);
GPIO_ResetBits(GPRS_PWR_GPIO,GPRS_PWR_PIN);
} 推荐看一下CONTIKI这个操作系统,类状态机的。其实uip里面实现了一个定时器接口函数 1.用定时器调度任务
2.或者delay用定时器实现
3.以上2者一起实现 定时器 或者你可以使用keil带的 给51的一个实时内核,比较小,简单易用 像2楼说的一样 设置标志位 定时器里面计时 置标志位 我也写了个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.Time_Enable)
{
if(!(Timer_Que.Time_Counter--))
{
Timer_Que.Time_Counter = Timer_Que.Time_Const;
Timer_Que.Time_Out = True;
}
}
}
//添加定时器函数
} MARK
页:
[1]