首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量延迟8051

测量延迟8051
EN

Stack Overflow用户
提问于 2012-08-27 06:34:02
回答 2查看 2.4K关注 0票数 1

我要编码8051的延迟。我可以这样做,但我不知道如何计算延迟的频率。例如,以下是我所做的延迟:

代码语言:javascript
复制
DELAY: MOV R2, 0FFH
D2:    NOP
       NOP
       DJNZ R2, DELAY
       RET

但是我不知道的是这个延迟产生了多少赫兹的频率。有没有办法计算一下呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-27 06:39:47

你需要知道每条指令需要多少周期,以及你的处理器的速度。

通常,如果您的处理器是1 1MHz,并且NOP需要2个周期,那么DJNZ需要3个周期(将所有这些组合在一起,不知道这些周期在8051上需要多少个周期),然后第一次循环,从D2:将是7个周期(2 +2+3= 7),对于1 1MHz处理器,每个周期是1微秒,所以这将需要7µs,漂洗和重复,直到您达到您想要的延迟。

注意,您可能不希望DJNZ跳转到延迟,而是D2。对8051真的不熟悉,但这只是一个猜测。

另外,不要忘记添加MOV和RET指令。

票数 2
EN

Stack Overflow用户

发布于 2012-10-05 23:59:26

一个简单的延迟例程,带有注释以便于理解

代码语言:javascript
复制
delay_1_ms:       ;calling this routine take 2 mc ;tmc=2
    MOV R7,#250   ;mov rn,#data take 1 mc(machine cycle);tmc=2+1
    DJNZ R7,$     ;djnz take 2mc for each time exicuted;tmc=3+(2*250)
    MOV R7,#247   ;mov rn,#data take 1 mc              ;tmc=503+1
    DJNZ R7,$     ;djnz take 2mc for each time exicuted.;tmc=504+(247*2)
    RET           ;ret takes 2mc so total machine cycle=998+2=1000mc

如果12 sec晶体的一个机器周期是1微秒,则此例程需要1000*1microsec=1mili秒延迟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12134458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档