7-битный циклический буфер с флагом битовых опций в байте

Я надеюсь, что кто-то может помочь мне в этом.

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

Код для хранения данных в буфере и проверки одного ключа находится здесь:

VALIDPRESS equ 0Fh   ;0Fh = detect as valid if key held somewhat
CYCLICBUFFER equ 10h ;10h is a randomly picked value as example

mov R0,#CYCLICBUFFER ;memory location for key buffer
mov C,KEY            ;KEY = GPIO pin button is attached to
mov A,@R0            ;A = data found at address CYCLICBUFFER
rlc A                ;Shift in new detected value
mov @R0,A            ;Store updated byte to address CYCLICBUFFER
cjne A,#VALIDPRESS,nokey ;See if buffer contains bits in right order
;If it does, the key is valid
nokey:

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

В левой колонке я покажу, как данные поступают в мой буфер при обнаружении нажатий клавиш. Я бы хотел, чтобы это произошло в правом столбце ниже.

Пусть x равно неизвестному значению, а a-m представляют новые значения сканирования кнопок с 1 по 13 соответственно, и пусть Z равняется пользовательскому флагу, который никогда не может быть изменен подпрограммой keycan.

Loop count,    Current data flow,    Desired data flow
    0          xxxxxxxx              Zxxxxxxx
    1          xxxxxxxa              Zxxxxxxa
    2          xxxxxxab              Zxxxxxab
    3          xxxxxabc              Zxxxxabc
    4          xxxxabcd              Zxxxabcd
    5          xxxabcde              Zxxabcde
    6          xxabcdef              Zxabcdef
    7          xabcdefg              Zabcdefg
    8          abcdefgh              Zbcdefgh
    9          bcdefghi              Zcdefghi
    10         cdefghij              Zdefghij
    11         defghijk              Zefghijk
    12         efghijkl              Zfghijkl
    13         fghijklm              Zghijklm

Есть ли простой способ решить эту проблему, не используя много памяти или много тактов?

0 ответов

Другие вопросы по тегам