高手帮忙解释下这个单片机的程序

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:05:42
ORG 0540h
HA1S:MOV A,#00H
HA1S1:JB P3.3,HA1S1
MOV R2,#20H
LCALL DELAY
JB P3.3,HA1S1
HA1S2:JNB P3.3,HA1S2
MOV R2,#20H
LCALL DELAY
JNB P3.3,HA1S2
INC A
......
这个程序的每一步帮忙解释下,为什么要这么设计?
(P3.3为输入口,DELAY为以R2为参数的延时子程序。)

ORG 0540h ;程序起始地址放在0540H
HA1S:MOV A,#00H ;累加器A清零
HA1S1:JB P3.3,HA1S1 ;如果P3.3为高电平,就一直在这里等待
MOV R2,#20H ;如果P3.3为低,就延时一段时间
LCALL DELAY ;延时是为了防抖
JB P3.3,HA1S1 ;如果P3.3为高电平,就返回到HA1S1
HA1S2:JNB P3.3,HA1S2 ;如果P3.3仍然是低电平,就一直等待,
;直到P3.3位高电平
MOV R2,#20H ;再次延时
LCALL DELAY ;再次防抖
JNB P3.3,HA1S2 ;
INC A ;如果P3.3还是高电平,则将累计器加1

这个程序的基本思想是,按下P3.3键,再释放P3.3键的时候将累加器A加1