Code Warrior汇编代码

时间:2014-02-01 20:46:17

标签: codewarrior

我需要一些关于学校的小程序的建议。如果你能指出我正确的方向,我会非常感激。我正在使用汇编语言的CodeWarrior编码来处理TWR-S12G128处理器模块。我的目标是让LED以1秒的延迟开启和关闭。这是我的代码:

                LDS     #$4000  ; Initializing SP
                LDAA    #$FF     
                STAA    DDRA    ; Defines Port A as output
Back            LDAA    #$FF     
                STAA    PORTA   ; Turning all LEDs ON
                JSR     Delay    
                LDAA    #$00     
                STAA    PORTA   ; Turning all LEDs OFF
                JSR     Delay    
                BSR     Back     
Delay           PSHX            ; 2-clock cycle
                PSHY            ; 2
                LDY     #20     ; 2-clock cycle
LOOP1           LDX     #$FFFF  ; 2
LOOP2           DEX             ; 1-clock cycle
                NOP             ; 1-clock cycle
                BNE     LOOP2   ; 3-clock cycles/last cycle is 1
                DEY             ; 1
                BNE     $FF     ; 3-clock cycles/last cycle is 1
                PULY    LOOP1   ; 3-clock cycle
                PULX            ; 3-clock cycle
                RTS             ; 5-clock cycle

我得到的错误是:

Error   : A2400: End of Line expected

main.asm line 58   
Project: Project_4.mcp, Target: Standard, Source File: main.asm

Error   : Compile failed
Project: Project_4.mcp, Target: Standard, Source File: main.asm

2 个答案:

答案 0 :(得分:0)

我对飞思卡尔架构知之甚少,但任何架构将拉指令与标签结合起来都是非常不寻常的。

bne $ff也不常见,因为 通常会指定标签。

我认为这两条指令应该更符合:

bne loop1
puly

这更有意义,因为pull指令丢失标签并且嵌套循环被正确构造。

答案 1 :(得分:0)

BNE线上的$ FF不合适。我认为这是一个错字。几个小时前我刚和我的教授一起做过这个。下面的代码将为您提供1秒延迟并连续循环开启和关闭4个LED:

ABSENTRY Entry                 ; Application entry point
RAMStart    EQU  $2000
ROMStart    EQU  $C000  

    ORG RAMStart
; Insert here your data definition.

PTT         EQU   $240
DDRT        EQU   $242

; code section
            ORG   ROMStart
Entry:
_Startup:
           LDS    #$4000
Back       LDAA   #$FF
           STAA   DDRT
           LDAA   #$FF
           STAA   PTT
           JSR    Delay
           LDAA   #$00
           STAA   PTT 
           JSR    Delay
           BSR    Back

Delay        PSHX       ; 2-clock cycle
             PSHY       ; 2
             LDY    #20 ; 2-clock cycle
LOOP1        LDX    #$FFFF  ; 2
LOOP2        DEX        ; 1-clock cycle
             NOP        ; 1-clock cycle
             BNE    LOOP2   ; 3-clock cycles/last cycle is 1
             DEY        ; 1

           BNE    LOOP1 ; 3-clock cycles/last cycle is 1
           PULY     ; 3-clock cycle
           PULX     ; 3-clock cycle
           RTS      ; 5-clock cycle

           ORG   $FFFE
            DC.W  Entry           ; Reset Vector

如果有人愿意帮我数学的话。我得到65,535 * 20的循环,但是对于6.25MHz的时钟,我最终得到.209秒作为延迟的最终量,但我知道它假设为1秒。我没看到什么?