📄 servosmanual(1).asm
字号:
FOTO1 EQU P2.0
FOTO2 EQU P2.1
FOTO3 EQU P2.2
FOTO4 EQU P2.3
PULSO EQU P3.0
PULSO1 EQU P3.1
DATOS EQU P2
RS EQU P3.4
E EQU P3.5
RW EQU P3.6
CONT1 EQU 18H
CONT2 EQU 19H
ORG 0
JMP MAIN
ORG 03H
JMP SERVO1
ORG 0BH
JMP PWM
ORG 13H
JMP SERVO2
MAIN: MOV SP, #70H
MOV IE, #10000111B
MOV TMOD, #00010001B
SETB IT0
SETB IT1
MOV TH0, #0FFH
MOV TL0, #9CH
SETB E
MOV TH1, #0C5h ;Constante para 15ms
MOV TL1, #68h
CLR RW ;RW = 0
CLR RS ;RS = 0
SETB TR1
JNB TF1, $ ;Esperar 15ms
CLR TR1
SETB E
MOV P0, #00111000b ;Palabra de control 1
CLR E
NOP
NOP ;esperar mas de 4.7u
NOP
SETB E
MOV P0, #00110000b ;Palabra de control 2
CLR E
SETB TR1
JNB TF1, $ ;esperar 15ms
CLR TR1
SETB E
MOV P0, #00110000b ;Palabra de control 3
CLR E
NOP
NOP
SETB E
MOV P0, #00111000B ;palabra con N y F
CLR E
NOP
NOP
SETB E
MOV P0, #00001100B ;Enciende LCD
CLR E
NOP
NOP
SETB E
MOV P0, #00000001 ;Limpiar Pantalla
CLR E
NOP
NOP
SETB E
MOV P0, #00000110b ;Modo de Entrada
CLR E
TRABAJA: SETB RS ;RS = 1
SETB E
MOV P0,#' '
CALL ESC
SETB RS
MOV P0,#'M'
CALL ESC
SETB RS
MOV P0,#'O'
CALL ESC
SETB RS
MOV P0,#'D'
CALL ESC
SETB RS
MOV P0,#'E'
CALL ESC
SETB RS
MOV P0,#' '
CALL ESC
SETB RS
MOV P0,#'O'
CALL ESC
SETB RS
MOV P0,#'P'
CALL ESC
SETB RS
MOV P0,#'E'
CALL ESC
SETB RS
MOV P0,#'R'
CALL ESC
SETB RS
MOV P0,#'A'
CALL ESC
SETB RS
MOV P0,#'T'
CALL ESC
SETB RS
MOV P0,#'I'
CALL ESC
SETB RS
MOV P0,#'O'
CALL ESC
SETB RS
MOV P0,#'N'
CALL ESC
SETB RS
MOV P0,#'?'
CALL ESC
SETB RS
MOV P0,#'?'
CALL ESC
NOP
NOP
JMP ACA
ESC: CLR E
NOP
NOP
SETB E
MOV R3,#30
DJNZ R3,$
RET
ACA: MOV R4, #50
MOV R6, #23
MOV 21H, #23
MOV 25H, #23
CLR 20H.6
CLR 20H.0
SETB TR0
SETB PULSO
JNB 20H.0, $
SETB PULSO1
MOV R6, #23
MOV 23H, #23
SETB TR0
SETB 20H.6
JB 20H.6, $
JMP AUTO
OTRA: ; FALTA PONER EN EL DISPLAY AUTOMATICO
CALL TECLADO
CJNE R7, #12, ACA1
JMP MANUAL
ACA1: SETB 20H.1
CLR 20H.6
MOV A, DATOS
ANL A, #0FH
MOV 22H, A
CJNE A, #15, VAS
JMP OTRA
VAS: ANL A, #03H
CJNE A, #3, MOVH
REV: MOV A, 22H
ANL A, #0CH
MOV 25H, A
CJNE A, #12, MOVV
JMP OTRA
MOVH: SETB IE0
CLR 20H.1
JNB 20H.1 , $
JMP REV
MOVV: SETB IE1
SETB 20H.6
JB 20H.6 , $
JMP OTRA
AUTO:
CALL TECLADO
CJNE R7, #11, MANUAL
JMP OTRA
MANUAL: CJNE R7, #12, AUTO
;FALTA PONER EN EL DIPLAY MANUAL
VERTI: CALL TECLADO
CJNE R7, #11, VASACA
YEAH: JMP OTRA
VASACA: CJNE R7, #13, HORIZON; PREGUNTAMO SI NOS MOVEMOS VERTICALMENTE PPRIMERO
DIGV: CALL TECLADO
CJNE R7, #11, VASACA1
JMP OTRA
VASACA1: CJNE R7, #14, VASACA2
JMP DIGH
VASACA2: MOV A, R7
CLR C
SUBB A, #0AH
JNC DIGV
MOV 16H, R7
DAS: CALL TECLADO
CJNE R7, #11, VASACA3
JMP OTRA
VASACA3: CJNE R7, #14, VASACA4
JMP DIGH
VASACA4: CJNE R7, #13, VASACA23
JMP DIGV
VASACA23: CJNE R7, #15, SADA
JMP CORRECTOV
SADA: JMP DAS
ALLA: JMP VERTI
HORIZON: CJNE R7, #11, VASACA5
JMP YEAH
VASACA5: CJNE R7, #14, VERTI; PREGUNTAMOS SI NOS MOVEMOS HORIZONTALMETE PRIMERO
DIGH: CALL TECLADO
CJNE R7, #11, VASACA6
JMP YEAH
VASACA6: CJNE R7, #13, VASACA7
JMP DIGV
VASACA7: MOV A, R7
CLR C
SUBB A, #0AH
JNC DIGH
MOV 17H, R7
VAS34: CALL TECLADO
CJNE R7, #11, VASACA8
JMP YEAH
VASACA8: CJNE R7, #13, VASACA9
JMP DIGV
VASACA9: CJNE R7, #14, VASACA11
JMP DIGH
VASACA11: CJNE R7, #15, VASACA10
JMP CORRECTOH
VASACA10: JMP VAS34
CORRECTOV: CLR C
MOV A, #23
SUBB A, 16H
MOV R6, A
MOV 25H, R6
SETB TR0
SETB 20H.6
JB 20H.6 , $
JMP ALLA
CORRECTOH: MOV B, #2
MOV A, 17H
MUL AB
ADD A, #3
MOV R6, A
MOV 25H, R6
SETB TR0
CLR 20H.1
JNB 20H.1 , $
JMP ALLA
Teclado: Mov R5,#4 ;contador de filas
Mov R2,#0fEh ;Codigo de barrido de filas
Mov R7,#03 ;Valor mayor de la 1ra fila
otra1: Mov P1,R2 ; sacar codigo
Mov A,P1 ; Leer columnas
ORL A,#0fh
CJNE A, #0ffh,ver_tecla ;Si hubo tecla oprimida
Mov A, R2 ;No hubo tecla oprimida
RL A ;rotar codigo para siguiente fila
Mov R2,A
Mov A, R7
ADD A,#4 ; valor mayor de la fila siguiente
Mov R7,A
DJNZ R5, otra1 ; repetir para fila siguiente
Mov R7, #0ffh ; Devuelve FFh si no hay tecla oprimida
RET
ver_tecla:Call RETARDO10 ;eliminar rebote
Mov A, P1
ORL A,#0Fh
CJNE A, #0ffh, sigue ;la tecla sigue oprimida
Mov R7,#0ffh ; no hay tecla oprimida
RET
sigue: RLC A ;Encontrar valor de la tecla oprimida
JNC soltar
DEC R7
JMP sigue
soltar: Mov A, P1 ; Esperar que se suelte la tecla
ORL A,#0fh
CJNE A,#0ffh, soltar
Call RETARDO10
RET
RETARDO10: MOV CONT1, #25;retardo 10ms
CIC1: MOV CONT2, #200
CIC2: DJNZ CONT2, CIC2
DJNZ CONT1, CIC1
RET
PWM: MOV TH0, #0FFH
MOV TL0, #9CH
CJNE R6, #0, BAJO
JMP BAJO1
BAJO: DJNZ R6, SALIR
JNB 20H.6, CIS
CPL PULSO1
JMP SER
CIS: CPL PULSO
SER: CLR C
MOV A, #200
SUBB A, 25H
MOV R1, A
BAJO1: DJNZ R1, SALIR
MOV R6, 25H
JNB 20H.6, CIS1
CPL PULSO1
JMP SER1
CIS1: CPL PULSO
SER1: DJNZ R4, SALIR
MOV R4, #50
CLR TR0
JB 20H.6, DE
SETB 20H.0
SETB 20H.1
JMP SALIR
DE: CLR 20H.6
SALIR: RETI
SERVO1: MOV A, 21H
CJNE A, #23, COM
MOV R6, #13
MOV 25H, #13
SETB TR0
JMP SALIR2
COM: CJNE A, #13, COM2
JNB FOTO2, COM1
MOV R6, #23
MOV 25H, #23
SETB TR0
JMP SALIR2
COM1: MOV R6, #3
MOV 25H, #3
SETB TR0
JMP SALIR2
COM2: MOV R6, #13
MOV 25H, #13
SETB TR0
SALIR2: MOV 21H, 25H
RETI
SERVO2: MOV A, 23H
CJNE A, #23, COM3
JNB FOTO4, SALIR1
MOV R6, #19
MOV 25H, #19
SETB TR0
JMP SALIR1
COM3: CJNE A, #19, COM5
JNB FOTO3, COM4
MOV R6, #13
MOV 25H, #13
SETB TR0
JMP SALIR1
COM4: MOV R6, #23
MOV 25H, #23
SETB TR0
JMP SALIR1
COM5: JNB FOTO4, SALIR
MOV R6, #19
MOV 25H, #19
SETB TR0
SALIR1: MOV 23H, 25H
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -