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

2020-02-05 09:23发布

本帖最后由 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 的回答,同时也感谢其他的好心人
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
kevinstar888
1楼-- · 2020-02-06 10:26
614229816 发表于 2012-5-10 19:35
三楼正解,不过楼主为啥不用DJNZ Rn,rel这种语句了?更好估算啊

呵呵,这是例子,不是我写的
xinzhi1986
2楼-- · 2020-02-06 12:21
 精彩回答 2  元偷偷看……
kevinstar888
3楼-- · 2020-02-06 13:12
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?
kevinstar888
4楼-- · 2020-02-06 17:47
xinzhi1986 发表于 2012-5-10 19:44
200ms能让我干多少事情啊。。。我算算。。。好像啥事情都能干完了~

呵呵,挺勤快的嘛,啥事都干完了,不如你用这200ms算算圆周率pi小数点后面有多少位数?怎么样?
其实我也知道200ms的延时有点浪费,但是我想说,而且我一直在强调,这个程序是例子,不是实际应用中,我才不相信,你刚学流水灯的时候,延时没超过200ms
y574924080
5楼-- · 2020-02-06 22:50
本帖最后由 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左右啊



huangxiaowei
6楼-- · 2020-02-06 23:44
感觉很多人在喷楼主
人家也不容易啊 发帖时来求救的 不是来求高手笑的

一周热门 更多>