需要帮助编写程序

时间:2010-10-21 18:57:05

标签: programming-languages assembly microprocessors

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

任何人都可以帮助这更有意义吗? 我曾经想过使用NOP但是意识到这有点不切实际,我已经尝试了ACALL DELAY但是出于某种原因它将它作为一个未知的命令拉起来。

我很难过,并且感谢我能得到的任何帮助。

我正在使用DS89C450时钟频率为11 MHz,我试过问教授,他告诉我一块蛋糕你应该没问题,但是阅读和编写代码对我来说是新的已经做了两个星期了。当我看到这本书时,它几乎就像用中文写的那样难以理解它,我的同学们就像我一样笨拙,我想我最后的选择就是在网上问一些可能有类似情况的人问题或者有更多洞察力的人可能会让我朝着正确的方向前进。

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

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

虽然这样做有两秒钟的延迟,其中每个值只停留在每个端口只有两秒钟,这仍然是模糊的,其余的听起来是否合适?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

延迟你有两种方法可以使用中断或循环

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

这个link说明了如何确定循环索引(因为如果需要指令的数量,你可能需要嵌套循环..在PIC中我必须做出100万条指令才能延迟1秒)