billtian 发表于 2010-12-20 16:51:44

把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);
}

258963519 发表于 2010-12-20 19:06:14

推荐看一下CONTIKI这个操作系统,类状态机的。其实uip里面实现了一个定时器接口函数

wolfe 发表于 2010-12-20 22:10:25

1.用定时器调度任务
2.或者delay用定时器实现
3.以上2者一起实现

zqy517 发表于 2010-12-20 23:04:23

定时器

nibia 发表于 2010-12-21 14:30:24

或者你可以使用keil带的 给51的一个实时内核,比较小,简单易用

ssuesue 发表于 2011-1-5 15:36:14

像2楼说的一样 设置标志位 定时器里面计时 置标志位

boliu218 发表于 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.Time_Enable)
                {
                        if(!(Timer_Que.Time_Counter--))
                        {
                                Timer_Que.Time_Counter = Timer_Que.Time_Const;
                                Timer_Que.Time_Out = True;
                        }
                }
        }
//添加定时器函数
}

qqwuying2 发表于 2011-9-20 12:30:52

MARK
页: [1]
查看完整版本: 把GPRS程序移植到51上,以前有RTT系统,可以直接delay,现在没了系统,只能在主循环里写