搜索
bottom↓
回复: 24

请教,延时时间计算的问题(问题已解决,答案在4楼)

[复制链接]

出0入0汤圆

发表于 2012-5-10 17:29:52 | 显示全部楼层 |阅读模式
本帖最后由 kevinstar888 于 2012-5-11 09:11 编辑

我接触单片机也有一段时间,那时候用的是C语言,延时函数直接照搬就行了,根本就没想过这个问题,
现在来到新的公司,公司用的单片机资源很少,就必须用汇编,这段时间都在学汇编(其实我的C语言也不怎么样,呵呵)。
刚开始的时候,也是没注意延时问题。照着例子搬就是了。后来看到一个例子,需要几个不同的延时,例子上是先搞个这几个延时的基数,然后需要多久就乘以倍数就能得到需要的延时。
现在问题来了,我看了下延时部分,可是我不管怎么算,也对不上号,特来寻求指点。
延时部分程序如下:
D200:MOV R4,#81H;  //1个指令周期
D200B:MOV A,#0FFH;//1个指令周期
D200A: DEC A;         //1个指令周期
         JNZ D200A;    //2个指令周期
         DEC R4;        //1个指令周期
     CJNE R4,#00H,D200B;   //2个指令周期
    RET;
延时T=2*2*FFH*81H=201FC=131580 uS
例子上说这个延时是200mS ,不知道我那里算错了,望指出。   
--------------------------------------------------------------------------------------------------------------------------
PS:编辑原因,修改错别字  
-----------------------------------------------------------------------------------------------------------------------
到此,问题已经得到完美解决,
感谢y574924080 的回答,同时也感谢其他的好心人

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-10 17:57:17 | 显示全部楼层
晕,谁会这样延时延那么久啊!况且你算时间也要看CPU时间啊,居然还说C不咋的,你用汇编写个点阵菜单看看??

出0入0汤圆

发表于 2012-5-10 19:07:39 来自手机 | 显示全部楼层
1+(1+(1+2)*FFH+1+2)*81H

出0入0汤圆

发表于 2012-5-10 19:08:46 | 显示全部楼层
本帖最后由 y574924080 于 2012-5-10 19:11 编辑

指令周期数:1+(1+(1+2)*FFH+1+2)*81H

出0入0汤圆

