完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
例如我有这样一段代码,大体思路如下:
代码1; 延时1ms; 然后执行代码2; 延时1.5ms; 然后执行代码3; 延时1.7ms; 然后执行其他代码; 请问这样用单片机内部定时器怎么实现? 注:不用软件延时。 |
|
相关推荐
2个回答
|
|
用定时器定时0.1秒,或者0.01秒,多循环几次不就行了,找公约数。
|
|
|
|
本帖最后由 爱我别走 于 2013-12-10 14:03 编辑
一般延时有两种写法,即阻塞和非阻塞两种。下面我提供些思路,你自己完善一下应该就可以了。 //========================================================= // 延时的阻塞写法 //========================================================= 阻塞的延时就是,你调用延时函数之后,程序就卡在延时函数里,只有当延时时间到达 程序才能继续往下走。一般可以用软件的循环语句来写,当然也可以用定时器。如下面的两 个例子: /* 软件延时--阻塞模式 */ vloid delay(void) { //通过while,for等循环语句让cpu空转,从而达到延时。 } /* 定时器延时--阻塞模式 */ unsigned int g_ncount = 0;/*定义一个全局变量,用于计时*/ //定时器初始化 void init_timer(void) { //关键代码:写上定时一个适合的时间片,比如100us。 } //定时器中断 void Isr_timer(void) interrupt 1 { //关键代码:写上g_ncount --; } //延时函数 void delay(int dx) { g_ncount=dx; while(g_ncount); } //========================================================= // 延时的非阻塞写法 //========================================================= 非阻塞延时就是,在你调用延时函数后,cpu转而去做别的事情,当延时时间到达,cup回到 延时函数的下一行继续执行。这样做到好处是显而易见的,由于没有阻塞,不会因为你调用延时 而影响其他任务的执行,充分提高了cpu的效率。一般我们用状态机实现。 /* 定时器延时--非阻塞模式 */ unsigned int g_states = 0; /义全局变量,用于保存状态*/ unsigned int g_ncount = 0;/*定义一个全局变量,用于计时*/ //定时器初始化 void init_timer(void) { //关键代码:写上定时一个适合的时间片,比如100us。 } //定时器中断 void Isr_timer(void) interrupt 1 { //关键代码:写上g_ncount --; } //延时的使用 switch(g_states) { case 0: { //添加代码1 .................. g_ncount = 10; g_states = 1; //切换到延时状态 }break; case 1: { if(g_states == 0) { g_ncount = 0;l g_sattes = 2;//跳转到代码段2 } }break; case 2: { }break; ................ } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
657 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
640 浏览 0 评论
753 浏览 1 评论
546 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
910 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11652 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:19 , Processed in 0.346141 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号