0

我需要一些关于学校小程序的建议。如果您能指出我正确的方向,我将不胜感激。我正在为 TWR-S12G128 处理器模块使用汇编语言中的 CodeWarrior 编码。我的目标是让 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
4

2 回答 2

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 时钟,我最终得到 0.209 秒作为延迟的最终量,但我知道它应该是 1 秒。我没看到什么?

于 2015-01-27T21:26:20.387 回答
0

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

bne $ff也是不寻常的,因为通常会指定一个标签。

我会认为这两个指令应该更接近于:

bne loop1
puly

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

于 2014-02-01T21:15:57.720 回答