8051中的软件延迟程序

在8051微控制器中,执行单个指令周期需要12个处理器时钟周期。对于由12MHz晶体计时的8051微控制器,执行一个指令周期所需的时间为1µS,并且符合以下等式:,1条指令周期的时间= 12 /12MHz = 1µS. 最短的指令将在1µS内执行,其他指令将需要2微秒或更多微秒,具体取决于指令的大小。因此,通过将适当的指令循环一段所需的时间,可以产生任意大小的时间延迟。无论如何,记住一件事,软件延迟不是很准确,因为我们无法准确预测执行一条指令需要多少时间。通常,指令将在理论时间内执行,但有时由于其他原因,指令可能会提前或延迟。因此,在时间关键型应用中,最好使用8051定时器来产生延迟。然而,软件延迟例程非常容易开发,对于不那么关键和简单的应用程序来说已经足够好了。

程序延迟1mS。

延时:mov r6,# 250d mov r7,# 250d label1: DJNZ r6, label1 label2: DJNZ r7, label2 ret

上述程序大致产生1mS的延迟。指令DJNZ Rx,标签是一个两个周期的指令,需要2个μ S来执行。因此,重复这条指令500次将产生500 x 2µS = 1mS的延迟。程序被写成一个子程序,它是这样工作的。当调用子例程DELAY时,寄存器R6和R7由250D加载。然后执行DJNZ R6,LABEL1,直到R6为零,然后执行DJNZ R7,LABEL2,直到R7为零。这就形成了一个循环DJNZ Rx,标签重复500次,结果将延迟1mS。正如我前面所说的,这只是一个粗略的延迟,当您测试这个程序时,您可能会发现输出中的细微差异。您可以对R6和R7的初始值进行调整,以使结果更准确。

程序延迟1秒。

下面显示的程序产生大约1秒的延迟。在这个程序子程序中,延迟1mS (DELAY)被连续调用4次,整个周期重复250次。结果产生了4 × 1mS × 250 = 1000mS = 1秒的延迟。

Delay1: mov r5,# 250d label: call delay call delay call delay call delay call delay DJNZ r5, label ret delay: mov r6,# 250d mov r7,# 250d loop1: DJNZ r6, loop1 loop2: DJNZ r7, loop1 ret

方波产生使用8051。

使用软件延迟子程序,可使用8051产生宽频率范围(受晶体频率限制)的方波。这个想法非常简单,运行一个延迟等于方波时间周期一半的子程序,在延迟程序完成后补充任何端口引脚,再次重复延迟子程序,再次补充相同的端口引脚,并随着时间一次又一次地重复该循环。这将在相应端口引脚处产生所需频率的方波。使用8051产生方波的电路图如下所示。相同的电路可用于产生任何频率,但程序不同。

8051方波发生器
方波产生使用8051
程序产生1KHz方波。
Org 000h mov p1,# 00000000b mov a,# 00000000b main: mov r6,# 220d loop1: djnz r6, loop1 CPL a mov p1, a SJMP主端
产生2KHz方波的程序。
ORG 000H MOV P1,#00000000 B MOV A,#00000000 B MAIN:MOV R6,#220D MOV R7,#183D LOOP1:DJNZ R6,LOOP1 LOOP2:DJNZ R7,LOOP2 CPL A MOV P1,一个SJMP主端
产生10KHz方波的程序。
Org 000h mov p1,# 00000000b mov a,# 00000000b main: mov r6,# 20d loop1: djnz r6, loop1 CPL a mov p1, a SJMP主端
著者

21评论

  1. 苏达卡尔

    1秒延时程序

    延迟1:MOV R5#250D
    标签:ACALL延迟
    呼叫延迟
    呼叫延迟
    呼叫延迟
    DJNZ R5,标签
    RET
    延迟:MOV R6,#250D
    MOV R7, # 250 d
    LOOP1: DJNZ R6, LOOP1
    LOOP2:DJNZ R7,LOOP2
    RET

  2. 阿克谢·索拉提亚

    大家好,我正在尝试用8051控制器制作一个带有时间设置功能的七段数字时钟,我在这个电路的软件部分遇到了问题,有人能给我一些关于这个电路十六进制代码的帮助吗…。。

    谢谢……
    PLZZZ帮助…。。

  3. 图尔巴布

    大家好,我是其中一个对硬件编程很着迷的人,所以如果你读到这条消息,请回复你的电子邮件或聊天室地址。
    谢谢

  4. 罗恩·沃尔特斯

    谢谢,真的很有帮助

Baidu