Циклы для отображения на светодиодах микроконтроллера HCS12

Здравствуйте, я пытаюсь сделать цикл на языке ассемблера, чтобы светодиоды загорелись на микроконтроллере HCS12 (Dragon12p). значение отображается на светодиодах в виде его двоичного эквивалента (например, $01 загорится первым светодиодом, 99 долларов - как 1 0 0 1 1 0 0 1, $23 - 0 0 1 0 0 0 1 1).

             org     $2000
STACK        equ     $2000
DELAY_VALUE  equ     64
ENDCOUNT     equ     $99
Start        lds     #STACK
             jsr     Config_SWs_and_LEDs 

Startover    ldaa    $00       ; load accumulator a with $00
Loop         staa    PORTB     ; send data to PORTB to display LED
             jsr     Delay_ms  ; delay by 64 ms
             inca              ; increment accumulator a by one value
             cmpa    #ENDCOUNT ; compare accumulator a to ENDCOUNT ($99)
             bgt     Loop      ; branch if accumulator a is less than $99
             bra     Startover ; start over at $00 if accumulator a reaches $99

             end

Однако мой цикл не работает, инка только увеличивает единицу на 1, поэтому, когда я проверяю этот код, загорается только первый светодиод. не могу понять это.

2 ответа

Ага. Верьте Майклу. Цикл bgt - неправильный путь. Также это может быть не то, что вы искали. Теперь он отображает (если исправлена ​​петля bgt) в двоичном формате числа от 0 до 99 с паузой 64 мс для каждого числа. Это 0,06 секунды.

Удивительно, что профессора находят онлайн.

jsr Delay_ms вызывает библиотечную функцию, которая задерживает uController HCS12 на кратное значение в Аккумуляторе А. И да, A действительно уничтожается в Delay_ms.

Беззнаковые ветки должны были использоваться, если только blt не предназначен для проверки -1, что здесь не так.

Другие вопросы по тегам