0

您好,我正在尝试用汇编语言进行循环,以使 HCS12 微控制器(Dragon12p)上的 LED 亮起。该值在 LED 上显示为其二进制等效值(例如,01 美元会点亮第一个 LED,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

但是,我的循环不起作用,印加只会将 a 增加一次,所以当我测试这段代码时,只有第一个 LED 亮起。想不通。

4

2 回答 2

0

是的。相信迈克尔。bgt 循环是错误的方式。此外,它可能不是您想要的。现在它以二进制显示(如果 bgt 循环已更正)从 0 到 99 的数字,并为每个数字暂停 64 毫秒。那是0.06秒。

于 2013-11-21T12:28:39.717 回答
0

令人惊讶的是教授们在网上发现了什么。

jsr Delay_ms 调用一个库函数,将 HCS12 uController 延迟累加器 A 中的值的倍数。是的,A 确实在 Delay_ms 中被破坏了。

除非 blt 用于检查 -1,否则应该使用无符号分支,这里不是这种情况。

于 2017-04-05T18:26:02.567 回答