单片机延时计算器的延时;;为什么是延时两秒啊

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
STC15F104E单片机之延时2秒程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口单片机延时程序的设计思想
我的图书馆
单片机延时程序的设计思想
单片机延时程序的设计思想&& 单片机编程中,延时程序使用比较多,根据其延时方式不同可分为两类:&&&&& 一》阻塞式延时;&&&&& 二》非阻塞式延时;&&&& 阻塞式延时,最常用,通常是在原地循环若干次,通过消耗机器周期来实现。此时,CPU再不能干别的事(CT0/CT1/CT2/串口仍可工作,延时可被中断暂时打断,会使延时加长),实时性比较差。&&&& 非阻塞式延时是在延时期间CPU仍可干别的事,不会在哪儿等,实时性比较好。&&&& 打个比方,你在环形操场跑步,相当于CPU的PC指针在主程序中循环(多数程序都是这样)。有个延时程序要求你等100毫秒把手举起来一下(用此表示CPU处理一个事件):当是阻塞式延时方式时,你就在原地踏步跑,等100毫秒后,你把手举起来一下再接着跑;当是非阻塞式延时方式时,你只是在一个地方放个秒表,并启动它,但你并不停下而是继续跑。每次跑到这个地方,你只要看一下秒表,看是否到100毫秒,若到了,你就把手举起来一下,若没到,你就继续沿跑道跑。&&&& 从上边的例子可清楚看出,阻塞式延时,影响主程序循环一次的执行时间(影响实时性!);非阻塞式延时,基本不影响主程序循环周期(CPU只是多执行一两条指令判断一下时间是否到),但需要有个“秒表”。这个“秒表”可用一个定时器完成,并作为整个系统的时基,供需要时基的部分使用;如单片机控制系统的人机界面,显示闪烁时就需要。比如,将定时器0设定为5毫秒,由此可产生10毫秒,25毫秒,50毫秒,100毫秒,250毫秒和500毫秒等等时钟信号。&&&& 现在分析影响延时精度的因素:&&&&& 影响阻塞式延时的因素有:&&&&&&& 1)设计程序时计算执行机器周期数的偏差;&&&&&&& 2)中断处理程序的额外时延;&&&&& 影响非阻塞式延时的因素有:&&&&&&& 1)所用定时器基本时基的精度(如上例:5毫秒);&&&&&&& 2)主程序的循环周期;这是随机的,比如,当看秒表时,时间还没到,&&&&&&&&&& 在下次看表之前时间却到了,最坏情况是差一个主程序循环周期;&&&&&&& 3)其他中断处理程序的额外时延;这是随机的,比如,在看表之前时间已到,&&&&&&&&& 这时有个中断也被响应,就要加上中断处理程序的时间延迟;&&&&& 在实际使用中,我们根据具体情况选择不同的延时方式。&&&& 这种非阻塞式延时的思想,我们成功用在许多单片机控制系统中,效果很好。
发表评论:
馆藏&113391
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&[转]&21ic官方微信-->
后使用快捷导航没有帐号?
查看: 13609|回复: 9
单片机延迟函数延迟的大概时间怎么算?
&&已结帖(5)
主题帖子积分
初级技术员, 积分 92, 距离下一级还需 8 积分
初级技术员, 积分 92, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
初级技术员, 积分 92, 距离下一级还需 8 积分
初级技术员, 积分 92, 距离下一级还需 8 积分
& &char i,j;
& &for(i=0;i&110;i++);
时钟周期为11.0592MHZ,keil仿真时,运行到j=0时为422.09us,运行到j=1时为783.42us,
783.42-422.09=361.33us,但是看到书上说for(i=0;i&110;i++);运行完成大概时间为1000us,
相差这么大。上述语句作为延迟函数的话,延迟时间大概为多少?想了很久都没想明白,哪个大神帮忙解答下,谢谢!
满意回复+1
最直接的方法就是,从一个IO输出,再用示波器去测IO口,就知道你的延时时间了
如果没有开中断的话,仿真肯定是正确的
影响大的原因可能是变量类型导致的,如char,int,long型区别大了,有符号,无符号区别大了,优化设置也有区别,
看反汇编一算就 ...
若是没有开中断
那就用keil simulate一下就可以了
否则 你就得抠汇编了 对照手册慢慢计算吧
若没有simulate 那就用示波器抓一下 ...
这个问题又答一遍了, 以下是COPY先前我的回答:
授人以鱼不如授人以渔,其实我也不太会算!
方法1: 实测
例 :void main(void)
{//关掉所有中 ...
程序和定时器精度一样,来喷的不跟你们讨论,愿意听的自己想。示波器抓就可以了。
主题帖子积分
中级技术员, 积分 126, 距离下一级还需 174 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 126, 距离下一级还需 174 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
我也不太懂,希望哪位大牛帮忙解答一下啊
主题帖子积分
技术总监, 积分 39953, 距离下一级还需 10047 积分
技术总监, 积分 39953, 距离下一级还需 10047 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 39953, 距离下一级还需 10047 积分
技术总监, 积分 39953, 距离下一级还需 10047 积分
如果没有开中断的话,仿真肯定是正确的
影响大的原因可能是变量类型导致的,如char,int,long型区别大了,有符号,无符号区别大了,优化设置也有区别,
看反汇编一算就知道了,这种程序最好还是用汇编写比较可行
主题帖子积分
---------------------
主题帖子积分
---------------------
专家等级:结帖率:97%打赏:0.00受赏:40.00
主题帖子积分
---------------------
这类问题好象有很多人问过了
看 C 代码当然无从判断。
从反汇编里根据运行,点使用的机器周期数,这是最准的办法。
欢迎进入 !
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
若是没有开中断&&那就用keil simulate一下就可以了
否则 你就得抠汇编了 对照手册慢慢计算吧
若没有simulate 那就用示波器抓一下
主题帖子积分
主题帖子积分
专家等级:结帖率:98%打赏:0.00受赏:2.00
主题帖子积分
这个问题又答一遍了, 以下是COPY先前我的回答:
授人以鱼不如授人以渔,其实我也不太会算!
方法1: 实测
& &&&例 :void main(void)
& && && && &{//关掉所有中断,及可以会影响的外设及模块
& && && && && &delay(200);&&GPIOx_XXXX =1;& &
& && && && && & delay(200);&&GPIOx_XXXX =0;
& && && && &} //用示波器实测I O口的频率
& && & 优点:方便快捷
& && & 缺点:没有考虑进出棧,delay(1)&&g与delay(200)/200,可以偏差较在
方法2: 计算
& & 你可以查看汇编代码(LIST文件 MAP文件中自己找)
& & 查看指令表,根据频率及指令来确定时间
& & 优点:这个是最准的
& &&&缺点:这个会比较费时,并要具有一定汇编基础
&&我一般用第一种方法,有些程序对时间要要比较准的话我就会用第二种
&&再加一句,若要精确延时最好用定时器计数延时来做!
说的好听点 我万事略懂。其实我什么都不会。
主题帖子积分
初级工程师, 积分 2555, 距离下一级还需 445 积分
初级工程师, 积分 2555, 距离下一级还需 445 积分
主题帖子积分
专家等级:结帖率:95%
主题帖子积分
初级工程师, 积分 2555, 距离下一级还需 445 积分
初级工程师, 积分 2555, 距离下一级还需 445 积分
最直接的方法就是,从一个IO输出,再用示波器去测IO口,就知道你的延时时间了
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:0.00受赏:18.00
主题帖子积分
程序和定时器精度一样,来喷的不跟你们讨论,愿意听的自己想。示波器抓就可以了。
*****二姨公开课***新课上线*****
《印刷电路板设计进阶》,12年积累的设计经验。
直播更新中,特价优惠!
《印刷电路板设计基础》,服务新手,践行工程设计!
!前100份限量优惠折上折,销量已过半,欲购从速!
主题帖子积分
高级工程师, 积分 5120, 距离下一级还需 2880 积分
高级工程师, 积分 5120, 距离下一级还需 2880 积分
主题帖子积分
专家等级:结帖率:91%打赏:0.00受赏:2.00
主题帖子积分
高级工程师, 积分 5120, 距离下一级还需 2880 积分
高级工程师, 积分 5120, 距离下一级还需 2880 积分
程序和定时器精度一样,来喷的不跟你们讨论,愿意听的自己想。示波器抓就可以了。
NE5532 发表于
11:24 :victory:
long long ago
主题帖子积分
助理工程师, 积分 1838, 距离下一级还需 162 积分
助理工程师, 积分 1838, 距离下一级还需 162 积分
主题帖子积分
专家等级:结帖率:95%
主题帖子积分
助理工程师, 积分 1838, 距离下一级还需 162 积分
助理工程师, 积分 1838, 距离下一级还需 162 积分
一般我是直接在软件模拟运行查看时间,你有空不嫌麻烦也可以慢慢研究每条指令占多少时间。
时间类勋章
技术高手奖章
人才类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
技术奇才奖章
人才类勋章
精华达人奖章
等级类勋章
终身成就奖章
等级类勋章
无冕之王奖章
等级类勋章
沉静之湖泊
发帖类勋章
技术导师奖章
人才类勋章
热门推荐 /2关于51单片机延时一毫秒的程序设计问题。==
热门型号:
&&&当前位置:
关于51单片机延时一毫秒的程序设计问题。
用户名:neillan
注册时间: 9:44:00
关于51单片机延时一毫秒的程序设计问题。
刚从模拟的工作转换到数字电路,我这个菜鸟对一点也不了解那位大侠能帮我解释一下我对这段代码的理解误区//后面为我的疑问。
为了延时1ms所写的延时子程序 (晶振的频率为12M)C语言版,
void delayms(uint ms)
while(ms--)
for(i=0;i<120;i++);// 机器周期为1us 为什么循环120次,就能延长时间1ms呢?
汇编编版程序
//MOV R5,#50 ;延时子程序
D1: MOV R6,#40
D2:MOV R7,#248
DJNZ R6,D2
DJNZ R5,D1
用户名:lyjian
注册时间: 12:25:00
for(i=0;i&120;i++);&&
这可不是光执行一条指令,怎么可能是1us
用户名:xcs_1211
注册时间: 10:05:00
MOV TMOD,#01H ;
MOV TH0,#0FCH ;1m延时初值置入
MOV TL0,#18H
SETB TR0 ;
JNB TF0,$ ;
用户名:zydlyq
注册时间: 21:00:00
还得执行while(ms--)这条语句,用定时器吧,准确。
热门型号:单片机的延时函数到底怎么控制???|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
延时函数是很常用色,我是初学者,我看过两种延时函数,[attachment=3664175]这是第一种。第二层循环未110.[attachment=3664189]这是第二种。第二层循环为600.我很好奇。到底是哪一个?假如我要做一个按键扫描函数。按下后要准确延迟10ms后再次检测是否松开。应该选择哪一个?还有,做一次这些无用的两个for循环用时多少是不是和晶振频率有关系???谢谢大家赐教
赞助商链接
好疑惑啊,那两个数字应该不是随便写的吧。那到底为什么是110和600呢
赞助商链接
根据你的晶震频率计算而来的,或者经过调试加断点算时间
郭天祥的教程里11.0592M晶振用Keil的断点调出来的1MS是110的循环,这就是第一个函数的来历(我用的这个)第二个不知道,LZ可以用断点算一下
这个延时函数其实就是通过让单片机不断执行空命令来实现的,因为单片机执行每一条命令都需要一定的时间,所以我可以通过让单片机执行n条空命令来实现延时。执行一条命令的时间也就是一个机器周期,如果11.0592Mhz 是你外部的晶振,外部的晶振传到单片机内部就变小了变成了原来的12分之一,具体原因你可以查单片机的内部结构,我在这里告诉你如何计算, 11.0592Mhz除以12,商再取倒数就是单片机的一个机器周期了所以for语句延时跟晶振有很大关系PS:机器周期不是执行一条语句的时间,不同的语句所需的时间不同。具体你可以百度一下机器周期,时钟周期,和指令周期的区别
按照机器周期&&指令周期 判断累加 用STC的工具可以直接生成&&不同晶振 不同指令集的51 同一函数时间不一样&&要精确先生成一个 再用示波器微调
要准确延时要用定时器,实际上按键检测也没人用延时函数的,效率太低
的确按键扫描用延时很浪费CPU资源,初学的话玩玩可以,以后进阶的时候可以去学学按键状态机!
相同的延时函数,在不同的系统晶振频率时延时时间是不同的,在不同运算速度的单片机上也是不相同的,比如在12T的传统单片机上和在STC12C**的1T单片机上是不同的,延时函数的结构也是千变万化、多种形式的,但是只要记住它的作用机理就不难理解了,比如:我们数60个数耗时1秒,那么我们数5次(60个数)就耗时5秒,至于为什么数60个数就耗时1秒,就要考量你的单片机最小系统完成数1个数的真实耗用时间了,这个百度学习吧。
查看完整版本: [--
Powered by
Gzip enabled}

我要回帖

更多关于 单片机延时计算器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信