This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Prepaid energy meter

Prepaid energy meter

RB0 EQU 000H
RB1 EQU 008H
SDA1 EQU P2.1
SCL1 EQU P2.0
WTCMD EQU 10100110B
RDCMD EQU 10100111B
WTCMD1 EQU 10100000B
RDCMD1 EQU 10100001B
RELAY EQU P2.7
BUZZER EQU P2.4
LCD_RS EQU P0.0
LCD_E EQU P0.1
LCD_DB4 EQU P0.2
LCD_DB5 EQU P0.3
LCD_DB6 EQU P0.4
LCD_DB7 EQU P0.5
OFFCUR EQU 0CH
BLINKCUR EQU 0DH
CLRDSP EQU 01H
ONDSP EQU 0CH
CONFIG EQU 28H
ENTRYMODE EQU 6
DSEG
ORG 0020H
FLAGS1: DS 1 BCDCARRY BIT FLAGS1.0 CARRY BIT FLAGS1.1 TBIT BIT FLAGS1.2 TBIT1 BIT FLAGS1.3
READING: DS 2
AMOUNT: DS 3
COUNTER: DS 2
TEMP: DS 1
PRICE: DS 2
BALANCE: DS 1
BUZZ_COUNT: DS 1
READ_BYTE: DS 3
F1: DS 1
F2: DS 1
F3: DS 1
STACK: DS 1
CSEG
ORG 00H
AJMP MAIN
ORG 0003H
PUSH PSW
PUSH ACC
MOV PSW,#RB1
CALL INC_COUNTER
POP ACC
POP PSW
RETI
MAIN: MOV SP,#50H MOV PSW,#RB0 MOV IE,#10000001B CALL RESETLCD4 CALL TITLE1 CLR BUZZER SETB RELAY CLR TBIT1 MOV BUZZ_COUNT,#00H CALL READ_COUNTER MOV A,COUNTER CJNE A,#0FFH,BYPASS CALL RESET_READING CALL RESET_AMT CALL RESET_COUNTER CALL RESET_PRICE CALL RESET_BALANCE CALL SYSTEM_RESET CALL DELAYS

BYPASS: CALL READ_COUNTER CALL READ_PRICE CALL READ_BALANCE
MAINS: CALL TITLE1 CALL DELAYY MOV A,BALANCE CJNE A,#00H,FG1 CLR RELAY CALL RECHARGE CALL DELAYY SETB BUZZER AJMP MAINS
FG1: SETB RELAY MOV A,BUZZ_COUNT CJNE A,#00H,AZX1 CLR BUZZER AJMP AZX2
AZX1: DEC BUZZ_COUNT
AZX2: MOV R1,#READING
BYTESRAM: MOV R4,#05H
EEPROM: MOV R6,#2 CALL READ_EEPROM CALL DISP_READING MOV TEMP,READING CALL SEP_DISP MOV TEMP,READING+1 CALL SEP_DISP CALL DELAYY MOV R1,#AMOUNT

MOV R4,#0AH

MOV R6,#3 CALL READ_EEPROM CALL AMT_READING MOV TEMP,AMOUNT CALL SEP_DISP MOV TEMP,AMOUNT+1 CALL SEP_DISP MOV R4,#'.' CALL WRLCDDATA CALL MDELAY MOV TEMP,AMOUNT+2 CALL SEP_DISP CALL DELAYY MOV R1,#COUNTER

MOV R4,#0EH

MOV R6,#2 CALL READ_EEPROM CALL COUNT_READING
; MOV TEMP,COUNTER
; CALL SEP_DISP MOV TEMP,COUNTER+1 CALL SEP_DISP CALL DELAYY MOV R1,#PRICE

MOV R4,#10H

