TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: FCR15 en 21 de Julio de 2015, 17:47:46
-
HOLA disculpen podrian ayudarme porfavor esque tengo un problema con un microcontrolador pic16f877A y una pantalla lcd 16x2 lo que pasa es que no me quiere funcionar no me muestra los caracteres, solo pone una linea puros cuadritos y esque tambien le estoy poniendo una señal analogica al pic, esque quiero que la pantalla lcd me muetre la velocidad cuando el usuario mueva un potenciometro y esta es la señal analogica.
aqui esta mi codigo les agrdesco muchisimo su ayuda..
LIST p=16F877A
;__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
CICLO1 EQU 0X20
CICLO2 EQU 0X21
CICLO3 EQU 0X22
CICLO4 EQU 0X31
CICLO5 EQU 0X32
CICLO6 EQU 0X33
TEMP EQU 0X25
DATO EQU 0X30
#DEFINE BANCO0 BCF STATUS,5 ;SE DEFINE LA INSTRUCCIÓN BANCO0
#DEFINE BANCO1 BSF STATUS,5 ;SE DEFINE LA INSTRUCCIÓN BANCO1
STATUS EQU 0X03
PORTD EQU 0X08
PORTB EQU 0X06
TRISD EQU 0X88
TRISB EQU 0X86
LCD_LINEA1 EQU 80
LCD_LINEA2 EQU 0C0
LCD_CLR EQU 01
LCD_CASA EQU 02
LCD_INC EQU 06
LCD_DEC EQU 04
LCD_ON EQU 0C
LCD_OFF EQU 08
CURSOR_ON EQU 0E
CURSOR_OFF EQU 0C
CURSOR_PARP EQU 0F
LCD_IZDA EQU 18
LCD_DECHA EQU 1C
CURSOR_IZDA EQU 10
CURSOR_DECHA EQU 14
LCD_FUNCIÓN EQU 38
LCD_CGRAM EQU 40
CBLOCK 0x0D
ENDC
ORG 0X00 ;VECTOR DE RESET Ó ENCENDIDO DEL PIC
GOTO INICIO ;SALTA A LA ETIQUETA INICIO
ORG 0X04 ;VECTOR DE INTERRUPCION
GOTO INTERRUP ;SALTA A LA ETIQUETA INTERRUP
;ORG 0X10
INICIO
CALL INI_AD
CALL INI_PWM
CALL SETUPDELAY ;TIEMPO NECESARIO PARA LA CAPTURA DEL
CALL SETUPDELAY ;VALOR ANALOGICO A CONVERTIR
; BANCO1
; MOVLW B'0000000'
;MOVWF TRISB
;MOVLW B'00000001'
; MOVWF TRISC
; MOVLW B'00000000'
; MOVWF TRISD
;BANCO0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INICIA PROGRAMA;;;;;;;;;;;;;;;;;;;
CALL DELAY1SEG
CALL DELAY1SEG
CALL DELAY1SEG
bsf STATUS,RP0
movlw b'00011000'
movwf TRISD
clrf TRISB
bcf STATUS,RP0
clrf PORTD
clrf PORTB
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_CLR
call LCD_COMANDO
movlw LCD_INC
call LCD_COMANDO
movlw LCD_ON
call LCD_COMANDO
movlw 80
call LCD_COMANDO
movlw 'E'
call LCD_CARACTER
movlw 'Q'
call LCD_CARACTER
movlw 'U'
call LCD_CARACTER
movlw 'S'
calL LCD_CARACTER
movlw ' '
calL LCD_CARACTER
movlw 'S'
call LCD_CARACTER
movlw 'Y'
call LCD_CARACTER
movlw 'S'
call LCD_CARACTER
movlw 'T'
calL LCD_CARACTER
movlw 'E'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw 'S'
call LCD_CARACTER
call DELAY1SEG
call DELAY1SEG
movlw 01
call LCD_COMANDO
movlw 80
call LCD_COMANDO
movlw 'H'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'A'
calL LCD_CARACTER
movlw ' '
calL LCD_CARACTER
movlw 'B'
call LCD_CARACTER
movlw 'I'
call LCD_CARACTER
movlw 'E'
call LCD_CARACTER
movlw 'N'
calL LCD_CARACTER
movlw 'V'
call LCD_CARACTER
movlw 'E'
call LCD_CARACTER
movlw 'N'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
calL LCD_CARACTER
movlw 'O'
call LCD_CARACTER
call DELAY1SEG
call DELAY1SEG
call DELAY1SEG
movlw 01
call LCD_COMANDO
movlw 80
call LCD_COMANDO
movlw 'A'
call LCD_CARACTER
movlw 'Q'
call LCD_CARACTER
movlw 'U'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw ' '
calL LCD_CARACTER
movlw 'I'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'I'
call LCD_CARACTER
movlw 'C'
calL LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'R'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw 'V'
call LCD_CARACTER
movlw 'E'
call LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
calL LCD_CARACTER
movlw 'C'
calL LCD_CARACTER
movlw 'I'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
calL LCD_CARACTER
movlw 'D'
calL LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'R'
call LCD_CARACTER
call DELAY1SEG
call DELAY1SEG
call DELAY1SEG
movlw 01
call LCD_COMANDO
ATRAS NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'0' ;RESTARLE 0 A DATO
BTFSS STATUS,Z
GOTO SIGUE1
GOTO VER
VER
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '0'
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE1 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'42' ;RESTARLE 42 A DATO
BTFSS STATUS,Z
GOTO SIGUE2
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '5'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE2 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'85' ;RESTARLE 85 A DATO
BTFSS STATUS,Z
GOTO SIGUE3
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '1'
call LCD_CARACTER
movlw '0'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE3 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'106' ;RESTARLE 106 A DATO
BTFSS STATUS,Z
GOTO SIGUE4
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '1'
call LCD_CARACTER
movlw '3'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE4 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'127' ;RESTARLE 127 A DATO
BTFSS STATUS,Z
GOTO SIGUE5
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '1'
call LCD_CARACTER
movlw '6'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE5 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'149' ;RESTARLE 149 A DATO
BTFSS STATUS,Z
GOTO SIGUE6
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '1'
call LCD_CARACTER
movlw '9'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE6 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'170' ;RESTARLE 170 A DATO
BTFSS STATUS,Z
GOTO SIGUE7
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '2'
call LCD_CARACTER
movlw '1'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE7 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'191' ;RESTARLE 191 A DATO
BTFSS STATUS,Z
GOTO SIGUE8
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '2'
call LCD_CARACTER
movlw '4'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE8 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'213' ;RESTARLE 212 A DATO
BTFSS STATUS,Z
GOTO SIGUE9
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
movlw 'E'
calL LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
movlw 'D'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw '2'
call LCD_CARACTER
movlw '7'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'K'
call LCD_CARACTER
movlw 'M'
call LCD_CARACTER
movlw '/'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 'r'
call LCD_CARACTER
GOTO ATRAS
SIGUE9 NOP
BCF STATUS,Z
BSF ADCON0,GO ;COMIENZA LA CONVERSION
CALL PAUSA
BCF STATUS,Z
MOVF DATO,W
BCF STATUS,Z
SUBLW D'234' ;RESTARLE 233 A DATO
BTFSS STATUS,Z
GOTO SIGUE10
movlw 80
call LCD_COMANDO
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'V'
calL LCD_CARACTER
&
-
Hola FCR15, quizas si pones tu consulta en el subforo de assembler y con un titulo mas aclaratorio te puedan ayudar los colegas que trabajan dicho lenguaje. Yo no te puedo ayudar.
Saludos.
-
Primero que nada ya lo ira a mover algun administrador al foro de ASM, asi que no crees otro tema mas.
Ahora veamos un poquito del programa
STATUS EQU 0X03
PORTD EQU 0X08
PORTB EQU 0X06
TRISD EQU 0X88
TRISB EQU 0X86
Esto no es necesario, eso ya esta definido en el P16F877A.INC
Hay muchisimas cosas mas que no entiendo por que la estas haciendo asi. Por lo que veo no te alcanzo el foro para todo el codigo, antes de analizar este codigo y ver que esta causando exactametne ese problema, te sugiero que te crees un nuevo proyecto pero que solo escriba un caracter en el LCD, y ahi vamos a ir probando, por que este codigo tiene MUCHISIMAS cosas redundantes y algunas partes mal realizadas. Tanto que no se ni por donde empezar.
Por eso mismo te sugiero que solomamente crees un proyecto para que escriba o un caracter o una frase en el LCD (sin ADC). Para poder ver si es error de tiempos o los comandos del LCD, etc.