You are on page 1of 14

;***************DECLARATION*****************

buzzer equ p2.7


SDA equ p1.0
SCL equ p1.1
wrong equ 00h
counter equ 0fh
start equ 03h
var equ 04h
temp equ 05h
RDCMD equ 10100000
WTCMD equ 10100001
end1 equ 06h
n2 equ 07h ;higher
n4 equ 08h ;lower
temp1 equ 09h ;dptr lower byte
temp2 equ 0ah ;dptr higher byte
r00 equ 0bh
digit4 equ 0ch
r44 equ 0dh
r66 equ 0eh
relay equ p2.6
;***********************************************
org 0000h
movc dptr,#msg1 ;wait signal
mov temp1,dpl
mov temp2,dph
acall lcdmodule
mov counter,#01h
mov a,#WTCMD
acall OUTS
mov a,#00h
acall OUT
acall CREAD
mov a,r1
cjne a,#0ffh,pass_ok
movc dptr,#msg2 ;enter admin ID
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#WTCMD
acall OUTS
mov a,counter
acall OUT
mov a,n2 ;higher byte in a(01 add)
acall OUT
acall STOP
acall delay
inc counter
mov a,#WTCMD
acall OUTS
mov a,counter
acall OUT
mov a,n4 ;lower byte in a(02 add)
acall OUT
inc counter
mov a,#00h
acall OUT
mov a,counter
acall OUT

movc dptr,#msg3 ;enter admin password


mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#WTCMD
acall OUTS
mov a,counter
acall OUT
mov a,n2 ;higher byte in a(01 add)
acall OUT
inc counter
mov a,n4 ;lower byte in a(02 add)
acall OUT
inc counter
mov a,#00h
acall OUT
mov a,counter
acall OUT
movc dptr,#msg4 ;password saved
mov temp1,dpl
mov temp2,dph
acall lcdmodule
pass_ok:
mov a,#RDCMD
acall OUTS
mov a,#00h
acall OUT
acall CREAD
mov a,r1
mov counter,a ;to store rom counter in counter
; transfer the data of eeprom to ram
movc dptr,#msg1 ;wait
mov temp1,dpl
mov temp2,dph
acall lcdmodule
mov start,#20h
mov var,#01h
mov temp,counter
loop1:
mov a,RDCMD
acall OUTS
mov a,var
acall CREAD
mov a,r1
mov @start,a
inc start
inc var
cjne var,counter,loop1

;check user ID
check0: mov wrong,#00h
check1: movc dptr,#msg5 ;enter user ID
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,n2
mov b,n4
mov var,#01h
mov start,#20h
mov counter,temp
;check user Id
check2: cjne a,@start,loop1
inc start
cjne b,@start,loop2
inc start
jmp password_check
loop1: inc start
loop2: inc start
inc start
inc start
inc var
inc var
inc var
inc var
cjne var,counter,check2
movc dptr,#msg6 ;wrong Id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
inc wrong
cjne wrong,#03h,check1
; alert

alert: setb buzzer


movc dptr,#msg7 ; you are debarred
mov temp1,dpl
mov temp2,dph
acall delay
ajmp check0

;PASSWORD CHECKING
password_check: mov wrong,#00h
mov temp,start
check3: mov start,temp
movc dptr,#msg8 ;enter Password
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,n2
mov b,n4
;check password
check4: cjne a,@start,loop3
inc start
cjne b,@start,loop3
jmp open
loop3:
movc dptr,#msg9 ;wrong password
mov temp1,dpl
mov temp2,dph
acall lcdmodule
inc wrong
cjne wrong,#03h,check3
; alert

alert: setb buzzer


movc dptr,#msg7 ; you are debarred
mov temp1,dpl
mov temp2,dph
acall delay
ajmp check0
open:
setb relay
movc dptr,#msg10 ;welcome
mov temp1,dpl
mov temp2,dph
ajmp check0;

delay1: mov dl1,#03h


