El problema con el programa ensamblador 1602, por qué no se muestra nada. Soy un novato, sospecho que cometí un error al escribir el programa.
;Control de cuatro teclas, P3.2 es la tecla de selección de tiempo, presione la primera vez para ajustar los segundos, presione la segunda vez para ajustar los minutos, presione la tercera vez para ajustar el reloj p>
;P3.3 es la tecla más 1
;P3.4 es la tecla menos 1
;P3.5 es la clave de confirmación
RS BIT P2.0
RW BIT P2.1
E BIT P2.2
LCD EQU P0
H_BIT EQU. 20H
M_BIT EQU 21H
S_BIT EQU 22H
HH EQU 23H
MM EQU 24H
SS EQU 25H
HH_BIT EQU 26H
MM_BIT EQU 27H
SS_BIT EQU 28H
;=========== =====
ORG 00H
AJMP PRINCIPAL
ORG 0BH
AJMP HORA0
ORG 30H
;========Programa principal=======================
PRINCIPAL:
MOV SP,#60H
MOV P1,#00H
MOV R5,#00H
MOV H_BIT,#00H p>
MOV M_BIT,#00H
MOV S_BIT,#00H
MOV HH_BIT,#00H
MOV MM_BIT,#00H
MOV SS_BIT, #00H
MOV HH,#00H
MOV MM,#00H
MOV SS,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0 p>
SETB TR0
MOV LCD,#01H
LCALL LCDWC
;=============== ====== =================
BUCLE:
LCALL EY
LCALL KEY
LCALL EYY
LJMP LOOP
;=========Mostrar subrutina============= ====
EY:
LCALL LOOP1
LCALL LCDSET
MOV DPTR,#TAB1
MOV A,H_BIT
VISUALIZACIÓN DE LLAMADA
MOV A,HH_BIT
VISUALIZACIÓN DE LLAMADA
MOV A,#58
MOV LCD, A
LCALL WRR
MOV A,M_BIT
LCALL DISP
MOV A,MM_BIT
DISP LLAMADA
MOV A,#58
<p> MOV LCD,A
LCALL WRR
MOV A,S_BIT
LCALL DISP
MOV A,SS_BIT
LCALL DISP
RET
;========Subrutina de conversión de código BCD================ p>
BUCLE1:
MOV A,SS
MOV B,#10
DIV AB
MOV S_BIT,A
MOV SS_BIT,B
MOV A,MM
MOV B,#10
DIV AB
MOV M_BIT,A
MOV MM_BIT,B
MOV A,HH
MOV B,#10
DIV AB
MOV H_BIT,A
MOV HH_BIT,B
RET
;==========Interrumpir subrutina== = ==============
HORA0:
PUSH ACC
PUSH PSW
MOV TH0 ,#3CH
MOV TL0,#0B0H
INC R5
CJNE R5,#20,LOOP2
MOV R5,# 00H
INC SS
MOV A,SS
CJNE A,#60,LOOP2
MOV SS,#00H
INC MM
MOV A,MM
CJNE A,#60,LOOP2
MOV MM,#00H
INC HH
MOV A,HH
CJNE A,#24,LOOP2
MOV HH,#00H
LOOP2: p >
POP PSW
POP ACC
RETI
;======Subrutina de detección de claves========= = ==========
CLAVE:
clr ea
JNB P3.2,SS_KEY
CLAVE1 :
setb ea
RET
;========Segunda subrutina de ajuste============ == ===
SS_KEY:
LCALL EY1
LCALL DIS1
JNB P3.2,SS_KEY
SSA:
LCALL EY1
JNB P3.3,S_ADDKEY
JNB P3.4,S_DECKEY
LCALL DIS1
JNB P3.2,MM_KEY
JNB P3.5,KEY3
LJMP SSA
CLAVE3:
LJMP LLAVE1
;==========Agregar 1 en segundos=============================
S_ADDKEY:
<p> lcall ey1
LCALL DIS1
JNB P3.3,S_ADDKEY
INC SS
MOV A,SS
CJNE A,#60,SS_KEY1
MOV SS,#00H
SS_KEY1:
LJMP SSA
;== =======Disminuir en 1 en segundos==========================
S_DECKEY:
lcall ey1
LCALL DIS1
JNB P3.4,S_DECKEY
MOV A,SS
CJNE A,# 00,SS_KEY2
MOV SS,#60
SS_KEY2:
DEC SS
LJMP SS_KEY1
; === ======Subrutina de ajuste de minutos================
MM_KEY:
LCALL EY2
LCALL DIS1
JNB P3.2,MM_KEY
MMA:
LCALL EY2
JNB P3.3,M_ADDKEY
JNB P3.4,M_DECKEY
LCALL DIS1
JNB P3.2,HH_KEY
JNB P3.5,KEY4
LJMP MMA
CLAVE4:
LLAVE1 LJMP
;=============Puntos más 1=== === ==============
M_ADDKEY:
lcall ey2
LCALL DIS1
JNB P3 .3,M_ADDKEY
INC MM
MOV A,MM
CJNE A,#60,MM_KEY1
MOV MM ,#00H
MM_KEY1:
LJMP MMA
;===========Menos 1======== == ==========
M_DECKEY:
lcall ey2
LCALL DIS1
JNB P3.4 ,M_DECKEY
MOV A,MM
CJNE A,#00,MM_KEY2
MOV MM,#60
MM_KEY2: p>
DEC MM
LJMP MM_KEY1
;========Subrutina de ajuste del reloj==============
HH_KEY:
LCALL EY3
LCALL DIS1
JNB P3.2,HH_KEY
HHA: p>
LCALL EY3
JNB P3.3,H_ADDKEY
JNB P3.4,H_DECKEY
LCALL DIS1
JNB P3.2,SSB
JNB P3.5,CLAVE5
LJMP HHA
CLAVE5:
LJMP CLAVE1
;==
========Agregar 1==================
H_ADDKEY:
Llamo a ey3
LCALL DIS1
JNB P3.3,H_ADDKEY
INC HH
MOV A,HH
CJNE A,# 24 ,HH_KEY1
MOV HH,#00H
HH_KEY1:
LJMP HHA
;========= = Tiempo menos 1=================
H_DECKEY:
lcall ey3
LCALL DIS1 p >
JNB P3.4,H_DECKEY
MOV A,HH
CJNE A,#00,HH_KEY2
MOV HH,#24 p >
HH_KEY2:
DEC HH
LJMP HH_KEY1
SSB:
LJMP SS_KEY
DISP :
MOVC A,@A+DPTR
MOV LCD,A
LCALL WRR
RET
;========================
LCDSET:
MOV LCD,#38H
LCALL LCDWC
MOV LCD,#06H
LCALL LCDWC
MOV LCD,#0CH
LCALL LCDWC p >
MOV LCD,#0C4H
LCALL LCDWC
RET
;================ = ============
LCDWC:
CLR RS
CLR RW
CLR E
CLR RW
CLR E
p>LCALL LCDBF
SETB E
RET
;=================== ==========
WRR:
SETB RS
CLR RW
CLR E
LCALL LCDBF
SETB E
RET
;===================== ============
LCDBF:
MOV LCD,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB LCD.7,LCDBF
RET p> p>
;================================
EYY:
MOV LCD,#80H
LCALL LCDWC
MOV DPTR,#TAB2
MOV R2,#16
MOV R1,#00H
EYY1:
MOV A,R1
VISUALIZACIÓN DE LLAMADA LC
INC R1
DJNZ R2,EYY1
RET
;====================== = =====
EY1:
MOV LCD,#0C4H
LCALL LCDWC
MOV R4,#02 p >
EY11:
LCALL HIND
DJNZ R4,EY11
LCALL LOOP1
MOV A,S_BIT
DISP LLAMADA
MOV A,SS_BIT
DISP LLAMADA
RET
;======== = =================
EY2:
MOV LCD,#0C4H
LCALL LCDWC p >
LCALL HIND
LCALL LOOP1
MOV A,M_BIT
LCALL DISP
MOV A,MM_BIT
LCALL DISP
LCALL HIND
RET
;==================== = ===
EY3:
MOV LCD,#0C4H
LCALL LCDWC
LCALL LOOP1
MOV A,H_BIT
VISUALIZACIÓN LLAMADA
MOV A,HH_BIT
VISUALIZACIÓN LLAMADA
MOV R4,#02
EY33:
LCALL HIND
DJNZ R4,EY33
RET
;========== = ===================
HIND:
MOV R3,#3
HIND1:
MOV A,#' '
MOV LCD,A
LCALL WRR
DJNZ R3,HIND1
RET
;==========Programa de retardo=============
DIS1:
MOV R6,#20
DJNZ R6,$
RET
;=======Tabla de códigos de segmentos======= ==============
TAB1:
DB 30H,31h,32H,33H,34H,35H,36H,37H,38H,39H
TAB2: BD "Diseño TanQiLin "
fin