
mov p0,#0ffh;给P0口传递数据FFH,1111 1111 即把P0口全部置1,用于扫描按键因为51单片机的IO只能检测低电平,所以要先将IO置为1,才能检测按键按下后对0导通
nop ;这个不用解释了吧,空 *** 作占用1个机器周期,用于简单的延时一下,以便让P0口电平
nop ;稳定
mov a,p0 ;将P0口的状态传递给A寄存器。这期间如果P0口有按键按下他的状态会变成0比
如P0.0的按键按下,那传给A的状态就是1111 1110,16进制的#0FEH
cpl a ;将A寄存器取反原来为1的现在为0 如上行所示就变成了0000 0001,16进制的#01H
anl a,#1fh;与 *** 作,用于保留A寄存器的低5位数据,防止别的信号影响到结果(同时也说 明按键接在P0口的低5位。手禅另外结果实际保存在了A寄存宴竖器中)
setbp2.4 ;在将P2.4置位,即让P2.4口输出1高电平
ret ;子程序返回
这段程序用于扫描P0的低5位的按键,哪个按下,最后变为那个位为1输出。结果保存在A寄存器中,另外A寄存器的高3位即位7,6,5这3位恒为0.因为 这句anl a,#1fh;已经把高位清零了。
至于P2.4口应该如楼上所说的用于控制244,373等锁存器用途。因为P0口的低5位应该同毕祥尘时还接又别的器件。用锁存器防止干扰
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)