Циклы для отображения на светодиодах микроконтроллера 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, что здесь не так.