📄 daima7.asm
字号:
ORG 2000H
DCW T1INT ;定义T1中断入口
ORG 2080H
LD SP,#00C0H
DI
CLRB INT_PENDING
LDB INT_MASK,#01H ;开放T1溢出中断
LDB IOC0,#86H ;将HSI.1作为时钟源,复位T2
LOW: LDB AX,HSI_STATUS ;读HSI状态
LD BX,HSI_TIME ;读HSI时间
JBS AX,1,FIRHI ;判断是否有按键按下
SJMP LOW
FIRHI: LD REG1,TIMER1
CLR REG3
LDB IOC1,#04H
EI ;允许中断
JBC P0,7,COUNT
LOAGAI: LDB AX,HSI_STATUS
LD BX,HSI_TIME
JBC AX,1,LOAGAI ;判断有否抖动
LD REG4,REG3
LD REG2,TIMER1
LD REG5,TIMER2
INC REG5
SHR REG5,#01H
SJMP LOAGAI
T1INT: PUSHF ;T1溢出中断服务子程序
INC REG
POPF
RET
END
利用T1和T2记录开关按下的抖动时间和次数,用T1来记录开关抖动时间,第一次抖动时刻存放在REG1寄存器中,最后一次抖动时间存放在REG2寄存器中,T1溢出次数存放在REG4寄存器中,那么抖动时间就可以计算了。用T2来记录开关抖动次数,由于开关每次跳变都要使定时器T2计数,因此,开关的抖动次数应为T2的值再加1除2,所得到的结果存放在REG5中,开关接在HSI.1引脚。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -