Primeramente soy nuevo en el foro
, inicio mi primer tema para encontrar los errores que estoy cometiendo, ya que uno no nace aprendiendo de la noche a la mañana
Les explico en que consiste lo que quiero implementar; pero antes yo siempre empiezo por una previa simulacion de cualquier diagrama antes de implementarlo. Pues consta de un brazo robotico de 2 grados; ya se que hay muchos por la red (5 a 6 grados) pero muy pocos trabajan con el lenguaje ASM, es por ello que quiero empezar yo con este diseño; me defiendo en el ASM, pero mi problema ahora es que no he trabajado mucho con los LCD; un LCD por que??? en si solo para poder visualizar una serie de mensajes que seran activados por unos pulsadores que permiten girar los motores paso a paso.
Empeze primeramente con el programa en MPLAB para el giro de los motores
pero cuando empeze a insertar el codigo del LCD no me cuadra donde tiene que ir
y veo que estoy cometiendo errores muy altos y no se en donde????
he aqui mi codigo, porsiaca no uso las rutinas retardos.inc ni otra que conosca, esta rutina es la que mayormente usan algunos.
LIST P=16F84A
INCLUDE <P16F84A.inc>
RADIX HEX
STATUS EQU 03h ; REGISTRO ESTADO
PORTA EQU 05h ; PUERTO A
PORTB EQU 06h ; PUERTO B
OPTION_REG EQU 81h ; REGISTRO DE INTERRUPCION
INTCON EQU 0bh
TRISA EQU 85h ; REGISTRO CONFIGURACION PUERTO A
TRISB EQU 86h ; REGISTRO CONFIGURACION PUERTO B
CONTA EQU 0X0D ;Damos el nombre de CONTA a dir. 0Dh(USO GENERAL)
CONTB EQU 0X0E ;Damos el nombre de CONTB a dir. 0Eh(USO GENERAL)
CONTC EQU 0X0F ;Damos el nombre de CONTC a dir. 0Fh(USO GENERAL)
ORG 00h ; INDICA AL COMPILADOR DONDE COMIENZA EL PROGRAMA
GOTO INICIO ; VA A SUBRUTINA INICIO
ORG 04h
INICIO
BSF STATUS,5
MOVLW B'11111' ; CARGA '11111' EN EL REGISTRO DE TRABAJO 'W'
MOVWF TRISA ; CARGA 'W' EN EL PUERTO A
MOVLW B'00000000' ; CARGA '00000000' EN EL REGISTRO DE TRABAJO 'W'
MOVWF TRISB ; CARGA 'W' EN EL PUERTO B
MOVLW B'00000111' ; CARGA '00000111' EN EL REGISTRO DE TRABAJO 'W'
MOVWF OPTION_REG ; CONFIGURAMOS TMR0 COMO CONTADOR DESCENDENTE
BCF STATUS,5 ; VUELVE A 0
CLRF PORTA
CLRF PORTB
GIRO
BTFSC PORTA,0 ; EN ESTE PUERTO DA EL GIRO A LA IZQUIERDA
GOTO GIRO1
GOTO IZQUIERDA
GIRO1
BTFSC PORTA,1 ; EN ESTE PUERTO DA EL GIRO A LA DERECHA
GOTO GIRO2
GOTO DERECHA
GIRO2
BTFSC PORTA,2 ; EN ESTE PUERTO ABRE
GOTO GIRO3
GOTO ABRE
GIRO3
BTFSC PORTA,3 ; EN ESTE PUERTO CIERRA
GOTO GIRO
GOTO CIERRA
DERECHA
MOVLW B'00001100' ; PRIMER PASO.
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00000110' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00000011' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00001001' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT
IZQUIERDA
MOVLW B'00001001' ; PRIMER PASO
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00000011' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00000110' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00001100' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT
CIERRA
MOVLW B'11000000' ; PRIMER PASO.
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'01100000' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00110000' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'10010000' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT
ABRE
MOVLW B'10010000' ; PRIMER PASO
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00110000' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'01100000' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'11000000' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT
TIEMPO
movwf PORTB ;sacamos los pasos por el PORTb
call Retardo_100ms ;realizamos el llamado para el retardo
return ;retorno de donde fue llamado
Retardo_100ms ;retardo de 100 milisegundos
movlw d'1000' ;OJO d100=100mlsegundos cambio otros valores como ejemplo d50=50mlsegundos
goto Retardos_ms
Retardos_ms
movwf CONTB
R1ms_BucleExterno
movlw d'249'
movwf CONTA
R1ms_BucleInterno
nop
decfsz CONTA,F
goto R1ms_BucleInterno
decfsz CONTB,F
goto R1ms_BucleExterno
return
END
Ahora como empiezo e inserto el codigo del LCD??? y que entradas tomo para la visualizacion del mismo????
Salu2 y gracias