0

我正在上一门微处理课程,并且在编写一个程序时遇到了一些麻烦,该程序将在一个端口中保存一个值两秒钟,然后再转到下一个端口。

任何人都可以帮助这更有意义吗?
我曾考虑过使用 NOP,但意识到这有点不切实际,我尝试过 ACALL DELAY 但由于某种原因,它作为未知命令拉起。

在这一点上我很难过,我会很感激我能得到的任何帮助。

我正在使用时钟为 11 MHz 的 DS89C450,我试过问教授,他告诉我这小菜一碟,你应该没问题,但是读写代码对我来说是全新的,我只是在这样做两周。当我看这本书时,它几乎就像是用中文写的,很难理解,我的同学和我一样被难住了,我想我最后的办法是在网上问一个可能有类似情况的人问题或有更多洞察力的人可能能够将我引向正确的方向。

我知道我需要用指定的值加载每个端口我的问题在于端口的切换给他们 2 秒的延迟。

我的程序看起来像这个 MOV P0、#33H MOV P1、#7FH MOV P2、B7H MOV P3、EFH,所以当这四个端口加载了这些值时,我需要 P0 去 P1、P1-P2 等等P3 它的值需要转到 P0 并将其全部循环。我打算使用 SJMP 将其循环回开始,以便程序始终运行

这样做时会有两秒的延迟,每个值只在每个端口中停留两秒,这仍然是模糊的,其余的听起来对吗?

4

2 回答 2

0

我在 PIC 16f84 微控制器中做了类似的事情

要进行延迟,您有两种使用中断或循环的方法

因为您知道Instructions_per_second您可以使用循环来生成所需数量的指令,这些指令需要所需的时间

链接说明了如何确定循环索引(因为如果需要所需的指令数量,您可能需要嵌套循环..在 PIC 中我必须制作 100 万条指令才能延迟 1 秒)

于 2010-10-21T19:49:21.557 回答
0

我从来没有用那个特定的芯片做过这个(而且我不知道它支持的汇编语法),但是伪代码方法是这样的:

Load initial values into ports
Initialize counter with (delay in seconds * clock ticks per second) / (clock ticks in loop)
While counter != 0
    Decrement counter 
Swap port values:
    P3 -> temp, P2 -> P3, P1 -> P2, P0 -> P1, temp -> P0
Loop (4 times?)

我认为这就是你真正需要的结构。根据我对 8051 组件的 10 分钟阅读,延迟循环如下所示:

          MOV A, b6h ; ~91 ticks/sec @ 11 ms/tick 
DELAY:    DEC A
          JNZ DELAY ; NOP-type delay loop
于 2010-10-21T19:24:30.463 回答