MOV R6,#2 CALL READ_EEPROM CALL READ_PRICE CALL UNIT_PRICE MOV A,PRICE ADD A,#30h MOV R4,A CALL WRLCDDATA CALL MDELAY MOV R4,#'.' CALL WRLCDDATA CALL MDELAY MOV TEMP,PRICE+1 CALL SEP_DISP CALL DELAYY AJMP MAINS
INC_COUNTER: MOV A,COUNTER+1 ADD A,#01 DA A MOV COUNTER+1,A CJNE A,#01H,REPPA1 AJMP DCV2
REPPA1: CJNE A,#02H,REPPA2 AJMP DCV2
REPPA2: CJNE A,#03H,REPPA3 AJMP DCV2
REPPA3: CJNE A,#04H,REPPA4 AJMP DCV2
REPPA4: CJNE A,#05H,REPPA AJMP DCV2
REPPA: MOV COUNTER,#00H MOV COUNTER+1,#01H MOV R1,#COUNTER MOV R4,#0EH MOV R6,#2 CALL STORE_EEPROM CALL DELAY AJMP DVB1
DCV2: MOV R1,#COUNTER MOV R4,#0EH MOV R6,#2 CALL STORE_EEPROM CALL DELAY RET
DVB1: MOV A,READING+1 ADD A,#01H DA A MOV READING+1,A JNC DCS1 MOV A,READING ADD A,#01 DA A MOV READING,A
DCS1: MOV R1,#READING MOV R4,#05H MOV R6,#2 CALL STORE_EEPROM CALL DELAY MOV A,AMOUNT+2
TOTAL0: CLR C SUBB A,PRICE+1 CALL BCD_CONV MOV AMOUNT+2,A MOV A,AMOUNT+1
TOTAL1: SUBB A,PRICE CALL BCD_CONV MOV AMOUNT+1,A MOV A,AMOUNT
TOTAL2: SUBB A,#00H CALL BCD_CONV MOV AMOUNT,A MOV R1,#AMOUNT MOV R4,#0AH MOV R6,#3 CALL STORE_EEPROM CALL DELAY MOV A,AMOUNT+1 CJNE A,#40H,FCX1 MOV BUZZ_COUNT,#02H SETB BUZZER
FCX1: CJNE A,#38H,FAX1 MOV BUZZ_COUNT,#02H SETB BUZZER
FAX1: CJNE A,#41H,FAAX1 MOV BUZZ_COUNT,#02H SETB BUZZER
FAAX1: CJNE A,#20H,FCX2 MOV BUZZ_COUNT,#03H SETB BUZZER
FCX2: CJNE A,#19H,FAX2 MOV BUZZ_COUNT,#03H SETB BUZZER
FAX2: CJNE A,#21H,FAAX2 MOV BUZZ_COUNT,#03H SETB BUZZER
FAAX2: CJNE A,#10H,FCX3 MOV BUZZ_COUNT,#04H SETB BUZZER
FCX3: CJNE A,#11H,FCX4 MOV BUZZ_COUNT,#04H SETB BUZZER
FCX4: CJNE A,#09H,FAX4 MOV BUZZ_COUNT,#04H SETB BUZZER
FAX4: MOV A,AMOUNT+2

CLR C SUBB A,PRICE+1 CALL BCD_CONV MOV A,AMOUNT+1

SUBB A,PRICE MOV A,AMOUNT CLR TBIT JNC POP1 SETB TBIT
POP1: CJNE A,#00H,BACK JNB TBIT,BACK MOV BALANCE,#00H MOV R1,BALANCE MOV R4,#15H MOV R6,#1 CALL STORE_EEPROM CALL DELAY CLR RELAY SETB BUZZER
BACK: RET
BCD_CONV: CLR BCDCARRY CLR CARRY JNC LOP2 SETB CARRY
LOP2: JNB AC,LOP1 SETB BCDCARRY CLR C SUBB A,#06H
LOP1: JNB CARRY,LOP3 CLR C SUBB A,#60H
LOP3: CLR C JNB CARRY,LOP4 SETB C
LOP4: RET
READ_BALANCE: MOV R1,#BALANCE

MOV R4,#15H

MOV R6,#1 CALL READ_EEPROM RET
READ_COUNTER: MOV R1,#COUNTER

MOV R4,#0EH

MOV R6,#2 CALL READ_EEPROM RET
READ_PRICE: MOV R1,#PRICE

MOV R4,#10H

MOV R6,#2 CALL READ_EEPROM RET
SET_DISP1: MOV A,AMOUNT ANL A,#0F0H SWAP A CJNE A,#00H,DAP1 MOV A,AMOUNT ANL A,#0FH AJMP DAP3
DAP1: ADD A,#30H MOV R4,A CALL WRLCDDATA CALL MDELAY
DAP2: MOV A,AMOUNT ANL A,#0FH ADD A,#30H MOV R4,A CALL WRLCDDATA CALL MDELAY
DAP4: MOV A,AMOUNT+1 ANL A,#0F0H SWAP A ADD A,#30H MOV R4,A CALL WRLCDDATA CALL MDELAY