Micro 89S52 duda de subrutinas

estoy haciendo un cubo de leds de 5x5x5 utilizo el micro atmel 89S52 y transistores 2N2222 para el control de los niveles como de las columnas, programo en ensamblador usando el keil uvision y el proteus 8
he checado en ambas simulaciones y no hay errores con la programación o conexiones
si puse resistencias pull up al puero 0,no sobrepase la memoria del micro, ni la distancia de llamada ya que utilice llamada larga LCALL
y lo cargo al micro con la interfas usb a traves del progisp.exe el cual tampoco me marca algun error
en la programacion formo varias figuras individuales pero el micro solo hace la primera y las demas no
no continua con el programa
alguna solucion para que aga todo el programa

MOV P0,#00H
MOV P1,#00H
MOV P2,#00H
MOV P3,#00H
SJMP INICIO
MOV SP,#0X07



INICIO: SETB P2.0
LCALL NIVEL1
CLR P2.0

SETB P2.1
LCALL NIVEL1
CLR P2.1
MOV A,#02H
LCALL TIEMPO
DESPLASA: MOV P2,A
LCALL TIEMPO
RL A
JNB P2.4,DESPLASA
SJMP GUSANO

GUSANO: SETB P2.4
MOV A,#20H
LCALL TIEMPO
PISTOLA: MOV P1,A
LCALL TIEMPO
RL A
JNB P1.7,PISTOLA
LCALL OBJETIVO
LCALL LIMPIA
LCALL FIGURA2
LCALL BASUCA
LCALL CUBO
CLR P1.7
LCALL MOVE
LCALL LIMPIA
SJMP GUSANITO

GUSANITO: MOV R2,#10H
SETB P1.2
LCALL TIEMPO
MOV A,#01H
LCALL TIEMPO
GUSANO1: MOV P1,A
LCALL TIEMPO
RL A
JNB P1.1,GUSANO1
CLR A
MOV A,#06H
LCALL TIEMPO
GUSANO2: MOV P1,A
LCALL TIEMPO
RL A
JNB P1.4,GUSANO2
CLR P1.2
MOV SP,#0X07






MOVE: MOV P2,R0
LCALL TIEMPO
MOV P3,#0C3H
LCALL TIEMPO
MOV P2,#03H
LCALL TIEMPO
MOV P3,#0C0H
LCALL TIEMPO
MOV P0,#18H
LCALL TIEMPO
MOV P2,R0

RET


CUBO: MOV R0,#00H
MOV R4,#03H
LCALL TIEMPO
MOV P1,R4
LCALL TIEMPO
MOV P0,R4
LCALL TIEMPO
MOV P2,#18H
LCALL TIEMPO
MOV P2,R0
LCALL TIEMPO
MOV P0,#06H
LCALL TIEMPO
MOV P3,#30H
LCALL TIEMPO
MOV P2,#0CH
LCALL TIEMPO
MOV P2,R0
LCALL TIEMPO
MOV P3,#61H
LCALL TIEMPO
MOV P1,#80H
LCALL TIEMPO
MOV P2,#06H
LCALL TIEMPO
MOV P2,R0
LCALL TIEMPO
MOV P3,#07H
LCALL TIEMPO
MOV P2,#83H
RET

BASUCA: SETB P3.5
LCALL TIEMPO
MOV A,#01H
LCALL TIEMPO
CIELO: MOV P2,A
LCALL TIEMPO
RL A
JNB P2.4,CIELO
LCALL TIEMPO
CLR P3.5
LCALL TIEMPO
SETB P1.0
LCALL TIEMPO
CIELO2: MOV P2,A
LCALL TIEMPO
RL A
JNB P2.4,CIELO2
LCALL TIEMPO
CLR P1.0
LCALL TIEMPO
SETB P1.4
LCALL TIEMPO
CIELO3: MOV P2,A
LCALL TIEMPO
RL A
JNB P2.4,CIELO3
LCALL TIEMPO
CLR P1.4
LCALL TIEMPO
SETB P3.2
MOV A,#01H
LCALL TIEMPO
CIELO4: MOV P2,A
LCALL TIEMPO
RL A
JNB P3.2,CIELO4
LCALL TIEMPO
CLR P3.2
LCALL TIEMPO
SETB P0.5
LCALL TIEMPO
CIELO5: MOV P2,A
LCALL TIEMPO
RL A
JNB P2.4,CIELO5
LCALL TIEMPO
CLR P0.5
CLR A
RET


FIGURA2: MOV P2,#1FH
LCALL TIEMPO
MOV P1,#01H
LCALL TIEMPO
JB P1.0,ESCUADRA1
LCALL TIEMPO
ESCUADRA1: INC P1
LCALL TIEMPO
MOV P0,#03H
LCALL TIEMPO
ESCUADRA2: INC P1
INC P0
LCALL TIEMPO
MOV P3,#38H
LCALL TIEMPO
ESCUADRA3: MOV P3,#79H
LCALL TIEMPO
MOV R5,#08H
MOV P0,R5
LCALL TIEMPO
MOV P1,#0E8H
LCALL TIEMPO
ESCUADRA4: SETB P1.4
LCALL TIEMPO
MOV P0,#30H
LCALL TIEMPO
MOV P3,#86H
LCALL TIEMPO
MOV P2,#0FFH
LCALL TIEMPO
LCALL LIMPIA
RET


OBJETIVO: CLR A
CLR P2.4
LCALL TIEMPO
MOV R1,#00H
MOV R2,#00H
MOV P2,R1
LCALL TIEMPO
MOV P0,R2
LCALL TIEMPO
SETB P2.4
LCALL TIEMPO
MOV A,#20H
CORRE1: MOV P1,A
LCALL TIEMPO
RL A
JNB P1.7,CORRE1
CLR A
MOV A,#01H
LCALL TIEMPO
CORRE: MOV P3,A
LCALL TIEMPO
RL A
JNB P3.2,CORRE
CLR A
MOV A,#80H
CORRE2: MOV P2,A
LCALL TIEMPO
SETB P2.4
LCALL TIEMPO
RR A
JNB P2.5,CORRE2
LCALL TIEMPO
SETB P0.5
LCALL TIEMPO
RET

NIVEL1: MOV R1,#1FH
MOV A,R1
LCALL TIEMPO
MOV P1,A
LCALL TIEMPO
CLR A
MOV A,R1
LCALL TIEMPO
MOV P0,A
LCALL TIEMPO
CLR A
MOV R2,#0F8H
MOV A,R2
MOV P3,A
LCALL TIEMPO
CLR A
RET

LIMPIA: MOV R1,#00H
MOV P0,R1
LCALL TIEMPO
MOV R2,#00H
MOV P1,R2
LCALL TIEMPO
MOV R3,#00H
MOV P2,R3
LCALL TIEMPO
MOV R4,#00H
MOV P3,R4
LCALL TIEMPO
RET

TIEMPO: MOV R7,#20
SASUKE: MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,SASUKE
RET ...
 
Deberías de aportar mas información, el programa comentado, el esquema que usas etc.
Que el ensamblador no de errores en absoluto significa que el código deba de funcionar.

¿Cual es la duda de las subrutinas?
 
Pues pon "trampas" para saber por donde va o conde se para.
Por ejemplo que envíe mensajes por el puerto serie en ciertos puntos del progrma.
 
Atrás
Arriba