djnz dl1,delay1
ret
;***********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF THE ACCUMULATOR
; to the EEPROM and includes START condition.Refer to the data sheets
; for discussion of START and STOP conditions.
;***********************************************************************
OUTS: MOV R2,#8 ;LOOP COUNT -- EQUAL TO BIT COUNT
SETB SDA ;INSURE DATA IS HI
SETB SCL ;INSURE CLOCK IS HI
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
CLR SDA ;START CONDITION -- DATA = 0
NOP
NOP ;NOTE 1
NOP
NOP ;NOTE 1
NOP
NOP
CLR SCL ;CLOCK = 0
OTSLP: RLC A ;SHIFT BIT
JNC BITLS
SETB SDA ;DATA = 1
JMP OTSL1 ;CONTINUE
BITLS: CLR SDA ;DATA = 0
OTSL1: SETB SCL ;CLOCK HI
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
CLR SCL ;CLOCK LOW
DJNZ R2,OTSLP ;DECREMENT COUNTER
SETB SDA ;TURN PIN INTO INPUT
NOP ;NOTE 1
SETB SCL ;CLOCK ACK
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
CLR SCL
JB SDA,OUTS
RET
;**********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF ACCUMLATOR TO EEPROM
; withOUT sending a START condition.
;**********************************************************************
OUT: MOV R2,#8 ;LOOP COUNT -- EQUAL TO BIT COUNT
OTLP: RLC A ;SHIFT BIT
JNC BITL
SETB SDA ;DATA = 1
JMP OTL1 ;CONTINUE
BITL: CLR SDA ;DATA = 0
OTL1: SETB SCL ;CLOCK HI
NOP ;NOTE 1
NOP
NOP ;NOTE 1
NOP
NOP
NOP
CLR SCL ;CLOCK LOW
DJNZ R2,OTLP ;DECREMENT COUNTER
SETB SDA ;TURN PIN INTO INPUT
NOP ;NOTE 1
SETB SCL ;CLOCK ACK
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
CLR SCL
jb SDA,OUT
RET
STOP: CLR SDA ;STOP CONDITION SET DATA LOW
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
SETB SCL ;SET CLOCK HI
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
SETB SDA ;SET DATA HIGH
RET

;*******************************************************************
; THIS ROUTINE READS A BYTE OF DATA FROM EEPROM
; From EEPROM current address pointer.
; Returns the data byte in R1
;*******************************************************************
CREAD: MOV A,#RDCMD ;LOAD READ COMMAND
CALL OUTS ;SEND IT
CALL IN ;READ DATA
MOV R1,A ;STORE DATA
CALL STOP ;SEND STOP CONDITION
RET
;**********************************************************************
; THIS ROUTINE READS IN A BYTE FROM THE EEPROM
; and stores it in the accumulator
;**********************************************************************
IN: MOV R2,#8 ;LOOP COUNT
SETB SDA ;SET DATA BIT HIGH FOR INPUT
INLP: CLR SCL ;CLOCK LOW
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
NOP
SETB SCL ;CLOCK HIGH
CLR C ;CLEAR CARRY
JNB SDA,INL1 ;JUMP IF DATA = 0
CPL C ;SET CARRY IF DATA = 1
INL1: RLC A ;ROTATE DATA INTO ACCUMULATOR
DJNZ R2,INLP ;DECREMENT COUNTER
CLR SCL ;CLOCK LOW
RET

;*************LCDMODULE@P1***********************************
lcdmodule: mov a,#01h
acall command
movc dptr,#mycom
clr a
cc: movc a,@a+dptr
acall command
acall delay1
jz send_data
inc dptr
sjmp cc
send_data:
dd: clr a
mov dpl,temp1
mov dph,temp2
dd1: movc a,@a+dptr
acall data_write
acall delay1
inc dptr
jz again
clr a
sjmp dd1
again: ret
command: mov p1,a
clr p2.0
clr p2.1
setb p2.2
acall delay1
clr p2.2
ret
data_write:
mov p1,a
setb p2.0
clr p2.1
setb p2.2
acall delay1
clr p2.2
ret
delay1: nop
nop
ret
;***************LCDEND******************************************

