2014-02-01 4 views
0

Мне нужен совет с небольшой программой для школы. Если бы вы могли просто указать мне в правильном направлении, я бы очень признателен. Я использую кодировку CodeWarrior на языке ассемблера для процессора TWR-S12G128. Моя цель - включить и выключить светодиоды с задержкой в ​​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 
+1

И какая линия линии 58? – paxdiablo

+0

PULY LOOP1; 3-тактный цикл – Bertswoot

ответ

0

Я не знаю много об архитектуре Freescale, но это очень необычно для любой архитектуры в объедините команду вытягивания с меткой.

bne $ff также необычен, так как делает обычно обозначают ярлык.

я думал бы, что эти две команды должны быть больше вдоль линий:

bne loop1 
puly 

Это делает больше смысла в том, что команда тянуть теряет метку и вложенные циклы правильно построены.

+0

Спасибо, что нашли время ответить. Я уже пробовал это, и он компилируется без ошибок, но он ничего не делает для моих светодиодов. – Bertswoot

+1

@Bertswoot, это будет проблема _different_, еще одна проблема с тем, как вы управляете портами, или с задержками. Лучше спросить, как отдельный вопрос. – paxdiablo

0

$ FF на линии BNE не является правильным. Я думаю, что это опечатка. Несколько часов назад я только что проработал с моим профессором. Вот код, который даст вам вторую задержку 1 и непрерывно цикл 4 светодиода включения и выключения:

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,25 МГц я получаю 0,209 секунды в качестве окончательной суммы для задержки, но я знаю, что это должно быть 1 сек. Что я не вижу?

+1

Если у вас есть другой вопрос, вы можете задать его, нажав [Задать вопрос] (http://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (http://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/ Что-репутация). – Makyen