发表于 2012-5-10 19:23:21 | 显示全部楼层
本帖最后由 BXAK 于 2012-5-10 19:26 编辑
raxb 发表于 2012-5-10 17:57
居然还说C不咋的,你用汇编写个点阵菜单看看??{:fu ...


LZ其实是自谦C语言没学好

出0入0汤圆

发表于 2012-5-10 19:35:53 | 显示全部楼层
三楼正解,不过楼主为啥不用DJNZ Rn,rel这种语句了?更好估算啊

出0入0汤圆

 楼主| 发表于 2012-5-10 19:38:35 | 显示全部楼层
raxb 发表于 2012-5-10 17:57
晕,谁会这样延时延那么久啊!况且你算时间也要看CPU时间啊,居然还说C不咋的,你用汇编写个点阵菜单看看??{:fu ...

抱歉,我说C语言不怎么样,让你生气了,其实我少打了几个字,我没注意,现在改过来了。
我忘说了,晶振是12M,一个指令周期为1uS.
还有200ms的时间很长吗,我反正不觉得,我相信凡是接触单片机的人,都不会不知道流水灯吧!
流水灯的时间延时,一般都是1s,难道200ms比1s多?

出0入0汤圆

 楼主| 发表于 2012-5-10 19:40:39 | 显示全部楼层
614229816 发表于 2012-5-10 19:35
三楼正解,不过楼主为啥不用DJNZ Rn,rel这种语句了?更好估算啊

呵呵,这是例子,不是我写的

出0入0汤圆

发表于 2012-5-10 19:44:19 | 显示全部楼层
200ms能让我干多少事情啊。。。我算算。。。好像啥事情都能干完了~

出0入0汤圆

 楼主| 发表于 2012-5-10 20:09:16 | 显示全部楼层
y574924080 发表于 2012-5-10 19:08
指令周期数:1+(1+(1+2)*FFH+1+2)*81H

1+(1+(1+2)*FFH+1+2)*81H=1+(4+3*FFH)*81H=1+301H*81H=1+18381H=18382H=99202D
如果晶振是12M的话,1个机器周期是1uS,你这结果也不对啊,难道f=99202*12/200000=5.95212MHZ?

出0入0汤圆

 楼主| 发表于 2012-5-10 20:15:16 | 显示全部楼层
xinzhi1986 发表于 2012-5-10 19:44
200ms能让我干多少事情啊。。。我算算。。。好像啥事情都能干完了~

呵呵,挺勤快的嘛,啥事都干完了,不如你用这200ms算算圆周率pi小数点后面有多少位数?怎么样?
其实我也知道200ms的延时有点浪费,但是我想说,而且我一直在强调,这个程序是例子,不是实际应用中,我才不相信,你刚学流水灯的时候,延时没超过200ms

出0入0汤圆

发表于 2012-5-10 23:13:04 | 显示全部楼层
本帖最后由 y574924080 于 2012-5-10 23:14 编辑
kevinstar888 发表于 2012-5-10 20:09
1+(1+(1+2)*FFH+1+2)*81H=1+(4+3*FFH)*81H=1+301H*81H=1+18381H=18382H=99202D
如果晶振是12M的话, ...


f=99202*12/200000=5.95212MHZ?

这个你计算错了吧

你想想,一个指令周期才1us,99202 * 1us = 99.202ms ≈ 100ms

很明显是10Hz左右啊



出0入0汤圆

发表于 2012-5-10 23:34:23 | 显示全部楼层
感觉很多人在喷楼主
人家也不容易啊 发帖时来求救的 不是来求高手笑的

出0入0汤圆

 楼主| 发表于 2012-5-11 00:01:04 | 显示全部楼层
y574924080 发表于 2012-5-10 23:13
f=99202*12/200000=5.95212MHZ?

这个你计算错了吧

呵呵,我想问下:
1,一个指令周期为1uS的时候,晶振是多少?(我的答案是:12MHZ)
2,99202个指令周期用时200ms,请问晶振又应该是多少?(f=99202*12/200000=5.95212MHZ这是我的答案)
如果我的答案错了,请指教?

出0入0汤圆

 楼主| 发表于 2012-5-11 00:02:29 | 显示全部楼层
huangxiaowei 发表于 2012-5-10 23:34
感觉很多人在喷楼主
人家也不容易啊 发帖时来求救的 不是来求高手笑的
...

呵呵,只要是讨论,没有人身攻击,这些都不算什么

出0入0汤圆

发表于 2012-5-11 00:47:56 | 显示全部楼层
255*129*1US=32895
255*129*2US=65790
129*1US=129
129*2SU=258
++++≈100MS

出0入0汤圆

发表于 2012-5-11 00:56:26 来自手机 | 显示全部楼层
kevinstar888 发表于 2012-5-11 00:01
呵呵,我想问下:
1,一个指令周期为1uS的时候,晶振是多少?(我的答案是:12MHZ)
2,99202个指令周期用 ...

这个是我理解错了你的意思了,我把你的频率看成程序一秒执行的频率了,我想表达的是这段程序在12MHz时耗时约为100ms,6MHz时约为200ms

出0入0汤圆

发表于 2012-5-11 00:57:45 | 显示全部楼层
这个是我理解错了你的意思了,我把你的频率看成程序一秒执行的频率了,我想表达的是这段程序在12MHz时耗时约为100ms,6MHz时为200ms

出0入0汤圆

发表于 2012-5-11 00:58:33 | 显示全部楼层
手机打字真不容易啊

出0入0汤圆

 楼主| 发表于 2012-5-11 09:12:55 | 显示全部楼层
614229816 发表于 2012-5-10 19:35
三楼正解,不过楼主为啥不用DJNZ Rn,rel这种语句了?更好估算啊

为了你这句话,我特意去看下3楼, 诡异事件,3楼没有。。。。。。

出0入0汤圆

 楼主| 发表于 2012-5-11 09:14:44 | 显示全部楼层
y574924080 发表于 2012-5-11 00:57
这个是我理解错了你的意思了,我把你的频率看成程序一秒执行的频率了,我想表达的是这段程序在12MHz时耗时 ...

谢谢,现在明白了

出0入0汤圆

发表于 2012-5-11 12:46:08 | 显示全部楼层
kevinstar888 发表于 2012-5-11 09:12
为了你这句话,我特意去看下3楼, 诡异事件,3楼没有。。。。。。

三楼是我

当时用手机回帖,看到成功了

切换到电脑,又没了,

所以我重新发了一次,就是四楼了啊

出0入0汤圆

发表于 2012-5-11 13:31:26 | 显示全部楼层
kevinstar888 发表于 2012-5-10 19:38
抱歉,我说C语言不怎么样,让你生气了,其实我少打了几个字,我没注意,现在改过来了。
我忘说了,晶振是 ...

没有别的意思,只是些建议想法罢了,LZ不要在意啊

出0入0汤圆

发表于 2012-5-15 14:50:53 | 显示全部楼层
y574924080 发表于 2012-5-11 12:46
三楼是我

当时用手机回帖,看到成功了

好强哦,一个人占了两层楼,还把一层给藏起来咯

出0入0汤圆

发表于 2012-5-15 17:44:40 | 显示全部楼层
614229816 发表于 2012-5-15 14:50
好强哦,一个人占了两层楼,还把一层给藏起来咯

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

本版积分规则

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

GMT+8, 2024-7-24 02:23

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

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