68K上的按钮

时间:2017-01-26 18:25:04

标签: assembly 68000 easy68k

我想编写一个程序来从按钮读取值并在LED上显示该值。程序应该连续运行,当按钮改变时,显示会改变。我尝试了很多方法,但它没有显示任何东西  任何人都可以帮助我知道问题出在哪里。

LEDS       EQU     $E00010                 ;LEDS adress
BUTTON     EQU     $E00014                 ;BUTTON address
           ORG     $400                    ;start of program area

START
Loop        MOVE.B  #2,D0                             
            MOVE.B  BUTTON,D1               ;move the value of button to D1   
            MOVE.B  D2,LEDS 
            NOT.B   D1                      ;take NOT to flip the value in order to present it in LEDS                                    
           MOVE.B  D1,D2                    ;move the value to LEDS                        
           SUB.B    #2,D0                   ; if D0 =0 then loop again
            BEQ     Loop                     



          SIMHALT       
            END     START

1 个答案:

答案 0 :(得分:0)

此方面缺少一些东西。

  1. 按钮通常是单个位,而不是整个字节,因此应在按钮输入上应用某种形式的掩码。同样,设置LED通常涉及设置一位而不是字节,除非它是某种形式的多色LED。我假设您有8个按钮和8个相应的LED

  2. 您说明的代码将连续运行,因为在LOOP标签后将D0加载2,然后在循环结束时从D0中减去2(其值为2),然后循环运行等于零,即总是。如果您真的想要连续循环,则根本没有必要使用D0。

    LEDS    EQU     $E00010        ;LEDS address
    BUTTON  EQU     $E00014        ;BUTTON address
    
            ORG     $400           ;start of program area               
    START
    
    LOOP                        
            MOVE.B  BUTTON,D1      ; Read buttons
            NOT.B   D1             ; LEDs are inverse of button    
            MOVE.B  D1,LEDS        ; write to LEDs
            BRA.S   LOOP           ; do continously
    
            SIMHALT                 ; doesn't get here but still
            END     START