编写消抖程序,我的思路是这样子的:使用定时器0延时10ms
程序在初始化之后,执行的就是判断p1.0引脚电平状态的指令,如果p1,0是低电平,那么就启动定时器0,开始计时,那么此时主程序应该干什么呢?是原地等待还是继续检测p1.0的状态呢?
定时时间到之后,在中断服务程序中检测p1.0的状态,如果是低电平,则说明按键按下了,就执行相应的子程序,执行完子程序之后呢?程序是否返回了中断服务程序的位置,继续执行呢?
如果是高电平的话,就退出中断服务程序,那么退出之后怎么办?如何才能继续执行检测p1.0状态的指令?
以上就是我的思路以及相应的疑问,请给出解释;
实际上当我采用空循环进行延时的时候,是可以写出按键消抖的程序的,但是当我使用定时器进行定时的时候,就产生了很多的疑问,就如问题中所说的那样,这是我要解决的问题;
追答新手的问题,建议你画出逻辑图。别空想
实际上当我采用空循环进行延时的时候,是可以写出按键消抖的程序的,但是当我使用定时器进行定时的时候,就产生了很多的疑问,就如问题中所说的那样,这是我要解决的问题;
看一下我在下面的追问中贴出的程序,在MAIN中,检测到p1.0是低电平的时候,启动定时器,然后就进入了原地等待的指令;
定时时间到了之后,如果p1.0为低电平,就执行相应的程序,如果是高电平,就退出中断了,但是退出之后,执行的依然是原地等待命令,我希望是继续检测p1.0的状态;
使用定时器延时的时候,这个程序就存在这个问题,但是如果使用空循环延时的话,就能够写出来了,希望能针对我的程序给出几点建议;
检测到p1.0是低电平的时候,启动定时器,然后就进入了原地等待的指令;
----
老等那行?
还得循环的检测。
前面已经说了:
--P1.0,可以不检测了,因为已经启动了定时器。
--可以检测其它接口。
--如:串口、AD转换接口、温度检测、烟雾报警接口、红外输入接口...
上面说的,已经包括检测定时器是否停止。
当定时中断结束后,应有令 TR0 为零的语句。
当 TR0 为零后,就继续检测 P1.0。
说的也是;
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DELAY
MAIN:
SETB EA
SETB ET0
MOV TMOD,#00H
MOV TH0,#00H
MOV TL0,#00H
JB P1.0,$
SETB TR0
LJMP $
DELAY:
CLR TR0
MOV TH0,#00H
MOV TL0,#00H
JNB P1.0,LED
RETI
LED:
CPL P2.0
END
字数限制 追问中?