📄 变比.asm
字号:
FUWEI EQU 11H
JISHU EQU 10H
ORG 0
JMP START
ORG 0BH
JMP INT_T0
ORG 30H
START:
MOV SP,#5FH ; 初始堆栈
MOV TMOD,#00100001B;计数器0工作方式1
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0 ;开T0中断
MOV SP,#5FH ; 初始堆栈
SETB FUWEI
MOV P1,#00100001B ;上电复位除P3.1均为低电平
MOV P3,#10111010B
/*************MAIN***********/
LOOP: CALL KEY ;调用键盘处理
JNB F0,KEYEXT;没有键按下退出
AJMP KEYCL;有键按下转键值处理
KEYEXT:
NOP
AJMP LOOP
/*****************KEYCL********************/
KEYCL: MOV A,B ;获取键值
JB ACC.7,KS2
JB ACC.1,KS1
RET
/*****************ERET************/
;复位键按下以后的操作
KS2:
JNB JISHU,FU_WEI
MOV P1,#00100001B ;上电复位除P3.1均为低电平
MOV P3,#10110010B
AJMP LOOP
FU_WEI:
SETB P1.5
CALL DELAY
SETB P1.5
LCALL DELAY
SETB P1.1
CALL DELAY
SETB P1.0
AJMP LOOP
/*********************************/
;开始键按下以后的操作
KS1:
JNB FUWEI,LOOP
CLR P1.0
MOV R3,#0
MOV R0,#0
MOV R1,#0
CLR JISHU
CLR FUWEI
SETB TR0;定时计数0器开始运行
JMP LOOP
;;;;;;;;检测P3.7有没有按下
/*********************KEY******************/
KEY: CLR F0
ORL P3,#10000010B
MOV A,P3
ORL A,#01111101B
CPL A
JZ KEYRET ;无键按下,返回
LCALL DELAY
ORL P3,#10000010B
MOV A,P3
ORL A,#01111101B
CPL A
JZ KEYRET ;无键按下,返回
MOV B,A
SETB F0
;没有键按下退出*****************
KEYRET:
NOP
RET
/*;以下是中断程序占用资源R3*/
INT_T0: ;定时器T0的中断响应程序
PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0B0H
INC R1
CJNE R1,#5,TUIC
MOV R1,#0
JB JISHU,I_N2
CLR P1.5
CPL P3.3 ;P3.3输出60次500毫秒高电平500毫秒第电平。
INC R0
CJNE R0,#8,I_N1
SETB P1.5
MOV R0,#0
I_N1:
INC R3
CJNE R3,#120,SMA
SETB JISHU
MOV R3,#0
/*计时60秒以后执行的操作*/
SETB P1.5
LCALL DELAY
SETB P1.1
SETB P3.2
LCALL DELAY
SETB P1.0
CLR P3.3
CALL DELAY1
CLR P3.2
I_N2: INC R3
CJNE R3,#116,TUIC
CLR TR0
SETB FUWEI
SETB P3.3
POP PSW
POP ACC
RETI
SMA: JB P1.1,TUIC
MOV A,P3 ;检测P3。4和P3.5的状态
JNB ACC.4,GN1 ;P3.4如果为0则转移
JNB ACC.5,TUIC ;如果P3.4为1P3.5为0则退出
SETB P1.4
SETB P1.7
SETB P3.0
CLR P1.3
CLR P1.2
TUIC: NOP
MOV TH0,#3CH
MOV TL0,#0B0H
POP PSW
POP ACC
RETI
/************P3.4为0时检测P3.5**************/
GN1: JNB ACC.5,GON1
/***************P3.4为0时P3.5为1时***********/
SETB P3.0
SETB P1.3
CLR P1.4
CLR P1.7
CLR P1.2
POP PSW
POP ACC
RETI
/***********P3.4 ;P3.5为0时*****************/
GON1: SETB P1.2
CLR P1.3
CLR P1.7
CLR P1.4
CLR P3.0
POP PSW
POP ACC
RETI
/////////////////////////////////////////////
DELAY: MOV R6,#85
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELAY1:
CALL DELAY
CALL DELAY
CALL DELAY
MOV R6,#250
D2: MOV R7,#250
D3: DJNZ R7,D3
DJNZ R6,D2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -