代码之家  ›  专栏  ›  技术社区  ›  Mike -- No longer here

一个字节中带位选项标志的7位循环缓冲区

  •  1
  • Mike -- No longer here  · 技术社区  · 6 年前

    我希望有人能帮我。

    我为一个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等于keyscan例程不允许更改的自定义标志。

    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 回复  |  直到 6 年前
    推荐文章