Кнопка на 68K

Я хочу написать программу для считывания значения с кнопок и отображения этого значения на светодиодах. Программа должна работать непрерывно, и при смене кнопок изображение меняется. Я пробовал много способов, но это ничего не говорит о том, может ли кто-нибудь помочь мне понять, в чем проблема.

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 ответ

Несколько вещей не хватает из этого.

  1. Кнопка, как правило, представляет собой один бит, а не целый байт, поэтому к кнопке ввода должна быть применена некоторая форма маски. Точно так же установка светодиода обычно включает установку одного бита, а не байта, если это не какая-то разновидность многоцветного светодиода. Я предполагаю, что у вас есть 8 кнопок и 8 соответствующих светодиодов

  2. Код, который вы иллюстрировали, будет работать непрерывно, потому что вы загружаете D0 с 2 после метки LOOP, и в конце цикла вы вычитаете 2 из D0 (который имеет значение 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
    
Другие вопросы по тегам