📄 irq3.asm
字号:
.EXTERNAL _shuo,_password
//.EXTERNAL number1
.INCLUDE hardware.inc
.TEXT
.PUBLIC _IRQ3
_IRQ3:
INT OFF
PUSH R1,R5 TO [SP]
R1=0x0000
[0x06fb]=R1
R1=0x0100
TEST R1,[P_INT_Ctrl]
JNZ L_Irq3_Ext1
R1=0x0200
TEST R1,[P_INT_Ctrl]
JNZ L_Irq3_Ext2
L_Irq3_Key:
GOTO L_EXIT_INT;
L_Irq3_Ext2:
GOTO L_EXIT_INT;
//--------------------------------
L_Irq3_Ext1:
R1=[0x06fe] //计数
R1+=1
[0x06fe]=R1
CMP R1,0x0006
JZ lp0
L_EXIT_INT:
R1=0x0100
[P_INT_Clear]=R1
pop R1,R5 from [sp]
INT IRQ
RETI
//-----------------------------------
lp0: R1=[P_IOB_Buffer]
R1|=0x0040 //摘机
[P_IOB_Data]=R1
CALL delay
R1=0
push R1 to [sp]
CALL _shuo
pop R1 from [sp] //"请输入密码"
R1=0x0100
[P_INT_Clear]=R1
R2=0x0710
lp1: CALL sub1
[R2]=R1
R2+=1
R4=0x0001
[P_Watchdog_Clear]=R4
CMP R1,0x000c //判断是否为#号
JNZ lp1
//-----------------------------------
R1=0x0700
R2=0x0710
R4=[0x06fa]
lp2: R4-=1 //校验密码
JZ lp4
R3=R1
R1=0x0001
[P_Watchdog_Clear]=R1
R1=R3
R3=[R1++]
CMP R3,[R2++]
JZ lp2
//----------------------------------------------
lp3: R1=[P_IOB_Buffer]
R1&=0xffbf //挂机
[P_IOB_Data]=R1
GOTO L_EXIT_INT
kong1: GOTO KONG1
kong2: GOTO KONG2
//-------------------------
lp4: R1=13
push R1 to [sp]
CALL _shuo //控制电器请按1,修改密码请按2
pop R1 from [sp]
CALL sub1
CMP R1,0x0001
JZ KONG
CALL _password
GOTO SERVICE
KONG: R1=1
push R1 to [sp]
CALL _shuo
pop R1 from [sp] //"请选择电器"
CALL sub1
CMP R1,0x0001
JZ kong1
CMP R1,0x0002
JZ kong2
KONG3:R1=[P_IOB_Buffer] //控制家电3
TEST R1,0x0080
JZ GUAN3
R1=2
push R1 to [sp]
CALL _shuo
pop R1 from [sp] //"电器处于开启状态"
CALL delay
R1=5
push R1 to [sp]
CALL _shuo //"关闭请按2"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持请按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service3
R1=[P_IOB_Buffer]
R1&=0xff7f
[P_IOB_Data]=R1
R1=7
push R1 to [sp]
CALL _shuo //"电器已关闭"
pop R1 from [sp]
service3: GOTO SERVICE
GUAN3:
R1=3
push R1 to [sp]
CALL _shuo //"电器处于关闭状态"
pop R1 from [sp]
CALL delay
R1=4
push R1 to [sp]
CALL _shuo //"开启请按1"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持请按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service3
R1=[P_IOB_Buffer]
R1|=0x0080
[P_IOB_Data]=R1
R1=6
push R1 to [sp]
CALL _shuo //"电器已开启"
pop R1 from [sp]
GOTO SERVICE
KONG2:R1=[P_IOB_Buffer] //控制家电2
TEST R1,0x0020
JZ GUAN2
R1=2
push R1 to [sp]
CALL _shuo //"电器处于开启状态"
pop R1 from [sp]
CALL delay
R1=5
push R1 to [sp]
CALL _shuo //"关闭请按2"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持请按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service2
R1=[P_IOB_Buffer]
R1&=0xffdf
[P_IOB_Data]=R1
R1=7
push R1 to [sp]
CALL _shuo //"电器已关闭"
pop R1 from [sp]
service2: GOTO SERVICE
GUAN2:
R1=3
push R1 to [sp]
CALL _shuo //"电器处于关闭状态"
pop R1 from [sp]
CALL delay
R1=4
push R1 to [sp]
CALL _shuo //"开启请按1"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持请按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service2
R1=[P_IOB_Buffer]
R1|=0x0020
[P_IOB_Data]=R1
R1=6
push R1 to [sp]
CALL _shuo //"电器已开启"
pop R1 from [sp]
GOTO SERVICE
KONG1:R1=[P_IOB_Buffer]
TEST R1,0x0010
JZ GUAN1
R1=2
push R1 to [sp]
CALL _shuo //"电器处于开启状态"
pop R1 from [sp]
CALL delay
R1=5
push R1 to [sp]
CALL _shuo //"关闭请按2"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持请按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service1
R1=[P_IOB_Buffer]
R1&=0xffef
[P_IOB_Data]=R1
R1=7
push R1 to [sp]
CALL _shuo //"电器已关闭"
pop R1 from [sp]
service1: GOTO SERVICE
GUAN1:
R1=3
push R1 to [sp]
CALL _shuo //"电器处于关闭状态"
pop R1 from [sp]
CALL delay
R1=4
push R1 to [sp]
CALL _shuo //"开启请按1"
pop R1 from [sp]
CALL delay
R1=10
push R1 to [sp]
CALL _shuo //"保持按#号键"
pop R1 from [sp]
CALL sub1
CMP R1,0x000c
JZ service1
R1=[P_IOB_Buffer]
R1|=0x0010
[P_IOB_Data]=R1
R1=6
push R1 to [sp]
CALL _shuo //"电器已开启"
pop R1 from [sp]
GOTO SERVICE
SERVICE:
CALL delay
R1=9
push R1 to [sp]
CALL _shuo //"继续服务按*,退出按#"
pop R1 from [sp]
CALL sub1
CMP R1,0x000b
JZ lpp4
R1=8
push R1 to [sp]
CALL _shuo //"谢谢使用,再见"
pop R1 from [sp]
GOTO lp3
lpp4: GOTO lp4
lp6:
R1=[0x06fd]
R1+=1
[0x06fd]=R1
CMP R1,0x00ff
JNZ lp7
GOTO lp3
sub1:.PROC //读按键子程序
R1=0x00f0
[P_IOA_Dir]=R1
[P_IOA_Attrib]=R1
R1=0x004f
[P_IOA_Data]=R1
lp5:
R1=0x0000
[0x06fc]=R1
[0x06fd]=R1
lp8: R1=[0x06fc]
R1+=1
[0x06fc]=R1
CMP R1,0xffff
JZ lp6
lp7: R1=0x003f //读状态寄存器
[P_IOA_Data]=R1
R1=0x00bf
[P_IOA_Data]=R1
R1=[P_IOA_Data]
R3=0x003f
[P_IOA_Data]=R3
R4=0x0001
[P_Watchdog_Clear]=R4
R3=0x004f
[P_IOA_Data]=R3
TEST R1,0x0004
JZ lp8
R1=0x006f
[P_IOA_Data]=R1
R1=0x001f //读数据
[P_IOA_Data]=R1
R1=0x009f
[P_IOA_Data]=R1
R1=[P_IOA_Data]
R3=0x001f
[P_IOA_Data]=R3
R3=0x006f
[P_IOA_Data]=R3
R1&=0x000f
PUSH R1,R5 TO [SP]
CALL delay2
POP R1,R5 FROM [SP]
RETF
.ENDP
delay:.PROC
LOOP:
R1=400
L_LOOP1:
R2=1248
nop
nop
L_LOOP2:
R3=0x0001
[P_Watchdog_Clear]=R3
R2-=1
JNZ L_LOOP2
R1-=1
JNZ L_LOOP1
RETF
.ENDP
delay2:.PROC
loop:
R1=20
L_loop1:
R2=1248
nop
nop
L_loop2:
R3=0x0001
[P_Watchdog_Clear]=R3
R2-=1
JNZ L_loop2
R1-=1
JNZ L_loop1
RETF
.ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -