OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5845|回复: 3

询问一下SIM900例程中一个时间的问题

[复制链接]

70

主题

6764

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13140
金钱
13140
注册时间
2012-11-26
在线时间
3815 小时
发表于 2014-5-30 11:27:48 | 显示全部楼层 |阅读模式
5金钱

[mw_shl_code=c,true]//sim900a主测试程序 void sim900a_test(void) { u8 key=0; u8 timex=0; u8 sim_ready=0; POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-SIM900A 测试程序",16,240); while(sim900a_send_cmd("AT","OK",100))//检测是否应答AT指令 { Show_Str(40,55,200,16,"未检测到模块!!!",16,0); delay_ms(800); LCD_Fill(40,55,200,55+16,WHITE); Show_Str(40,55,200,16,"尝试连接模块...",16,0); delay_ms(400); } LCD_Fill(40,55,200,55+16,WHITE); key+=sim900a_send_cmd("ATE0","OK",200);//不回显 sim900a_mtest_ui(40,30); while(1) { delay_ms(10); sim_at_response(1);//检查GSM模块发送过来的数据,及时上传给电脑 if(sim_ready)//SIM卡就绪. { key=KEY_Scan(0); if(key) { switch(key) { case KEY_RIGHT: sim900a_call_test();//拨号测试 break; case KEY_DOWN: sim900a_sms_test(); //短信测试 break; case KEY_UP: sim900a_gprs_test();//GPRS测试 break; } sim900a_mtest_ui(40,30); timex=0; } } if(timex==0) //2.5秒左右更新一次 { if(sim900a_gsminfo_show(40,225)==0) sim_ready=1; else sim_ready=0; } if((timex%20)==0)LED0=!LED0;//200ms闪烁 timex++; } }[/mw_shl_code]
if(timex==0) //2.5秒左右更新一次            <-----------  2.5S是怎么得到的 ,看大循环的话,如果没有key按下,应该就检测一次就没了,再也不会去检测,那2.5S是怎么计算出来的 ?

最佳答案

查看完整内容[请看2#楼]

timex不是u8么? u8最大值是多少?255? 255*10ms=?? 是不是2.5秒左右啊?
学无止境
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-30 11:27:49 | 显示全部楼层
timex不是u8么?
u8最大值是多少?255?
255*10ms=??
是不是2.5秒左右啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2013-12-6
在线时间
24 小时
发表于 2014-7-10 15:42:51 | 显示全部楼层
我也想问这个问题,请原子哥速回复,谢谢!
回复

使用道具 举报

3

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2013-12-6
在线时间
24 小时
发表于 2014-7-11 09:43:48 | 显示全部楼层


timerx的值加到255后,被重置为0。这点用的真巧妙!

下边为验证的代码:

[mw_shl_code=c,true]#include "stdio.h" void delay(void) //延时1000ms { unsigned char a,b,c; for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); } void main() { unsigned char timer; timer = 0; while(1) { delay(); if(timer==0) { printf("timer=%d\n",timer); } timer++; } }[/mw_shl_code]


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-6 06:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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