我希望有人能帮我。
我为一个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
有没有一个简单的方法来解决这个问题,而不使用大量的内存或大量的时钟周期?