⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aaa.asm

📁 IC卡电表源码,已调试成功
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -