发布网友 发布时间:2022-04-22 08:20
共4个回答
热心网友 时间:2023-09-22 08:03
ORG 30H
HA1S: MOV A,#00H ;累加器A清0
HA1S1: JB P3.5,HA1S1 ;等待按键
MOV R2,#10H ;R2=10H
LCALL DELAY ;延时
JB P3.5,HA1S1 ;按键有效继续,无效转HA1S1
HA1S2: JB P3.5,HA1S2 ;等待按键
MOV R2,#10H ;R2=10H
LCALL DELAY ;延时
JNB P3.5,HA1S2 ;按键有效转HA1S2,否则继续
INC A ;A加1
PUSH ACC ;A压栈
CPL A ;A取反
MOV P1,A ;A送P1
CLR P2.5 ;P2.5置低
SETB P2.5 ;P2.5置高
POP ACC ;A出栈
AJMP HA1S1 ;转HA1S1
DELAY:PUSH 02H ;R2压栈
DELAY1:PUSH 02H ;R2压栈
DELAY2:PUSH 02H ;R2压栈
DELAY3:DJNZ R2,DELAY3 ;R2减1直到0为止
POP 02H ;R2出栈
DJNZ R2,DELAY2 ;R2减1直到0为止
POP 02H ;R2出栈
DJNZ R2,DELAY1 ;R2减1直到0为止
POP 02H ;R2出栈
DJNZ R2,DELAY ;R2减1直到0为止
RET
END追问压栈是什么
追答压栈就是将一个寄存器的值压入堆栈
热心网友 时间:2023-09-22 08:04
ORG 30H //首地址
HA1S: MOV A,#00H //寄存器A清零,程序开头,主循环入口
HA1S1: JB P3.5,HA1S1 //循环等待P3.5为0
MOV R2,#10H //设置延时时间
LCALL DELAY //调用延时子程序
JB P3.5,HA1S1 //如果P3.5是1,回到HA1S1,重复前面的过程
HA1S2: JB P3.5,HA1S2 //循环等待P3.5为0
MOV R2,#10H //设置延时时间
LCALL DELAY //调用延时子程序
JNB P3.5,HA1S2 //如果P3.5是0,回到HA1S2,重复前面的过程
INC A //A增1 PUSH ACC //ACC进栈
CPL A //A补码(取反)
MOV P1,A //A输出P1
CLR P2.5 //清P2.5
SETB P2.5 //设置P2.5
POP ACC //ACC出栈
AJMP HA1S1 //跳转到HA1S1,循环
DELAY:PUSH 02H //延时子程序入口 ,循环入口
DELAY1:PUSH 02H //延时循环1入口
DELAY2:PUSH 02H //延时循环2入口
DELAY3:DJNZ R2,DELAY3 //延时循环3
POP 02H //出栈
DJNZ R2,DELAY2 //延时循环2结尾
POP 02H //出栈
DJNZ R2,DELAY1 //延时循环1结尾
POP 02H //出栈
DJNZ R2,DELAY //延时最外循环结尾
RET //延时子程序结束返回
END
热心网友 时间:2023-09-22 08:04
ORG 30H;定义代码段存放首地址
HA1S: MOV A,#00H; A=0;
HA1S1: JB P3.5,HA1S1;判断P3.5这个IO口是不是为0(估计接的是按键吧,就是看它有没有按下)
MOV R2,#10H;R2=10;延时附初值
LCALL DELAY;调用延时函数
JB P3.5,HA1S1;再判断一次按键状态(消抖作用)
HA1S2: JB P3.5,HA1S2;还是判断按键状态
MOV R2,#10H;同上
LCALL DELAY;同上
JNB P3.5,HA1S2;判断按键是否放开
INC A;A++; 现在因该是1了
PUSH ACC;A 入栈(想知道为什么一会ACC,一会A.自己去看他们的差别吧)
CPL A;A 按位取反 (这么做的原因,估计是你LED灯是拉低点亮的)
MOV P1,A;把A 给P1口
CLR P2.5;拉低 P2.5这个IO口 (如果灯是拉低点亮的 ,那就是点亮LED灯)
SETB P2.5;拉高 P2.5 (没延时,估计你看不出这个效果,基本就是一直灭)
POP ACC;刚才压入的是 1 现在重新取出 A 变回1
AJMP HA1S1;跳回去 完成一个循环
DELAY:PUSH 02H;这里开始都是延时函数
DELAY1:PUSH 02H
DELAY2:PUSH 02H
DELAY3:DJNZ R2,DELAY3
POP 02H
DJNZ R2,DELAY2
POP 02H
DJNZ R2,DELAY1
POP 02H
DJNZ R2,DELAY
RET
END
热心网友 时间:2023-09-22 08:05
P3.5是个开关,P1是8个LED,P2.5应该是个蜂鸣器。
该程序是:按一下开关,8个LED的数值就递增1,同时蜂鸣器响一下。