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

📄 aaa.asm

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