哪位大虾帮忙看看这汇编程序 开头

来源:百度知道 编辑:UC知道 时间:2024/05/18 05:21:55
KEYBUF EQU 30H
STH0 EQU 31H
STL0 EQU 32H
TEMP EQU 33H
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV TMOD,#01H
SETB ET0
SETB EA
WAIT:
MOV P3,#0FFH
CLR P3.4
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
LCALL DELY10MS
MOV A,P3
ANL A,#0FH

程序注释大概就是这样,因为程序不完整,我只能讲这么多,模块化分我按空行分开了,如果还有什么程序看不懂可以找我,但是如果是编写或者修改汇编程序,不要找我,我不会写,只能看懂汇编

KEYBUF EQU 30H //让KEYBUF的值为30H,即出现KEYBUF的地方就可以用30H代替
STH0 EQU 31H //同上面
STL0 EQU 32H
TEMP EQU 33H

ORG 00H
LJMP START //程序开始位置,因为03H位置开始要存放中断指令,所以用一个跳转指令,如果不跳转直接写,那么程序就会覆盖03H位置及以后位置,致使中断错误

ORG 0BH
LJMP INT_T0 //计时器t0中断服务程序入口

START: MOV TMOD,#01H //使t0工作在计数模式
SETB ET0 //开t0中断
SETB EA //开所有中断

WAIT:
MOV P3,#0FFH
CLR P3.4
MOV A,P3
ANL A,#0FH //此时A为P3口低四位的值
XRL A,#0FH //此时A为P3口低四位的值按位取反得到的结果
JZ NOKEY1 //如果A为0,则没有按键按下,估计你的硬件是电子琴的按键接在P3口低四位,就按键处理程序,如果接按键的那些口都为高,则没有按键,这几句程序就是这个意思

LCALL DELY10MS //如果,A不为0,则表示此时又按键按下,调用延时程序进行消抖

MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1 //如果此时P3口低四位io口有为低的,则表示确实有按键按下,如果延时之后没有按键,则表示wait之后一段程序检测到的按键时干扰

MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK1 //这一句是说如果不是接在P3.0口的按键按下,就跳转到NK1,如果是,向下走
MOV K