搜索
bottom↓
回复: 7

把GPRS程序移植到51上,以前有RTT系统,可以直接delay,现在没了系统,只能在主循环里写

[复制链接]

出0入4汤圆

发表于 2010-12-20 16:51:44 | 显示全部楼层 |阅读模式
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);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-12-20 19:06:14 | 显示全部楼层
推荐看一下CONTIKI这个操作系统,类状态机的。其实uip里面实现了一个定时器接口函数

出0入0汤圆

发表于 2010-12-20 22:10:25 | 显示全部楼层
1.用定时器调度任务
2.或者delay用定时器实现
3.以上2者一起实现

出0入0汤圆

发表于 2010-12-20 23:04:23 | 显示全部楼层
定时器

出0入0汤圆

发表于 2010-12-21 14:30:24 | 显示全部楼层
或者你可以使用keil带的 给51的一个实时内核,比较小,简单易用

出0入0汤圆

发表于 2011-1-5 15:36:14 | 显示全部楼层
像2楼说的一样 设置标志位 定时器里面计时 置标志位

出0入0汤圆

发表于 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;
                        }
                }
        }
//添加定时器函数
}

出0入0汤圆

发表于 2011-9-20 12:30:52 | 显示全部楼层
MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 08:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表