汇编语言,判断连续两次按键
51单片机本来是用外部中断1,P3.3口按键,按一次就中断一次,数值加1,
现在是要按两次再加1,要怎么写啊,知道的大大们帮下忙,谢谢了
追问:MAIN: MOV R4,#00H
INT1: JB P3.3,RETI;有否按键
INC R4;+1
CJNE R4,#02H,RETI;没到两次中断返回
MOV R4,#00H;R4清零
;中断处理
我是这么写的,但是在CJNE R4,#02H,RETI这里,每次返回的时候R4就被清零了,怎么写成第一次中断返回R4的值是1呀
答案:不了解你现场情况,给个简单的例子:
KEYTEMP EQU 30H ;定义一个按键临时计数器,上电初始化时置零
...............;省略N字
;按键中断里面加入以下代码
INC KEYTEMP ;计数器+1
MOV A,KEYTEMP
JB ACC.1,KEYOK ;判断是否达到2次
RETI ;没有达到两次 中断返回
KEYOK: ;已经达到两次
MOV KEYTEMP,#00H ;计数器归零
; 这里开始按键处理代码,简单的说 就是进行一次2分频
其他:进中断后给记述器加1,然在主程序中将数值除2在去实现其它功能。
MAIN:
MOV A ,R0
MOV B,#2
DIV AB
.......
ajmp main
INT0:...
INC R1...
RETI 我实验过单按键的多功能操作:单按,长按,双按,不过是用C做的,用状态机做的,也相对比较复杂,不是一两个语句可以实现的,很久没用汇编了,手头也没有可以实验的板子,程序就不写了,大致写法可以说下:
10ms为检测间隔——检测到按钮按下——去抖,若连续两次检测到,则确认按钮被按下第一次——等待按钮释放——计时50毫秒(5间隔),在此时间内若又一次检测到按钮按下,视作抖动——等待释放,时间清0,重新计时——50毫秒后再检测到连续两次以上的按钮按下状态,则双按确认。
上一个:写了一个汇编语言的程序,要求输出16个Z,背景颜色为白,前景颜色用16种颜色显示,16个Z还要连成一条斜线
下一个:求:用单片机汇编语言编写一个步进电机复位、归零的程序。大侠们举个例子写就可以