📄 aaa.asm
字号:
;+++++++++++++++++++++
PRO_ERR:CLR EA
CLR RS0
CLR RS1
MOV DPTR,#PRO_ERR1
PUSH DPL
PUSH DPH
RETI
PRO_ERR1: CLR A
PUSH ACC
PUSH ACC
mov p1,#0ffh
mov p3,#0ffh
RETI
MIN_1: CLR BEEP ;open beep
SETB TR1
SETB ET1
SETB EA
clr r_err_f
bnnn: mov word_addr,#null3
mov device_addr,#e2r
acall e2_read
jb r_err_f,bnnn ;******************null3
;***
MOV A, P_left_1
JNZ MIN4
MOV P_left_1,#9 ;0-99循环
MOV A, P_left_L
CLR C
SUBB A,#1
MOV P_left_L, A
MOV A, P_left_H
SUBB A, #0
MOV P_left_H, A
MOV Device_addr, #E2W
MOV Word_addr,#E2data_L
MOV Byte_oped, P_left_L
NOP
NOP
ACALL E2_write
MOV Word_addr, #E2data_H
MOV Byte_oped, P_left_H
NOP
NOP
ACALL E2_write
MOV Word_addr, #E2data_1
MOV Byte_oped, P_left_1
NOP
NOP
ACALL E2_write
MIN_END: JNB IC_insert_F, MIN_5
SETB TR0
MIN_5: CLR DEC_1_F
SETB BEEP ;close beep
;***
mov device_addr,#e2r ;
mov word_addr,#null ;
acall e2_read ;
RET
MIN4: DEC A
MOV P_left_1, A
MOV Device_addr, #E2W
MOV Word_addr,#E2data_1
MOV Byte_oped, P_left_1
NOP
NOP
ACALL E2_write
;***
MOV A, P_left_H
JNZ MIN_END
MOV A, P_left_L
CJNE A,#0AH,MIN2
MIN2: JNC MIN_END
MOV A, P_left_1
CJNE A,#5AH,MIN3 ;9。9度报警
SETB Less_10_F
SJMP MIN_END
MIN3: MOV A,P_left_L
JNZ MIN_END
MOV A, P_left_1
JNZ MIN_END
SETB No_power_F
SJMP MIN_END
;**************
CLR_E2: SETB TR1
SETB ET1
SETB EA
MOV Device_addr, #E2W
MOV Word_addr, #E2data_L
MOV Byte_oped, #00H
NOP
NOP
ACALL E2_write
MOV Word_addr, #E2data_H
MOV Byte_oped, #00H
NOP
NOP
ACALL E2_write
MOV Word_addr, #E2data_1
MOV Byte_oped, #00H
NOP
NOP
ACALL E2_write
MOV A, #0H
MOV P_left_H, A
MOV P_left_L, A
MOV P_left_1, A
RET
;********
Disp: SETB TR1
SETB ET1
SETB EA
MOV R2, #04H
;***
MOV R0, #Disp_buf
;***
MOV SCON, #00H
Disp0: MOV A, @R0
ADD A, #0BH
MOVC A,@A+PC
MOV SBUF, A
JNB TI, $
CLR TI
INC R0
DJNZ R2, Disp0
;***
RET
DSCODE:DB 0C0H, 0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,98H,0FFH
DB 0FFH,00H, 40h, 79h, 024h
DB 030H, 019H,012H, 02H, 78H,0H,18H
;***
TURN_OFF: SETB TR1
SETB ET1
SETB EA
MOV R2, #04H
;***
MOV R0, #Disp_buf
;***
MOV A, #0AH
TURN0: MOV @R0, A
INC R0
DJNZ R2, TURN0
NOP
NOP
ACALL Disp
RET
;***
CON_TO_BCD: SETB TR1
SETB ET1
;SETB EA
SETB RS1
MOV R6, P_left_H
MOV R5, P_left_L
MOV R7, P_left_1
;***
MOV R0, #Disp_buf_end
; MOV A,R7
; ADD A,#09H
; CJNE A,#64H,CO1
;CO1: MOV R7,A
; JC CO3
; CLR C
; SUBB A,#64H
; MOV R7,A
; MOV A,R5
; ADD A,#01H
; MOV R5,A
; MOV A,R6
; ADDC A,#0H
; MOV R6,A
CO3: MOV R2,#0
C02: MOV A,R5
CLR C
SUBB A,#064H
MOV R4, A
MOV A,R6
SUBB A,#0H
JC C03
INC R2
MOV R6 ,A
MOV A, R4
MOV R5, A
SJMP C02
C03: MOV A, R2
MOV @R0, A
DEC R0
MOV R2,#0
C04: MOV A, R5
CLR C
SUBB A, #0AH
JC C05
MOV R5,A
INC R2
SJMP C04
C05: MOV A, R2
MOV @R0, A
DEC R0
MOV A, R5
ADD A, #0DH
MOV @R0, A
DEC R0
MOV A,R7
; MOV R2,#0H
; CLR C
;C06: SUBB A,#0AH
; JC C07
; INC R2
; SJMP C06
;C07: MOV A, R2
MOV @R0,A
CLR RS1
RET
;***
Ctr_beep: SETB TR1
SETB ET1
SETB EA
;***
CLR Beep
;***
MOV R4, #0A0H
CT1: MOV R3,#0FFH
CT0: MOV R2,#019H
CT2: JB No_power_F, CT3
SETB RELAY
SETB RED_LAMP
CT3: DJNZ R2,CT2
MOV DogReg,#DogINI
DJNZ R3,CT0
DJNZ R4, CT1
SETB Beep
;***
CLR Less_10_F
;***
RET
;***
Ctr_over_load: SETB TR1
SETB ET1
SETB EA
CLR Yellow_lamp
CLR Relay
CLR EX0
clr beep
MOV R5,#09H
OVER0: MOV R4,#0FFH
OVER1: MOV R3,#0FFH
OVER2: MOV R2,#040H
DJNZ R2, $
MOV DogReg,#DogINI
DJNZ R3, OVER2
DJNZ R4,OVER1
DJNZ R5,OVER0
SETB Relay
SETB Yellow_lamp
CLR Over_load_F
setb beep
SETB EX0
RET
E2_write: CLR EA
; SETB RS0
clr scl
nop
nop
nop
SETB sda
nop
nop
nop
SETB Scl
CLR W_ERR_F
NOP
NOP
NOP
NOP
CLR SDA
MOV A, Device_addr
MOV R2,#08
AA0: CLR SCL
RLC A
MOV SDA, C
NOP
SETB SCL
NOP
DJNZ R2, AA0
CLR SCL
NOP
nop
nop
MOV A, Word_addr
MOV R2, #08
SETB SCL
nop
nop
nop
MOV C, SDA
JC W_err
AA1: CLR SCL
RLC A
MOV SDA, C
NOP
SETB SCL
NOP
DJNZ R2, AA1
CLR SCL
NOP
MOV A, Byte_oped
MOV R2, #8
SETB SCL
MOV C, SDA
nop
nop
nop
JC W_err
AA2: CLR SCL
RLC A
MOV SDA, C
NOP
SETB SCL
NOP
DJNZ R2, AA2
CLR SCL
NOP
NOP
NOP
SETB SCL
nop
nop
nop
MOV C, SDA
JC W_end
CLR SCL
NOP
CLR SDA
NOP
SETB SCL
NOP
NOP
NOP
SETB SDA
MOV R3, #020H
AA3: MOV R2, #0FFH
DJNZ R2, $
DJNZ R3, AA3
W_end: ;CLR RS0
; SETB EA
RET
W_err:SETB W_ERR_F
SJMP W_end
;*******
E2_read: CLR EA
; SETB RS0
SETB SDA
SETB SCL
CLR R_ERR_F
NOP
NOP
NOP
NOP
CLR SDA
MOV A,Device_addr
MOV R2,#8
BB0: CLR SCL
RLC A
MOV SDA, C
NOP
SETB SCL
NOP
DJNZ R2, BB0
CLR SCL
MOV A, Word_addr
MOV R2,#8
SETB SCL
MOV C, SDA
JC R_err
BB1: CLR SCL
RLC A
MOV SDA, C
NOP
SETB SCL
NOP
DJNZ R2, BB1
CLR SCL
NOP
NOP
NOP
SETB SCL
MOV C, SDA
JC R_err
CLR SCL
NOP
SETB SDA
NOP
SETB SCL
NOP
MOV A,Device_addr
CLR SDA
ORL A,#01H
MOV R2,#8
BB2: CLR SCL
RLC A
MOV SDA , C
NOP
SETB SCL
NOP
DJNZ R2, BB2
CLR SCL
NOP
NOP
MOV R2,#8
SETB SCL
MOV C, SDA
JC R_err
BB3: CLR SCL
NOP
NOP
NOP
SETB SCL
MOV C, SDA
RLC A
DJNZ R2,BB3
CLR SCL
SETB SDA
MOV Byte_oped,A
NOP
SETB SCL
NOP
NOP
NOP
CLR SCL
NOP
CLR SDA
NOP
SETB SCL
NOP
NOP
SETB SDA
R_end: ;CLR RS0
; SETB EA
nop
nop
RET
R_err: SETB R_ERR_F
SJMP R_END
;***
READ_8BIT_S: MOV R7,#8
READ_L: CLR sclic
ACALL DELAY_10
SETB sclic
ACALL DELAY_10
MOV C,sdaic
RRC A
DJNZ R7,READ_L
ACALL DELAY_5
RET
WRITE_8BIT_S: MOV R7,#8
write_l: CLR sclic
ACALL DELAY_10
RRC A
MOV sdaic,C
ACALL DELAY_10
SETB sclic
ACALL DELAY_10
DJNZ R7,WRITE_L
RET
start_s: setb sclic
ACALL delay_10
clr sdaic
ACALL DELAY_10
RET
STOP_s: CLR sclic
ACALL DELAY_10
CLR sdaic
ACALL DELAY_10
SETB sclic
ACALL DELAY_10
SETB sdaic
RET
read_1byte: CLR EA
; SETB RS1
ACALL RESET_S
ACALL start_S
MOV A,#30H
ACALL WRITE_8bit_s
mov a,ic_add
ACALL write_8bit_s
mov a,#0ffh
ACALL write_8bit_s
ACALL stop_S
ACALL read_8bit_s
ACALL reset_S
; CLR RS1
ret
;***
RESET_S: CLR sclic
CLR SDAIC
ACALL DELAY_10
SETB RST
ACALL DELAY_10
SETB sdaic
ACALL delay_5
CLR RST
ACALL DELAY_5
;***
ret
;*******************************************
ACK_S: mov r7,#0 ; ;错误检测子程序
ack_s_l1: clr sclic
ACALL delay_10
setb sclic
ACALL delay_10
mov c,sdaic
jc ack_s_l2 ; ; sdaic出现高说明正确
djnz r7,ack_s_l1 ; ;连续256次为低反回错误
setb r_err_f
setb sdaic
ack_s_l2: ret
COMPER_PSC: CLR EA
; SETB RS1
CLR R_ERR_F
ACALL READ_4442_EC_S ;;密码比较子程序;占用R0,R1,R7,反回R_ERR_F********8
RRC A ; ;看是否有比较机会
;*** ;MOV R1,#6 ;修改,可能错误
JC comper_psc_l1
rrc a
jc comper_psc_l1
rrc a
jc comper_psc_l1
comper_psc_l2: setb R_err_f ; ;无比较机会或比较错反回失败
AJMP RE
comper_psc_l1: MOV R1,#6
ACALL write_4442_ec_s ; ;先写错误计数器
JB R_ERR_F,COMPER_PSC_L2
mov r1,#1
mov r0,psc1
ACALL comp_psc
inc r1
mov r0,psc2
ACALL comp_psc
inc r1
mov r0,psc3
ACALL comp_psc
mov r1,#7
ACALL write_4442_ec_s ; ;比较完后清错误计数器
JB R_ERR_F,COMPER_PSC_L2
ACALL read_4442_ec_s
cjne a,#07,compER_psc_l2 ; ;检查是否成功
RE: ;CLR RS1
;***
ret
write_4442_ec_s: ACALL start_s ; ;写EC子程序
mov a,#39h
ACALL write_8bit_s
mov a,#0
ACALL write_8bit_s
mov a,r1
ACALL write_8Bit_s
ACALL stop_s
ACALL ack_s
ret
read_4442_ec_s: ACALL reset_s ; ;读EC子程序
ACALL start_s
mov a,#31h
ACALL write_8bit_s
clr a
ACALL WRITE_8BIT_S
CLR A
ACALL WRITE_8BIT_S
ACALL STOP_S
ACALL READ_8BIT_S
ACALL RESET_S
RET
comp_psc: ACALL start_s ; ;比较3个密码的子程序
mov a,#33h
ACALL write_8bit_s
mov a,r1
ACALL write_8bit_s
mov a,r0
ACALL write_8bit_s
ACALL stop_s
ACALL ack_s
ret
; ;写一字节子程序,地址在IC—ADD,数据在DATAT,
write: CLR EA
; SETB RS1 ;反回R—ERR—F,用r7***************
ACALL start_s
mov a,#38h
ACALL write_8bit_s
mov a,ic_add
ACALL write_8bit_s
mov a,datat
ACALL write_8bit_s
ACALL stop_s
clr R_ERR_F
ACALL ack_s
jb r_err_f, write_1byte_L1
ACALL read_1byte ; ;再读一遍确认
cjne a,datat,write_1byte_l2
write_1byte_l1: ; CLR RS1
;***
ret
write_1byte_l2: setb r_err_f
AJMP WRITE_1BYTE_L1
DELAY_5: NOP
NOP
NOP
RET
DELAY_10: aCALL DELAY_5
aCALL DELAY_5
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -