📄 1厂1主控.asm
字号:
JNB RI,$
CLR RI
CLR TI
MOV A,SBUF
MOV 52H,A
NOP
NOP
NOP
NOP
JNB RI,$
CLR RI
CLR TI
MOV A,SBUF
MOV 53H,A
NOP
NOP
NOP
NOP
MOV A,53H
CJNE A,#100,TRA1
LCALL RST
AJMP TRAX0
TRA1: MOV A,53H ;首先判断窗口号是否大于96
CLR C
SUBB A,#96
JNB 0D7H,TRAX0
MOV A,53H
CJNE A,#01,TRA2
AJMP TRA0
TRA2: MOV A,53H
CJNE A,#02,TRA3
AJMP TRA0
TRA3: MOV A,53H
CJNE A,#03,TRA4
AJMP TRA0
TRA4: MOV A,53H ;看窗口号除8和13外,是否能被5整除,(其所有窗口号都是5的倍数)
MOV B,#05
DIV AB
MOV A,B
CJNE A,#00H,TRAX0
MOV A,53H
CJNE A,#00H,TRA0
AJMP TRAX0
TRA0: LCALL WFTI
TRAX0: MOV 51H,#0
MOV 52H,#0
MOV 53H,#0
POP A
POP DPL
POP DPH
POP PSW
SETB ES
SETB EA
RETI
;复位设置,及00H发送信号
RST: MOV A,52H
CJNE A,#02H,JMYI
DEC 40H
MOV R0,40H
LCALL VIHY
MOV 33H,R1
MOV 32H,R2
LCALL DIS1
LCALL DEL100MS
LCALL DIS1
AJMP FURET
JMYI: MOV A,52H
CJNE A,#01H,FUWZ
INC 40H
MOV R0,40H
LCALL VIHY
MOV 33H,R1
MOV 32H,R2
LCALL DIS1
LCALL DEL100MS
LCALL DIS1
AJMP FURET
FUWZ: MOV A,52H
CJNE A,#03H,QRDY
CLR A
MOV R0,#5FH
LCALL RST_DOG
cLRROM1:MOV @R0,A
DJNZ R0,CLRROM1
CLR P1.1
CLR P1.2
CLR P1.3
CLR P1.4
CLR P1.5
SETB P1.0
SETB P3.3
LCALL QYLY
LCALL DUQU1
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DEL100MS
LCALL DIS1
LCALL DIS2
LCALL DIS3
AJMP FURET
QRDY:MOV A,52H
CJNE A,#04H,FURET
CLR F0
MOV R0,#40H
MOV R2,#1
MOV R3,#0
LCALL WRITEX
LCALL VIHY
LCALL BEEP
FURET:RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;发送问题,及除00号以外的发送来的数据,
WFTI: MOV A,52H
CJNE A,#01H,WFTI2
MOV 3EH,#2
LCALL ADD1
MOV R0,53H
LCALL VIHY
MOV 57H,R1
MOV 56H,R2
SETB 21H.1
MOV 52H,#0
MOV 47H,#1
MOV 5CH,#0
LCALL BEEP
WFTI2:MOV A,52H
CJNE A,#03H,WFTI3
MOV 3EH,#3
LCALL ADD1
MOV R0,53H
LCALL VIHY
MOV 55H,R1
MOV 54H,R2
SETB 21H.2
MOV 52H,#0
MOV 48H,#1
MOV 5DH,#0
LCALL BEEP
WFTI3:MOV A,52H
CJNE A,#02H,WFTI4
MOV 3EH,#4
LCALL ADD1
MOV R0,53H
LCALL VIHY
MOV 5BH,R1
MOV 5AH,R2
SETB 21H.3
MOV 52H,#0
MOV 49H,#1
MOV 5EH,#0
LCALL BEEP
WFTI4:MOV A,52H
CJNE A,#04H,WFTIRET
MOV 3EH,#5
LCALL ADD1
MOV R0,53H
LCALL VIHY
MOV 59H,R1
MOV 58H,R2
SETB 21H.4
MOV 52H,#0
MOV 4AH,#1
MOV 5FH,#0
LCALL BEEP
WFTIRET:RET
;定时器0中断,用于液晶显示
INNT0:PUSH PSW ;1秒中断
PUSH DPH
PUSH DPL
PUSH A
INC 3CH
MOV A,3CH
CJNE A,#130,KK
MOV 3CH,#0 ;在此记录1秒的时间,
SETB 20H.0
LCALL RST_DOG
KK: MOV TH0,#0E0H
MOV TL0,#0F0H ;;;;"OF0"
POP A
POP DPL
POP DPH
POP PSW
RETI
;把数据从x5045中读出,然后加1再写入
;入口3EH,x5045地址,3FH,缓冲区地址
;当从地址中读出的数据加1=100时,给予地址单元中的数据清0
ADD1:MOV R3,3EH
MOV R0,#3FH
CLR F0
MOV R2,#1
LCALL READX
INC 3FH
MOV A,3FH
CJNE A,#100,ADD2
MOV 3FH,#0
ADD2: MOV R0,#3FH
MOV R2,#1
MOV R3,3EH
CLR F0
LCALL WRITEX
RET
;把需要的数据从x5045中读出,并转换为显示主要的数据
DUQU1:CLR F0
MOV R0,#40H
MOV R2,#6
MOV R3,#0
LCALL READX
MOV 50H,40H
MOV R0,40H
LCALL VIHY
MOV 33H,R1
MOV 32H,R2
MOV R0,41H
LCALL VIHY
MOV 31H,R1
MOV 30H,R2
MOV R0,42H
LCALL VIHY
MOV 37H,R1
MOV 36H,R2
MOV R0,43H
LCALL VIHY
MOV 35H,R1
MOV 34H,R2
MOV R0,44H
LCALL VIHY
MOV 3BH,R1
MOV 3AH,R2
MOV R0,45H
LCALL VIHY
MOV 39H,R1
MOV 38H,R2
RET
;进制转换,将16进制转换为10进制,默认最大数据不超过99
;入口地址R0,出口R1,R2
VIHY: MOV A,R0
MOV B,#0AH
DIV AB
;把十位的显示数值放到R1内
MOV R1,A
;把个位的显示数值放到R2内
MOV R2,B
RET
;数据清零,及每次按00号按键清零按钮是的工作,
QYLY: MOV 40H,#10
MOV 41H,#0
MOV 42H,#0
MOV 43H,#0
MOV 44H,#0
MOV 45H,#0
MOV 4CH,#0
CLR F0
MOV R0,#40H
MOV R2,#6
MOV R3,#0
LCALL WRITEX
RET
;******延时100MS********
;^^^误差:相差177微秒^^^
DEL100MS: MOV R5,#0FEH
DL100MS0: MOV R6,#01EH
DL100MS1: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DL100MS1
DJNZ R5,DL100MS0
RET
RST_DOG:SETB CS ;复位看门狗定时器
NOP
CLR CS
NOP
SETB CS
RET
;X25045数据写入程序
;功能:将缓冲区数据写入指定地址开始的单元。
;入口:F0、R3是E2PROM单元地址最高位低八位;R0是缓冲区首地址;R2是缓冲区长度。
WRITEX:LCALL STAX ;;指令启动
MOV A,#06H ;;输出WREN
LCALL BYTE_OUT
LCALL STAX ;;下一指令启动
MOV A,#02H ;;输出WRITE
MOV C,F0 ;;插入单元地址最高位
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;,;输出单元地址低八位
LCALL BYTE_OUT
BYWR:MOV A,@R0 ;;从缓冲区取数输出
LCALL BYTE_OUT
INC R0 ;,;指针加1
DJNZ R2,BYWR; ;缓冲区未空则继续输出
LCALL ENDX ;,指令结束
LCALL WIP_CHK ;;等待WIP=0
RET
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -