【问题标题】:Assembly increment counter装配增量计数器
【发布时间】:2017-10-29 19:11:02
【问题描述】:

我正在尝试制作一个从 0 开始以 1 递增的计数器,并使用 LED 显示 0-15 的二进制值,然后自行重置。我一直在 KEIL 软件的第 106、108、110 和 112 行遇到错误 A51。解决这些错误的任何帮助都会很棒。提前谢谢!

代码如下:

#include <reg932.inc> 

cseg at 0           ;tells assembler to place 1st instruction in address 0

    MOV 0xA4, #0    ; set port 2 to bi-directional
    MOV 0x91, # 0   ; set port 1 to bi-directional 
    MOV 0x84, #0    ; set port 0 to bi-directional
    clr c 
    mov A, # 00     ; set accumulator to 0



;lights in a circle
MOV R4, #01         ; set R4 to 0 for 1 loop
MOV R5, #01         ; set R5 to 0 for 1 loop
MOV R6, #15     ; set R6 to 0 for 15 loop


LightsLoop:         ; will light up leds in a circle one at a time

    CPL P2.4
    ACALL LightsDelay
    CPL p2.4
    CPL p0.5
    ACALL LightsDelay
    CPL p0.5
    CPL p2.7
    ACALL LightsDelay
    CPL p2.7
    CPL p0.4
    ACALL LightsDelay
    CPL p0.4
    CPL p2.6
    ACALL LightsDelay
    CPL p2.6
    CPL p0.7
    ACALL LightsDelay
    CPL p0.7
    CPL p2.5
    ACALL LightsDelay
    CPL p2.5
    CPL p0.6
    ACALL LightsDelay
    CPL p0.6
    CPL p2.4
    ACALL LightsDelay
    CPL p2.4

    DJNZ R4, LightsLoop


LightsOnLoop:       ; will light up leds in a circle with them staying on

    CPL p2.4
    ACALL LightsDelay
    CPL p0.5
    ACALL LightsDelay
    CPL p2.7
    ACALL LightsDelay
    CPL p0.4
    ACALL LightsDelay
    CPL p2.6
    ACALL LightsDelay
    CPL p0.7
    ACALL LightsDelay
    CPL p2.5
    ACALL LightsDelay
    CPL p0.6
    ACALL LightsDelay
    CPL p0.6
    ACALL LightsDelay
    CPL p2.4
    DJNZ R5, LightsOnLoop
    SJMP START

LightsDelay:
    MOV R7, #30
    LOOP7:
        MOV R0, #250
        LOOP0:
            MOV R1, #250
                LOOP1:
                    DJNZ R1, LOOP1
    DJNZ R7, LOOP7
    RET

START:                      ;*****find out where this belongs*****
    MOV A, #00010000B
    ACALL Loop

Loop:
    CJNE A, #00000000B ,Next        
    ;mAKE A SOUND
    MOV A, #00010000B
    SJMP Loop

Next:
    DEC A
        JB P0.3, 1        ;ERROR LINE
            ACALL AmberPin
        JB P0.2, 1        ;ERROR LINE
            ACALL GreenPin
        JB P0.1, 1        ;ERROR LINE
            ACALL YellowPin
        JB P0.0, 1        ;ERROR LINE
            ACALL RedPin
    SJMP Loop


RedPin:
    CPL P2.4
    ACALL LightsDelay
    CPL p2.4
    SJMP Loop

AmberPin:
    CPL P0.6
    ACALL LightsDelay
    CPL p0.6
    SJMP Loop

GreenPin:
    CPL P2.7
    ACALL LightsDelay
    CPL p2.7
    SJMP Loop

YellowPin:
    CPL P0.5
    ACALL LightsDelay
    CPL p0.5
    SJMP Loop
END

【问题讨论】:

  • 这是什么架构?
  • 我相信是 ARM。如果有帮助,它是一个 SIMON2 板
  • ARM 没有 CPL 或 ACALL 指令。也许是8051?我真的很好奇你是如何编写这个程序的,甚至不知道你编写它的架构。
  • 我为造成的混乱道歉。确实是 8051。

标签: assembly 8051


【解决方案1】:

您没有指定遇到什么错误。

JB x, 1 将跳转到命令的中间。无论如何,在这里指定标签更容易。

        JB P0.3, NotAmber  
            ACALL AmberPin
NotAmber:
        JB P0.2, NotGreen

等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多