📄 aaa.asm
字号:
Over_load_F BIT 00H ; ;常数定义 过载
Less_10_F BIT 01H ; 剩余少于10度
No_power_F BIT 02H ; ;停电
IC_insert_F BIT 03H ; ;IC卡查入
FLAG BIT 04H ;;转盘位置标识
;***
DEC_1_F BIT 06H ;;减0。01度
Less_load BIT 07H ;;轻载
R_ERR_F BIT 09H ;;读错
W_ERR_F BIT 0AH ;;写错
;***
Yellow_lamp BIT P1.1
Red_lamp BIT P1.3
Green_lamp BIT P1.4
Relay BIT P1.5
Beep BIT P1.0
;***
Pluse_in BIT P3.4
;***
SDA BIT P1.2
SCL BIT P3.7
sclic bit p1.7
sdaic bit p1.6
rst bit p3.3
;***
OnOff BIT P3.5
;***
over_count equ 32h ; ;过载次数计数器
TEE EQU 33H ;;过载计数分频器
ICW EQU 10100000B
ICR EQU 10100000B
time_ini equ 34h ;;过载常数存放处
P_left_L EQU 35H
P_left_H EQU 36H
Time_Reg EQU 37H ; ;脉冲间隔计数器
DogReg EQU 38H ; ;狗计数器
no_count equ 39h ;无黑条计数器
Device_addr EQU 3aH
Word_addr EQU 3bH
Byte_oped EQU 3cH
;***
buf1 equ 3dh ;读入电量10进制缓存
buf2 equ 3eh
buf3 equ 3fh
;***
Disp_buf EQU 040H
Disp_buf_end EQU 043H
;***
Data_L EQU 044H ; ;读入电量16进制缓存
Data_H EQU 045H
Count EQU 048H ;;;脉冲计数器
P_Left_1 EQU 049H
new_count equ 050h
;***
ic_add equ 04bh
datat equ 04ch
psc1 equ 04dh
psc2 equ 04eh
psc3 equ 04fh
;***
E2W EQU 10100010B
E2R EQU 10100010B
;***
E2data_L EQU 20H
E2data_H EQU 21H
E2data_1 EQU 22H
;***
T0_INI_L EQU 0H
T0_INI_H EQU 0FEH
T1_INI_L EQU 078H
T1_INI_H EQU 0ECH
;***
COU_INI EQU 72d ;6圈为0。01度,立既数定义
DogINI EQU 0FFH
null equ 0fh
null2 equ 0eh
null3 equ 0dh
;***
ORG 0000H
LJMP START
;***********
ORG 0003H
AJMP INT0x
;***
ORG 000BH
AJMP T0INT
;***
ORG 001BH
AJMP T1INT
;***********
START: mov r2,#0ffh
lop2: mov r3,#0ffh
lop1: nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz r3,lop1
djnz r2,lop2
;*********
mov p1,#0ffh
mov p3,#0ffh
CLR EA
NOP
NOP
setb red_lamp
setb yellow_lamp
setb green_lamp
setb relay
setb sda
setb scl
setb beep
setb onoff
mov sp,#50h
ACALL TURN_OFF
; acall con_to_bcd
; acall disp
ssss: clr r_err_f
mov device_addr,#e2r
mov word_addr,#null ;*****************null
nop
nop
acall e2_read
jb r_err_f,ssss
; mov a,byte_oped
; cjne a,#0ffh,ssss
ST_R0: CLR R_ERR_F
MOV Device_addr, #E2R
MOV Word_addr, #E2data_L
NOP
NOP
ACALL E2_read
JB R_ERR_F,ST_R0
MOV P_left_L, Byte_oped
;***
acall e2_read
mov a,byte_oped
cjne a,p_left_l,st_r0
;***********
DRT: MOV WORD_ADDR,#10h ;
ACALL E2_READ
MOV TIME_INI,BYTE_OPED ; ;TIME——INI为计数器
JB R_ERR_F,DRT
MOV TEE,#3 ;
ST_R1: MOV Word_addr, #E2data_H
NOP
NOP
ACALL E2_read
JB R_ERR_F,ST_R1
MOV P_left_H, Byte_oped
st_r2: MOV Word_addr, #E2data_1
NOP
NOP
ACALL E2_read
JB R_ERR_F, ST_R2
mov p_left_1,byte_oped
;***
mov word_addr,#null ;
nop ;
acall e2_read ;
;***
; MOV P_left_1, Byte_oped
; acall con_to_bcd
; acall disp
MOV A, P_left_H
JNZ ST0
MOV A, P_left_L
JNZ ST0
MOV A, P_left_1
JNZ ST0
SETB No_power_F
SJMP ST1
ST0: SETB RELAY
SETB Red_lamp
CLR No_power_F
MOV DATA_L,#0
MOV DATA_H,#0
;***
ST1: MOV TCON,#01000001B
MOV TMOD,#00010001B
;***
MOV TH0, #T0_INI_H
MOV TL0, #T0_INI_L
MOV TH1, #T1_INI_H
MOV TL1, #T1_INI_L
mov over_count,#0
MOV Count, #36d ;;0。01度电转的圈数
;***
MOV Time_Reg,time_ini ; ;限定功率计数器
MOV NEW_COUNT,#0
SETB Less_load
CLR W_ERR_F
CLR Less_10_F
CLR Over_load_F
CLR IC_insert_F
CLR FLAG
mov no_count,#0
; mov new_count,#0 ;;;;;;count of high
CLR DEC_1_F
SETB BEEP
SETB GREEN_LAMP
SETB YELLOW_LAMP
CLR PT0
clr PT1 ;**************
CLR PX0
SETB TR1
CLR TR0
;***
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB SDA
SETB SCL
;***
M1: SETB TR1
SETB ET1
SETB EA
nop
clr rs0
clr rs1
JNB Over_load_F, M2
NOP
NOP
ACALL Ctr_over_load
nop
M2: JNB No_power_F, M3
CLR Red_lamp
CLR Relay
;***
MOV Count, #COU_INI
nop
SJMP M33
M3: SETB RELAY
SETB RED_LAMP
nop
M33:JNB Less_10_F, M4
NOP
NOP
ACALL Ctr_beep
nop
M4: JNB DEC_1_F, M5
NOP
NOP
ACALL MIN_1
nop
M5: MOV DogReg, #DogINI
nop
SJMP M1
;+++++++++++++++
INT0x: CLR EA ; ;插卡中断子程序
PUSH ACC
PUSH PSW
CLR EX0
clr rs1 ;************
setb rs0 ;************
CLR Green_lamp
clr rst
CLR R_ERR_F
CLR W_ERR_F
clr sclic
setb sdaic
MOV R2,#050H
I0D1:MOV R3,#0FFH
DJNZ R3,$
DJNZ R2,I0D1
CLR OnOff
;***
neee: mov word_addr,#null2 ;***************null2
mov device_addr,#e2r
acall e2_read
jb r_err_f,neee
nop
mov r5,#3
mov r4,#11h
mov r1,#PSC1
MOV Device_addr, #E2R
new1: MOV Word_addr,r4 ; ;***********************8
nop
nop
ACALL E2_read
nop
nop
mov a,byte_oped
cjne a,#0ffh,nm
JB r_err_f,ddd
MOV @r1,BYTE_OPED
;***
inc r4
inc r1
DJNZ r5, new1
setb yellow_lamp
sjmp nmm
nm: clr yellow_lamp
nmm: ACALL comper_psc ; ;*******************
JB R_ERR_F,DDD
;***
acall con_to_bcd
;***
MOV R5,#40D
mov r0,#DISP_BUF_END
mov r1,#2
new6: mov a,@r0
orl a,#30h
;***
mov datAT,A
mov ic_add,R5
acall write
jb r_err_f,ddd
dec r0
inc R5
djnz R1,NEW6
;***
MOV A,@R0
SUBB A,#0DH
ORL A,#30H
;***
MOV DATAT,A
MOV IC_ADD,R5
ACALL WRITE ; ;;******************8888888
;***
I06: MOV ic_add, #50D
ACALL read_1byte
JB R_ERR_F, ttt
cjne a,#30h,new2
;***
mov r1,#3
mov r2,#37D
mov r0,#buf1
new3: mov ic_add,r2
acall read_1byte
ddd: jb r_err_f,ttt
ANL A,#0FH
mov @r0,a
inc r2
inc r0
djnz r1,new3
;*************
MOV A,BUF1
MOV B,#100D
MUL AB
MOV R0,B
mov r1,a
mov a,buf2
mov b,#10d
mul ab
add a,buf3
add a,r1
mov r1,a
mov a,r0
addc a,#0
mov data_h,a
mov data_l,r1
;***************
mov ic_add,#43D
acall read_1byte
jb r_err_f,ttt
ANL A,#0FH
mov b,a
MOV A,#168D ;10ms int1
DIV AB
MOV TIME_INI,A
mov byte_oped,a
mov word_addr,#10h
mov device_addr,#e2w
acall e2_write
jb w_err_f,ttt
;**************
mov r5,#3
mov ic_add,#37D
mov datat,#30h
GG: acall write
jb r_err_f,ttt
inc ic_add
djnz r5,GG
ajmp i03
;*****
new2: mov ic_add,#51D
acall read_1byte
cjne a,#31h,new4
mov r4, #3
mov r0,#52D
mov r1,#11h
new5: mov ic_add,r0
nop
acall read_1byte
nop
ttt: jb r_err_f,WWW
mov word_addr,r1
mov byte_opeD,a
nop
acall e2_write
nop
jb w_err_f,i05
inc r0
inc r1
djnz r4,new5
;*****************
new4: mov ic_add,#60D
acall read_1byte
CjnE a,#31H,WWW ;JUMP WWW (I03)
mov ic_add,#61D
ACALL READ_1BYTE
;***
cjne a,#0,rgf ;
acall clr_e2 ;
ajmp i05
;***
rgf: MOV R5,A
MOV B,P_LEFT_L
MUL AB
MOV R0,A
MOV R1,B
MOV A,R5
MOV B,P_LEFT_H
MUL AB
ADD A,R1
MOV p_LEFT_L,A
MOV A,B
ADDC A,#0
MOV P_LEFT_H,A
MOV A,R0
SUBB A,#05H
JC FGH
MOV A,p_LEFT_L
ADD A,#1
MOV P_LEFT_L,A
MOV A,p_LEFT_H
ADDC A,#0
MOV P_LEFT_H,A
AJMP FGH
;***
I03: MOV A, P_left_L
ADD A, Data_L
MOV P_left_L, A
MOV A, P_left_H
ADDC A, Data_H
MOV P_left_H, A
MOV A, Data_L
JZ I04
FGH: MOV Device_addr,#E2W
MOV Word_addr,#E2data_L
MOV Byte_oped, P_left_L
NOP
NOP
ACALL E2_write
MOV Device_addr, #E2W
MOV Word_addr,#E2data_H
MOV Byte_oped, P_left_H
NOP
NOP
ACALL E2_write
WWW: SJMP I05
I04: MOV A, Data_H
JZ I05
MOV Device_addr, #E2W
MOV Word_addr,#E2data_H
MOV Byte_oped, P_left_H
NOP
NOP
ACALL E2_write
I05: MOV A,P_left_H
JNZ I00
MOV A, P_left_L
JZ I10
CJNE A, #0AH, I09
I00:CLR No_Power_F
SETB Relay
SETB Red_lamp
;***
mov device_addr,#e2r ;
mov word_addr,#null ;
acall e2_read ;
;***
I01:MOV R2,#04H
I0D3:MOV R3,#0FFH
I0D2:MOV R4,#0FFH
DJNZ R4,$
DJNZ R3,I0D2
DJNZ R2,I0D3
SETB IC_insert_F
SETB TR0
SETB OnOff
NOP
NOP
;***
clr rs1
clr rs0
POP PSW
POP ACC
SETB EX0
SETB EA
;***
RETI
I09: JNC I00
SETB Less_10_F
SJMP I00
I10: MOV A, P_left_1
JNZ I01
SETB No_power_F
SJMP I01
;+++++++++++++++++++++
T0INT: CLR TR0 ; ;T0中断子程序
setb rs1 ;**********
clr rs0 ;***********
MOV TH0, #T0_INI_H
MOV TL0, #T0_INI_L
;***
JNB IC_insert_F, T01
NOP
NOP
ACALL CON_TO_BCD
NOP
NOP
ACALL Disp
SJMP T0_END
T01: SETB Green_lamp
CLR IE0
SETB EX0
NOP
NOP
setb yellow_lamp
ACALL TURN_OFF
; acall con_to_bcd
; acall disp
T0_END: NOP
NOP
clr rs1
clr rs0
RETI
T1INT: ;;TI中断子程序
PUSH PSW
PUSH ACC
;***
MOV TH1, #T1_INI_H
MOV TL1, #T1_INI_L
;***
MOV A,DogReg ;;清狗计数器
DEC A
MOV DogReg,A
JZ PRO_ERR
JNB P3.2, T11
JNB IC_insert_F, T11
CLR IC_insert_F
SETB TR0
;***
T11: JB Less_load, T12 ; ;轻载状态跳转
DEC TEE ; TEE进行3分频
MOV A,TEE ;
JNZ T12 ;
MOV TEE,#3 ;
MOV A, Time_Reg ;;间隔计数器减1
DEC A
MOV Time_Reg, A
JNZ T12
SETB Less_load
mov over_count,#0
mov time_reg,time_ini
T12: JNB PLUSE_IN, T16 ;
MOV no_count,#0 ; ,#0
jb flag,t1_end
;****
INC NEW_COUNT
MOV A,NEW_COUNT
CJNE A,#2,T1_END ;2T RED_LAMP
MOV NEW_COUNT,#0
setb flag
mov time_reg,time_ini ;
jb less_load,t14
;****
mov a,over_count
cjne a,#6,wei3 ;6t overload
MOV over_count,#0 ;,#0
SETB Over_load_F
ajmp t14
wei3: inc over_count
T14: CLR Less_load
MOV A, Count
DEC A
MOV Count, A
JNZ T1_END
SETB DEC_1_F
MOV Count, #COU_INI
T1_END:NOP
NOP
POP ACC
POP PSW
RETI
T16: MOV NEW_COUNT,#0 ; mov new_count,#0
mov a,no_count
cjne a,#50d,wei; 0.5 s no red setb flag
mov no_count,#0
clr flag
SJMP T1_END
wei: inc no_count
sjmp t1_end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -