I’m trying to implement an automated parking lot using an 8051. I’m using stepper motors to function as gates at the entrance and the exit of the parking lot that open whenever the IR sensors placed at the entrance/exit detects a vehicle passing by. I’m also keeping a count of the available slots in the lot using the sensors and I’m displaying it using two multiplexed seven segment displays. The code functions flawlessly within simulation tools like proteus but doesn’t work at all upon physical assembly.
I have physically assembled the 7 segment part of the program (the sub routine called disp) which worked properly. I don’t understand why it stops functioning once I integrate the codes for the stepper motors and the IR Sensors.
Here’s the code:
org 0000h
mov r6,#02h
mov r1,#0fh
mov r2,#0f0h
mov dptr,#table
;from maincode:
mov p2,#11H
clr p1.7
setb c
l1:jnb p1.1,ent
l2:jnb p1.2,exit
mov a,r6
acall disp
jnc l2
sjmp l1
ent:mov a,r6
dec a
mov r6,a
mov p2,#12H
l3:acall disp
jnb p1.1,l3
mov p2,#11H
mov a,r6
jz m5
sjmp l1
m5:clr c
setb p1.7
sjmp l2
exit:
clr p1.7
setb c
mov a,r6
inc a
mov r6,a
mov p2,#21H
l4:acall disp
jnb p1.2,l4
mov p2,#11H
sjmp l1
disp:mov a,r6
anl a,r1
movc a,@a+dptr
mov p3,a
setb p1.5
mov r5,#05h
mov th0,#00h
mov tl0,#00h
dj1:acall delay1
djnz r5,dj1
clr p1.5
mov th0,#00h
mov tl0,#00h
mov r5,#05h
dj4:acall delay1
djnz r5,dj4
mov a,r6
anl a,r2
swap a
movc a,@a+dptr
mov p3,a
setb p1.6
mov r5,#05h
mov th0,#00h
mov tl0,#00h
dj2:acall delay1
djnz r5,dj2
clr p1.6
mov th0,#00h
mov tl0,#00h
mov r5,#05h
dj3:acall delay1
djnz r5,dj3
ret
delay1:mov r7,#14h
m8:SETB TR0
AGAIN:JNB TF0,AGAIN
CLR TR0
CLR TF0
djnz r7,m8
RET
table:db 0c0h,0f9h,0a4h
end
And here’s 7 segment display part of the program that i tested separately:
org 0000h
mov r6,#02h
mov r1,#0fh
mov r2,#0f0h
mov dptr,#table
disp:mov a,r6
anl a,r1
movc a,@a+dptr
mov p3,a
setb p1.5
mov r5,#05h
mov th0,#00h
mov tl0,#00h
dj1:acall delay1
djnz r5,dj1
clr p1.5
mov th0,#00h
mov tl0,#00h
acall delay1
mov a,r6
anl a,r2
swap a
movc a,@a+dptr
mov p3,a
setb p1.6
mov r5,#05h
mov th0,#00h
mov tl0,#00h
dj2:acall delay1
djnz r5,dj2
clr p1.6
mov th0,#00h
mov tl0,#00h
acall delay1
sjmp disp
delay1:MOV R1,#00AH
R:SETB TR0
AGAIN:JNB TF0,AGAIN
CLR TR0
CLR TF0
DJNZ R1,R
RET
table:db 0c0h,0f9h,0a4h
end
```