;**************KEYBOARD@P0************************************
keyboard: MOV p0,#0ffH
SETB p0.4
SETB p0.5
SETB p0.6
SETB p0.7
CLR p0.0
CLR p0.1
CLR p0.2
CLR p0.3
mov digit4,#01h
k1: cjne digit4,#05h,proceed
ljmp G4
proceed:
MOV p0,#0ffH
SETB p0.4
SETB p0.5
SETB p0.6
setb p0.7
CLR p0.0
CLR p0.1
CLR p0.2
CLR p0.3
mov a,p0
anl a,#11110000b
cjne a,#11110000b,k1
k2: MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,OVER
SJMP k2
OVER: MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,OVER1
SJMP k2
OVER1: MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.0
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row0
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.1
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row1
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.2
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row2
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.3
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row3
row0: movc dptr,#kcode0
sjmp find
row1: movc dptr,#kcode1
sjmp find
row2: movc dptr,#kcode2
sjmp find
row3: movc dptr,#kcode3
sjmp find
find: rlc a
jnc match
inc dptr
sjmp find
match: clr a
movc a,@a+dptr
mov r00,a
CJNE digit4,#01H,G1
INC digit4
mov r44,a
ljmp dd5
G1: CJNE digit4,#02H,G2
INC digit4
MOV a,r00
mov n2,a
ljmp dd5
G2: CJNE digit4,#03H,G3
INC digit4
MOV a,r00
mov r66,a
ljmp dd5
G3: CJNE digit4,#04H,G4
INC digit4
MOV a,r00
mov n4,a
ljmp dd5
G4:
MOV A,r44
subb a,#30h
SWAP A
mov r44,a
mov a,n2
subb a,#30h
mov n2,a
mov a,r44
ORL A,n2
MOV n2,A
;HIGHER DIGITSS IN n2
MOV A,r66
subb a,#30h
swap a
mov r66,a
mov a,n4
subb a,#30h
mov n4,a
mov a,r66
ORL A,n4
MOV n4,A ;LOWER DISITS IN n4
ret
;************************keyboared ends********************************
;************************digit display********************
dd5: clr a
mov a,#'*'
acall dat5
acall delay5
ljmp k1
dat5: mov p1,a
setb p2.0 ;data register is selected
clr p2.1
setb p2.2
acall delay5
clr p2.2
ret
delay5: mov r1,#03h
here5: djnz r1,here5
ret

;***************************************************
; ROUTine To Add User
;***************************************************
org 0003h
mov flag,#00h
init: movc dptr,#msg2 ;enter admin id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#RDCMD
acall OUTS
mov a,#01h
acall OUT
acall CREAD
cjne a,n2,return1
mov a,#02h
acall OUT
acall CREAD ;a=34
cjne a,n4,return1

movc dptr,#msg3 ;enter admin password


mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#RDCMD
acall OUTS
mov a,#03h
acall OUT
acall CREAD
cjne a,n2,return1
mov a,#04h
acall OUT
acall CREAD ;a=34
cjne a,n4,return1
;enter new id to add
mov a,#RDCMD
acall OUTS
mov a,#00h
acall OUT
acall CREAD
mov a,r1
mov counter,a
mov temp,counter
mov start,#20h
mov var,#01h
check11: movc dptr,#msg5 ;enter user ID
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,n2
mov b,n4
mov var,#01h
mov start,#20h
;check user Id
check22: cjne a,@start,loop11
inc start
inc var
cjne b,@start,loop22
inc start
inc var
jmp add
loop11: inc start
inc var
loop22: inc start
inc start
inc start
inc var
inc var
inc var
cjne var,counter,check22
movc dptr,#msg6 ;wrong Id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
reti
add: cjne flag,#01,next
ret
next: mov a,#WTCMD
acall OUTS
mov a,counter
acall OUT
mov a,n2
acall OUT
inc counter
mov a,counter
acall OUT
inc counter
mov a,n4
acall OUT
movc dptr,#msg8 ;enter password
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#WTCMD
acall OUTS
mov a,counter
acall OUT
mov a,n2
acall OUT
inc counter
mov a,counter
acall OUT
mov a,n4
acall OUT
inc counter
mov a,#00h
acall OUT
mov a,counter
acall OUT
movc dptr,#msg4 ;password saved
mov temp1,dpl
mov temp2,dph
acall lcdmodule
reti
return1:
movc dptr,#msg6 ;wrong id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
reti
;*********************************************************************
; DELETE ROUTINE
;*********************************************************************
org 0013h
mov flag,#01h
acall init
mov a,#WTCMD
acall OUTS
dec var
dec var
mov flag1,#00h
delloop: mov a,var
acall OUT
mov a,#ffh
acall OUT
inc var
inc flag1
cjne flag1,#04h,delloop
mov a,#f0h
acall OUT
dec var
dec var
dec var
dec var
mov a,var
acall OUT
mov flag,#00h
reti

org 0b00h
kcode3: db 'c','0','=','/'
kcode2: db '1','2','3','*'
kcode1: db '4','5','6','-'
kcode0: db '7','8','9','#'

org 0f50h
mycom : db 38h,0eh,01h,06h,0
org 0f20h
msg1: db "wait please...",0
org 0d90h
msg2: db "enter admin id",0
org 0d50h
msg3: db "enter admin password",0
org 0d20h
msg4: db "password saved",0
org 0c90h
msg5: db "enter user ID",0
org 0c60h
msg6: db "wrong ID",0
org 0c20h
msg7: db "you are debarred to enter",0
org 0c00h
msg8: db "enter password",0
org 0b90h
msg9: db"WRONG PASSWORD",0
org 0b50h
msg10: db "Welcome",0
end

You might also like