我需要一些关于学校的小程序的建议。如果你能指出我正确的方向,我会非常感激。我正在使用汇编语言的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
答案 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秒。我没看到什么?