7-битный циклический буфер с битовой опцией - PullRequest
0 голосов
/ 31 января 2019

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

Я сделал функцию для микроконтроллера 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

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

...