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

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