装配的第一步 - LED改变

时间:2014-09-09 02:06:32

标签: assembly

下面我写了一本关于汇编语言的程序代码,正如我所拥有的书所引用的那样。 它说在终端PTD4上我们连接了一个LED。该计划关注领导者" on"持续1秒钟和#34;关闭"持续1秒情况一直持续下去。如果你知道我应该在下面改变什么,以便让LED处于两个不同的阶段。特别是我希望它在5秒内开启,关闭6秒。 提前致谢。这是代码。

PORTD.DATA        EQU   $0003
PORTD.DIRECTION   EQU   $0007
COUNTER1          EQU   $0040
COUNTER2          EQU   $0041
COUNTER3          EQU   $0042
ROM.START         EQU   $8000
RESET.VECTOR      EQU   $FFFE

                  ORG   ROM.START
                  BSET  0,$001F
                  MOV   #$1F,$003C

                  BSET  4,PORTD.DIRECTION

LOOP              BSET  4,PORTD.DATA
                  JSR   DELAY.1SEC
                  BCLR  4,PORTD.DATA
                  JSR   DELAY.1SEC
                  JMP   LOOP

DELAY.1SEC        MOV   #!55,COUNTER3
LOAD.COUNTER2     MOV   #!100,COUNTER2
LOAD.COUNTER1     MOV   #!180,COUNTER1

DELAY.LOOP        DBNZ  COUNTER1,DELAY.LOOP
                  DBNZ  COUNTER2,LOAD.COUNTER1
                  DBNZ  COUNTER3,LOAD.COUNTER2

                  RTS

                  ORG   RESET.VECTOR
                  FDB   ROM.START

1 个答案:

答案 0 :(得分:0)

在您的代码中,开启和关闭的持续时间为1秒,编码为

JSR   DELAY.1SEC

要将代码修改为“开启5秒钟并关闭6秒钟”,您需要两个子程序,分别等待5秒和6秒。

“等待5秒”子程序的一个例子可能是(我假设处理器上有一个名为'COUNTER4'的计数器)

DELAY.5SEC     MOV #!5,COUNTER4
DELAY5.LOOP    JSR DELAY.1SEC
               DBNZ COUNTER4,DELAY5.LOOP
               RTS

“等待6秒”子程序与DELAY.5SEC类似,但在开始时将6设置为COUNTER4。

然后将代码的循环部分修改为

LOOP          BSET  4,PORTD.DATA
              JSR   DELAY.5SEC
              BCLR  4,PORTD.DATA
              JSR   DELAY.6SEC
              JMP   LOOP