Paso 5: programación
; P0.0 = RELÉ ADELANTE M1
; P0.1 = RELÉ INVERSA M1
; P0.2 = RELÉ ADELANTE M2
; P0.3 = RELÉ INVERSA M2
; P0.4 = RELÉ DELANTERO M3
; P0.5 = RELÉ INVERSA M3
; P0.6 = RELÉ ADELANTE M4
; P0.7 = RELÉ INVERSA M4
;
; P0.0 = D0 LCD
; P0.0 = D1 LCD
; P0.0 = LCD D2
; P0.0 = D3 LCD
; P0.0 = D4 LCD
; P0.0 = D5 LCD
; P0.0 = D6 DE LA PANTALLA LCD
; P0.0 = LCD D7
;
; P2.0 = VENTILADOR
; P2.1 =
; P2.2 = INTERRUPTOR DE LÍMITE 1
; P2.3 = DATOS RECIBIDOS
; P2.4 = LSB DE DATOS RECIBIDOS
; P2.5 = LSB DATOS RECIBIDOS + 1
; P2.6 = LSB DATOS RECIBIDOS + 2
; P2.7 = MSB DE DATOS RECIBIDOS
;
; P3.0 =
; P3.1 =
; P3.2 = RS DEL LCD
; P3.3 = LCD R/W
; P3.4 = LCD E
; P3.5 =
; P3.6 =
; P3.7 =
; Programa comienza aquí
ORG 0000H; INICIO
MOV P0, #00 H
MOV P2, #OFOH
SETB P2.3
MOV DPTR, #COMM1; REGISTRO DE COMANDO
UPI: CLR; PARA INICIALIZAR COMM1 CADENA
MOVC A,
INC DPTR
CJNE A, #' $', COMMAND1
AQUÍ:
MOV A, #80 H; DIRECCIÓN INICIAL DE LA LÍNEA 1
ALLEVAN COMANDO
MOV DPTR, #DATA 1; MOSTRAR LOS DATOS
LCALL LINE_DISPLAY_ROLL
HERE1:
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA2
LCALL LINE_DISPLAY
LCALL CHECK_INPUT
CJNE A, #00 H, NEXT1
MOV P0, H #05
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA3
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
COMMAND1: ALLEVAN COMANDO
AJMP UP1
NEXT1:
CJNE A, #01 H, NEXT2
MOV P0, #0AH
LCALL RETARDO
LCALL RETARDO
MOV A, # 0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA4
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT2:
CJNE A, #02 H, NEXT3
MOV P0, H #09
LCALL RETARDO
LCALL RETARDO
MOV A, #OCOH; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA5
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT3:
CJNE A, #03 H, NEXT4
MOV P0, H #06
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA6
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT4:
CJNE A, #04 H, NEXT5
MOV P0, #10 H
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA7
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT5:
CJNE A, #05 H, NEXT6
MOV P0, #20 H
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA8
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT6:
CJNE A, #06 H, NEXT7
MOV P0, #40 H
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA9
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT7:
CJNE A, #07 H, NEXT8
MOV P0, #80 H
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA10
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT8:
CJNE A, #08 H, NEXT9
SETB P2.0;(CONDITIONAL.. SI SE AÑADEN FUNCIONES EXTRA)
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA11
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXT9:
CJNE A, #09 H, NEXTUNA
P2.0 DE CLR; (CONDICIONAL... SI SE AÑADEN FUNCIONES EXTRA)
LCALL RETARDO
LCALL RETARDO
MOV A, #0C0H; DIRECCIÓN INICIAL DE LA LÍNEA 2
ALLEVAN COMANDO
MOV DPTR, #DATA12
LCALL LINE_DISPLAY
LCALL CHECK_KEY_RELEASE
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
NEXTUNA:
LJMP HERE1; LAZO AQUÍ DESPUÉS DE LA PANTALLA
LINE_DISPLAY:
CLR A
MOVC A,
INC DPTR
CJNE A, #' $', 1
RET
1: ALLEVAN PANTALLA
AJMP LINE_DISPLAY
LINE_DISPLAY_ROLL:
LCALL RETARDO
CLR A
MOVC A,
INC DPTR
CJNE A, #' $', DISPLAY11
RET
DISPLAY11: ALLEVAN PANTALLA
AJMP LINE_DISPLAY_ROLL
RETARDO: MOV R7, #0FFH
LOOP1: MOV R6, #0FFH
LAZO: DJNZ R6, LAZO
DJNZ R7, LOOP1
RET
;************************************************************************************************
; COMANDO DE LUZ ESTROBOSCÓPICA DE LCD
COMANDO: ALLEVAN LISTO; CUANDO LA PANTALLA NO ESTÁ OCUPADA
MOV P1, A; CARÁCTER DE COMANDO EN EL PUERTO P1
P3.2 CLR; COMANDO REGISTRO ELEGIDO
P3.3 CLR; ESCRIBA ENABLE
SETB P3.4; PERSONAJE DE LA ESTROBOSCÓPICO A MUESTRA
P3.4 CLR
RET; VOLVER
;************************************************************************************************
EXHIBICIÓN: ALLEVAN LISTO
MOV P1, A; TOMAR DATOS
SETB P3.2; PS = P3.2 = 1 PARA REGISTRO DE DATOS SELECCIONE
P3.3 CLR; ESCRIBA ENABLE
SETB P3.4; PERSONAJE DE LA ESTROBOSCÓPICO A MUESTRA
P3.4 CLR
RET; VOLVER
;************************************************************************************************
LISTO: CLR P3.4; PANTALLA DE LUZ ESTROBOSCÓPICA
MOV P1, #0FFH; CONFIGURAR P1 PARA LA ENTRADA DE
P3.2 CLR; REGISTRO DEL COMANDO SELECT
SETB P3.3; LEER PERMITE
ESPERA: CLR P3.4; PANTALLA DE LUZ ESTROBOSCÓPICA
SETB P3.4
P1.7 JB, ESPERE; LEER ESTADO BUSY (BF = 0)
P3.4 CLR; FINAL PANTALLA ESTROBOSCÓPICA.
RET; VOLVER
; ************************************************************************************************
COMM1: DB 3CH, 0EH, 06, 01H, '$'
DATA1: DB 'DE BEBIL-ROBOT, $'
DATA2: DB 'INSTRUCTABLES, $'
DATA3: DB 'ADELANTE $'
DATA4: DB 'HACIA ATRÁS $'
DATA5: DB 'LEFT $'
DATA6: DB 'RIGHT $'
DATA7: DB 'CÁMARA IZQUIERDA $'
DATA8: DB 'CÁMARA DERECHA $'
DATA9: DB 'CÁMARA HASTA $'
DATA10: DB 'CÁMARA ABAJO$ '
DATA11: DB 'OPCIONAL $'
DATA12: DB 'OPCIONAL $'
CHECK_INPUT:
MOV P2, #0F0H
SETB P2.3
P2.3 JB, READ_INPUT
NOP
SJMP CHECK_INPUT
READ_INPUT:
MOV P0, #00 H
LCALL RETARDO
MOV A, P2
ANL A, #0F0H
INTERCAMBIO A
RET
CHECK_KEY_RELEASE:
SETB P2.3
NOP
P2.3 JB, CHECK_KEY_RELEASE
SETB P2.3
MOV P0, #00 H
RET