当前位置:编程学习 > 汇编语言 >>

汇编语言,判断连续两次按键

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还要连成一条斜线
下一个:求:用单片机汇编语言编写一个步进电机复位、归零的程序。大侠们举个例子写就可以

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,