Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

03/06/2012 #1


Necesito ayuda para programar pic 16f84a y lcd 16x2
Hola a todos, soy nuevo en esto para que por favor lo tengan en cuenta antes que se acuerden de mi madre o me llamen Bestia o algo similar. al grano

Debo realizar un programa con pic que muestre en una pantalla lcd:
" hola somos el grupo numero 2"

Conseguí en una paginas de videos online algunos ejemplos aplicables a mi caso y ademas en el libro de microcontroladores desarrollo de proyectos algo que me sirve pero no consigo que me corra el programa el MPLAB IDE v8.85. me saltan varios errores.
A continuación les escribo el programa y los errores para ver quien me puede ayudar o si me pueden pasar el codigo .hex estaría agradecido.
Este programa lo consegui gogleando todos los meritos y agradecimientos a su creador yo solo quiero tomar este y hacer las modificaciones.

Código:
;************************************ Mensaje*******************************************
;
; El módulo LCD visualiza un mensaje largo (más de 16 caracteres) que se desplaza a lo largo
; de la pantalla. Se utiliza la subrutina LCD_MensajeMovimiento de la librería LCD_MENS.INC.
; 
; ZONA DE DATOS **********************************************************************

    LIST        P=16F84A
    INCLUDE        
    __CONFIG    _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

    CBLOCK  0x0C
    ENDC

; ZONA DE CÓDIGOS ********************************************************************

    ORG    0
Inicio
    call    LCD_Inicializa            ; Prepara la pantalla.
Principal
    movlw    Mensaje0                ; Apunta al mensaje.
    call    LCD_MensajeMovimiento
    goto    Principal                ; Repite la visualización.

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
    addwf    PCL,F
Mensaje0                            ; Posición inicial del mensaje.
    DT "           "                ; Espacios en blanco al principio para mejor
    DT "HOLA MUY BUENOS DIAS  "
    DT "UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD  "    ; visualización.
       DT "TECNOLOGIA EN ELECTRONICA  "
    DT "FRANCISCO JAVIER HILARON NOVOA. "
    DT "                ", 0x0        ; Espacios en blanco al final.

    
    
    



;-----------------------LIBRERÍAS--------------------------------------------------

;**************************** Librería "LCD_4BIT.INC" ***********************************

; ZONA DE DATOS *********************************************************************

    CBLOCK
    LCD_Dato
    LCD_GuardaDato
    LCD_GuardaTRISB
    LCD_Auxiliar1
    LCD_Auxiliar2
    ENDC

LCD_CaracteresPorLinea    EQU    .16            ; Número de caracteres por línea de la pantalla.

#DEFINE  LCD_PinRS    PORTA,0
#DEFINE  LCD_PinRW    PORTA,1
#DEFINE  LCD_PinEnable    PORTA,2
#DEFINE  LCD_BusDatos    PORTB

; Subrutina "LCD_Inicializa" ------------------------------------------------------------
;
; Inicialización del módulo LCD: Configura funciones del LCD, produce reset por software,
; borra memoria y enciende pantalla. El fabricante especifica que para garantizar la
; configuración inicial hay que hacerla como sigue:
;
LCD_Inicializa
    bsf        STATUS,RP0                ; Configura las líneas conectadas al pines RS,
    bcf        LCD_PinRS                ; R/W y E.
    bcf        LCD_PinEnable
    bcf        LCD_PinRW
    bcf        STATUS,RP0
    bcf        LCD_PinRW                ; En caso de que esté conectado le indica
                                    ; que se va a escribir en el LCD.
    bcf        LCD_PinEnable            ; Impide funcionamiento del LCD poniendo E=0.
    bcf     LCD_PinRS                ; Activa el Modo Comando poniendo RS=0.
    call    Retardo_20ms
    movlw    b'00110000'    
    call    LCD_EscribeLCD            ; Escribe el dato en el LCD.
    call    Retardo_5ms    
    movlw    b'00110000'    
    call    LCD_EscribeLCD
    call    Retardo_200micros
    movlw    b'00110000'    
    call    LCD_EscribeLCD
    call    Retardo_20micros        ; Este retardo es necesario para simular en PROTEUS.
    movlw    b'00100000'                ; Interface de 4 bits.
    call    LCD_EscribeLCD
    call    Retardo_20micros        ; Este retardo es necesario para simular en PROTEUS.
    
; Ahora configura el resto de los parámetros: 

    call    LCD_2Lineas4Bits5x7        ; LCD de 2 líneas y caracteres de 5x7 puntos.
    call    LCD_Borra                ; Pantalla encendida y limpia. Cursor al principio
    call    LCD_CursorOFF            ; de la línea 1. Cursor apagado.
    call    LCD_CursorIncr            ; Cursor en modo incrementar.
    return

; Subrutina "LCD_EscribeLCD" -----------------------------------------------------------
;
; Envía el dato del registro de trabajo W al bus de dato y produce un pequeño pulso en el pin
; Enable del LCD. Para no alterar el contenido de las líneas de la parte baja del Puerto B que
; no son utilizadas para el LCD (pines RB3:RB0), primero se lee estas líneas y después se
; vuelve a enviar este dato sin cambiarlo.

LCD_EscribeLCD
    andlw    b'11110000'                ; Se queda con el nibble alto del dato que es el
    movwf    LCD_Dato                ; que hay que enviar y lo guarda.
    movf    LCD_BusDatos,W            ; Lee la información actual de la parte baja
    andlw    b'00001111'                ; del Puerto B, que no se debe alterar.
    iorwf    LCD_Dato,F                ; Enviará la parte alta del dato de entrada
                                    ; y en la parte baja lo que había antes.
    bsf        STATUS,RP0                ; Acceso al Banco 1.
    movf    TRISB,W                    ; Guarda la configuración que tenía antes TRISB.
    movwf    LCD_GuardaTRISB
    movlw    b'00001111'                ; Las 4 líneas inferiores del Puerto B se dejan 
    andwf    PORTB,F                    ; como estaban y las 4 superiores como salida.
    bcf        STATUS,RP0                ; Acceso al Banco 0.
;
    movf    LCD_Dato,W                ; Recupera el dato a enviar.
    movwf    LCD_BusDatos            ; Envía el dato al módulo LCD.
    bsf        LCD_PinEnable            ; Permite funcionamiento del LCD mediante un pequeño
    bcf        LCD_PinEnable            ; pulso y termina impidiendo el funcionamiento del LCD.
    bsf        STATUS,RP0                ; Acceso al Banco 1. Restaura el antiguo valor en
    movf    LCD_GuardaTRISB,W        ; la configuración del Puerto B.
    movwf    TRISB
    bcf        STATUS,RP0                ; Acceso al Banco 0.
    return

; Subrutinas variadas para el control del módulo LCD -----------------------------------------
;
;Los comandos que pueden ser ejecutados son:
;
LCD_CursorIncr                        ; Cursor en modo incrementar.
    movlw    b'00000110'
    goto    LCD_EnviaComando

LCD_CursorOFF                        ; Pantalla encendida y cursor apagado.
    movlw    b'00001100'
    goto    LCD_EnviaComando

LCD_Borra                            ; Borra toda la pantalla, memoria DDRAM y pone el 
    movlw    b'00000001'                ; cursor a principio de la línea 1.
    goto    LCD_EnviaComando
LCD_2Lineas4Bits5x7                    ; Define la pantalla de 2 líneas, con caracteres
    movlw    b'00101000'                ; de 5x7 puntos y conexión al PIC mediante bus de
;    goto    LCD_EnviaComando        ; 4 bits. 

; Subrutinas "LCD_EnviaComando" y "LCD_Caracter" ------------------------------------
;
; "LCD_EnviaComando". Escribe un comando en el registro del módulo LCD. La palabra de
; comando ha sido entregada a través del registro W.  Trabaja en Modo Comando.
; "LCD_Caracter". Escribe en la memoria DDRAM del LCD el carácter ASCII introducido a
; a través del registro W. Trabaja en Modo Dato.
;
LCD_EnviaComando
    bcf        LCD_PinRS                ; Activa el Modo Comando, poniendo RS=0.
    goto    LCD_Envia

LCD_Caracter
    bsf        LCD_PinRS                ; Activa el "Modo Dato", poniendo RS=1.
    call    LCD_CodigoCGROM            ; Obtiene el código para correcta visualización.

LCD_Envia
    movwf    LCD_GuardaDato            ; Guarda el dato a enviar.
    call    LCD_EscribeLCD            ; Primero envía el nibble alto.
    swapf    LCD_GuardaDato,W        ; Ahora envía el nibble bajo. Para ello pasa el
                                    ; nibble bajo del dato a enviar a parte alta del byte.
    call    LCD_EscribeLCD            ; Se envía al visualizador LCD.
    btfss    LCD_PinRS                ; Debe garantizar una correcta escritura manteniendo 
    call    Retardo_2ms                ; 2 ms en modo comando y 50 µs en modo cáracter.
    call    Retardo_50micros
    return    

; Subrutina "LCD_CodigoCGROM" -----------------------------------------------------------
;
; A partir del carácter ASCII número 127 los códigos de los caracteres definidos en la
; tabla CGROM del LM016L no coinciden con los códigos ASCII. Así por ejemplo, el código
; ASCII de la "Ñ" en la tabla CGRAM del LM016L es EEh.
;
; Esta subrutina convierte los códigos ASCII de la "Ñ", "º" y otros, a códigos CGROM para que
; que puedan ser visualizado en el módulo LM016L.
; 
; Entrada:    En (W) el código ASCII del carácter que se desea visualizar.
; Salida:    En (W) el código definido en la tabla CGROM.

LCD_CodigoCGROM
    movwf    LCD_Dato                ; Guarda el valor del carácter y comprueba si es
LCD_EnheMinuscula                    ; un carácter especial.
    sublw    'ñ'                     ; ¿Es la "ñ"?
    btfss    STATUS,Z
    goto    LCD_EnheMayuscula        ; No es "ñ".
    movlw    b'11101110'                ; Código CGROM de la "ñ".
    movwf    LCD_Dato
    goto    LCD_FinCGROM
LCD_EnheMayuscula
    movf    LCD_Dato,W                ; Recupera el código ASCII de entrada.
    sublw    'Ñ'                     ; ¿Es la "Ñ"?
    btfss    STATUS,Z
    goto    LCD_Grado                ; No es "Ñ".
    movlw    b'11101110'                ; Código CGROM de la "ñ". (No hay símbolo para
    movwf    LCD_Dato                ; la "Ñ" mayúscula en la CGROM).
    goto    LCD_FinCGROM    
LCD_Grado
    movf    LCD_Dato,W                ; Recupera el código ASCII de entrada.
    sublw    'º'                     ; ¿Es el símbolo "º"?
    btfss    STATUS,Z
    goto    LCD_FinCGROM            ; No es "º".
    movlw    b'11011111'                ; Código CGROM del símbolo "º".
    movwf    LCD_Dato
LCD_FinCGROM
    movf    LCD_Dato,W                ; En (W) el código buscado.
    return





;**************************** Librería "LCD_MENS.INC" ********************************


    CBLOCK
    LCD_ApuntaCaracter                ; Indica la posición del carácter a visualizar
                                    ; respecto del comienzo de todos los mensajes,
                                    ; (posición de la etiqueta "Mensajes").
    LCD_ValorCaracter                ; Código ASCII del carácter a 
    ENDC                            ; visualizar.

; Los mensajes tienen que estar situados dentro de las 256 primeras posiciones de la 
; memoria de programa, es decir, no pueden superar la dirección 0FFh.

                    ; Vuelve al programa principal.

; Subrutina "LCD_MensajeMovimiento" -----------------------------------------------------
;
; Visualiza un mensaje de mayor longitud que los 16 caracteres que pueden representarse
; en una línea, por tanto se desplaza a través de la pantalla.
;
; En el mensaje debe dejarse 16 espacios en blanco, al principio y al final para
; conseguir que el desplazamiento del mensaje sea lo más legible posible.
;
    CBLOCK    
    LCD_CursorPosicion                ; Contabiliza la posición del cursor dentro de la
    ENDC                            ; pantalla LCD

LCD_MensajeMovimiento
    movwf    LCD_ApuntaCaracter        ; Posición del primer carácter del mensaje.
    movlw    Mensajes                ; Halla la posición relativa del primer carácter
    subwf    LCD_ApuntaCaracter,F    ; del mensaje respecto de la etiqueta "Mensajes".
    decf    LCD_ApuntaCaracter,F    ; Compensa la posición que ocupa "addwf PCL,F".
LCD_PrimeraPosicion
    clrf    LCD_CursorPosicion        ; El cursor en la posición 0 de la línea.
    call    LCD_Borra                ; Se sitúa en la primera posición de la línea 1 y
LCD_VisualizaCaracter                ; borra la pantalla.
    movlw    LCD_CaracteresPorLinea    ; ¿Ha llegado a final de línea?
    subwf    LCD_CursorPosicion,W
    btfss    STATUS,Z
    goto    LCD_NoEsFinalLinea
LCD_EsFinalLinea
    call    Retardo_200ms            ; Lo mantiene visualizado durante este tiempo.
    call    Retardo_200ms
    movlw    LCD_CaracteresPorLinea-1; Apunta a la posición del segundo carácter visualizado
    subwf    LCD_ApuntaCaracter,F    ; en pantalla, que será el primero en la siguiente
    goto    LCD_PrimeraPosicion         ; visualización de línea, para producir el efecto
LCD_NoEsFinalLinea                    ; de desplazamiento hacia la izquierda.
    movf    LCD_ApuntaCaracter,W
    call    Mensajes                ; Obtiene el ASCII del carácter apuntado.
    movwf    LCD_ValorCaracter        ; Guarda el valor de carácter.
    movf    LCD_ValorCaracter,F        ; Lo único que hace es posicionar flag Z. En caso
    btfsc    STATUS,Z                ; que sea "0x00", que es código indicador final    
    goto    LCD_FinMovimiento        ; de mensaje, sale fuera.
LCD_NoUltimoCaracter2
    call    LCD_Caracter            ; Visualiza el carácter ASCII leído.
    incf    LCD_CursorPosicion,F    ; Contabiliza el incremento de posición del 
                                    ; cursor en la pantalla.
    incf    LCD_ApuntaCaracter,F    ; Apunta a la siguiente posición por visualizar.
    goto    LCD_VisualizaCaracter    ; Vuelve a visualizar el siguiente carácter
LCD_FinMovimiento                    ; de la línea.
    return                            ; Vuelve al programa principal.
    

;**************************** Librería "RETARDOS.INC" *********************************

; ZONA DE DATOS *********************************************************************

    CBLOCK
    R_ContA                        ; Contadores para los retardos.
    R_ContB
    R_ContC
    ENDC

; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------

Retardo_200micros                ; La llamada "call" aporta 2 ciclos máquina.
    nop                            ; Aporta 1 ciclo máquina.
    movlw    d'64'                ; Aporta 1 ciclo máquina. Este es el valor de "K".
    goto    RetardoMicros        ; Aporta 2 ciclos máquina.

Retardo_50micros                ; La llamada "call" aporta 2 ciclos máquina.
    nop                            ; Aporta 1 ciclo máquina.
    movlw    d'14'                ; Aporta 1 ciclo máquina. Este es el valor de "K".
    goto    RetardoMicros        ; Aporta 2 ciclos máquina.

Retardo_20micros                ; La llamada "call" aporta 2 ciclos máquina.
    movlw    d'5'                ; Aporta 1 ciclo máquina. Este es el valor de "K".

RetardoMicros
    movwf    R_ContA                ; Aporta 1 ciclo máquina.
Rmicros_Bucle
    decfsz    R_ContA,F            ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
    goto    Rmicros_Bucle        ; Aporta (K-1)x2 ciclos máquina.
    return                        ; El salto del retorno aporta 2 ciclos máquina.

; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms                    ; La llamada "call" aporta 2 ciclos máquina.
    movlw    d'200'                ; Aporta 1 ciclo máquina. Este es el valor de "M".
    goto    Retardos_ms            ; Aporta 2 ciclos máquina.

Retardo_20ms                    ; La llamada "call" aporta 2 ciclos máquina.
    movlw    d'20'                ; Aporta 1 ciclo máquina. Este es el valor de "M".
    goto    Retardos_ms            ; Aporta 2 ciclos máquina.

Retardo_5ms                        ; La llamada "call" aporta 2 ciclos máquina.
    movlw    d'5'                ; Aporta 1 ciclo máquina. Este es el valor de "M".
    goto    Retardos_ms            ; Aporta 2 ciclos máquina.

Retardo_2ms                        ; La llamada "call" aporta 2 ciclos máquina.
    movlw    d'2'                ; Aporta 1 ciclo máquina. Este es el valor de "M".
    goto    Retardos_ms            ; Aporta 2 ciclos máquina.

Retardos_ms
    movwf    R_ContB                ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
    movlw    d'249'                ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
    movwf    R_ContA                ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
    nop                            ; Aporta KxMx1 ciclos máquina.
    decfsz    R_ContA,F            ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
    goto    R1ms_BucleInterno    ; Aporta (K-1)xMx2 ciclos máquina.
    decfsz    R_ContB,F            ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
    goto    R1ms_BucleExterno     ; Aporta (M-1)x2 ciclos máquina.
    return                        ; El salto del retorno aporta 2 ciclos máquina.

END                                ; Fin del programa.
y estos son los errores que MPLAB arroja:
Código:
----------------------------------------------------------------------
Debug build of project `C:\Users\BerKoX\Desktop\pantalla\pantalla.asm.mcp' started.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Sun Jun 03 22:39:19 2012
----------------------------------------------------------------------
Make: The target "C:\Users\BerKoX\Desktop\pantalla\pantalla.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "pantalla.asm" /l"pantalla.lst" /e"pantalla.err" /d__DEBUG=1
Error[128]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 9 : Missing argument(s)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 10 : Symbol not previously defined (_CP_OFF)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 10 : Symbol not previously defined (_WDT_OFF)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 10 : Symbol not previously defined (_PWRTE_ON)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 10 : Symbol not previously defined (_XT_OSC)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 28 : Symbol not previously defined (PCL)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 71 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 71 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 72 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 73 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 74 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 75 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 75 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 76 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 78 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 79 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 112 : Symbol not previously defined (PORTB)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 116 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 116 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 117 : Symbol not previously defined (TRISB)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 120 : Symbol not previously defined (PORTB)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 121 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 121 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 124 : Symbol not previously defined (PORTB)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 125 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 126 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 127 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 127 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 129 : Symbol not previously defined (TRISB)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 130 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 130 : Symbol not previously defined (RP0)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 160 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 164 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 173 : Symbol not previously defined (PORTA)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 194 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 194 : Symbol not previously defined (Z)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 202 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 202 : Symbol not previously defined (Z)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 210 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 210 : Symbol not previously defined (Z)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 260 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 260 : Symbol not previously defined (Z)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 273 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 273 : Symbol not previously defined (Z)
Warning[205] C:\USERS\BERKOX\DESKTOP\PANTALLA\PANTALLA.ASM 353 : Found directive in column 1. (END)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Users\BerKoX\Desktop\pantalla\pantalla.asm.mcp' failed.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Sun Jun 03 22:39:22 2012
----------------------------------------------------------------------
BUILD FAILED
tambien publicare el montaje en proteus 7.8
gracias a quien me pueda ayudar saludos desde Venezuela.
03/06/2012 #2
Moderador

Avatar de Chico3001

Te falto especificar la libreria en el include al inicio del programa:

INCLUDE "P16F84.INC"
03/06/2012 #3


ok gracias lo corrijo a ver que pasa y comento! muchas gracias

---------- Actualizado después de 10 minutos ----------

si en efecto eso era muchas gracias amigo voy a subir de nuevo el programa ya corregido para ayudar los que necesiten el codigo.
09/06/2012 #4


muchas gracias ahora tengo que realizar otro programa pero con lcd a 4 bit.igual conseguí algo que me puede servir pero igual sigo con el problema.
aqui envio en programa.

Código:
;muestra en LCD -MENSAJES en interfase de 4 bits- nombre del archivo lcd3--version 2
;se usara 4 bits MSB del puertob para envio de datos a 4bits - RB4 RB5 RB6 RB7 respectivamente conectados a D4 D5 D6 D7 y RB0 RB1 a RS y E respectivamente- RW va a masa.
;---------------------------------------------------------------------
;RECORDAR CAMBIAR DIRECCIONES DE REGISTROS DE PROPOSITO GENERAL A PARTIR DE 20h SI UTILIZA EL PIC 16F818
;---------------------------------------------------------------------


    list     p=16f84a
    #include "p16f84a.inc"


;---Listado de registros especiales utilizado en este programa--

portb    equ    06h ;el puerto b esta en la posicion 06h de la ram
porta    equ    05h;el puerto b esta en la posicion 05h de la ram
trisa    equ    85h    ;regis de config de puerto b esta en la direcc 85h de la ram
trisb    equ    86h    ;regis de config de puerto b esta en la direcc 86h de la ram
status    equ    03h ;registro de estado esta en la direcc 03h de la ram


;---Fin de listado de registros especiales utilizado en este programa--

;Comienza listado de registros de proposito general empleados en este programa

;--------------registros de subrutina retardo-------------
temp5    equ    20h

;--------------Fin registros de subrutina retardo---------

;--------------registros de subrutina INSTRUC/ESCRIB---------

aux        equ    21h

;--------------Fin registros de subrutina INSTRUC/ESCRIB--------


;------------- registros de subrutina espera y larga--------

tempo1    equ    26h 
tempo2    equ    28h
tempo3    equ    2Ah

;------------- Fin registros de subrutina espera y largaespera------


;--------Fin del  listado de registros de proposito general empleados en este programa--------


;------INICIO programa principal-----

inicio
    
    bsf    status,5 ;se posiciona en banco1
    clrf    trisb ;define el portb como salida
    movlw    b'00001100'
    movwf    trisa    

    bcf    status,5; se posiciona en banco 0
    
    call lcd; se llama subrutina de inicializacion del LCD


    
    call    copyright; escribe copyright
    call    largaespera    

mostrar    
    btfsc    porta,2; si en el pin 2 del porta hay un 0 entonces muestra mensaje1-alternado con mensaje3
    goto    frase2
    call    mensaje1    
    call    espera
frase2
    btfsc    porta,3; si en el pin 3 del porta hay un 0 entonces muestra mensaje2-alternado con mensaje3
    goto    frase3
    call    mensaje2
    call    espera
frase3
    call    copyright; si recibe un 0 en pines 2 y 3 de porta muestra mensaje3
    call    espera
    goto    mostrar
        
;---fin programa principal-----------


;--------SUBRUTINAS-------------

;-------Subrutina  LCD  ------------------------------------
;esta subrutina inicia la pantalla LCD
;esta subrutina no utiliza registros de proposito general

lcd
    movlw    02h; carga w con literal 02h RB1=1 o sea E=1 habilito LCD

    call instruc;   enviaremos este valor al portb y por lo tanto al LCD

;------------otra instruccion-----------
    movlw    28h; carga w con literal 28h
;la intrucc asociada dice: interfase de datos de 4 bits y se va a usar 2 lineas - corresponde a la intruccion ACTIVAR FUNCION

    call instruc;   enviaremos este valor al portb y por lo tanto al LCD

;------------otra instruccion-----------
    movlw    06h; carga w con literal 06h
;la intrucc asociada dice: dato fijo en pantalla- corresponde a la intruccion SELECCIONAR MODO

    call instruc;   enviaremos este valor al portb y por lo tanto al LCD

;------------otra instruccion-----------

    movlw    0Ch; carga w con literal 0Ch
;la intrucc asociada dice: encienda la pantalla y desactive el cursor- corresponde a la intruccion ENCENDER O APAGAR PANTALLA

    call instruc;   enviaremos este valor al portb y por lo tanto al LCD

;------------otra instruccion-----------
    movlw    01h; carga w con literal 01h
;la intrucc asociada dice: BORRAR PANTALLA

    call instruc;   enviaremos este valor al portb y por lo tanto al LCD
    return

;esta subrutina inicio la pantalla LCD
;-------Fin Subrutina  LCD  --------

;--------------------Subrutina INSTRC/ESCRIB-------------------------

;Subrutina que manda una instruccion o dato al LCD
;Esta subrutina utiliza el registro de proposito general      aux

instruc
    bcf        portb,0; RB0=0 o sea RS=0 es una instruccion para LCD
    goto    dato2
escrib
    bsf    portb,0;  RB0=1 o sea RS=1 es una dato para LCD

dato2    

;lo que se va hacer  es para no alterar el contenido de los 4 bit menos significativos dell portb

    movwf    aux; guarda contenido de w en aux
    movlw    0fh; carga 00001111 en w
    andwf    portb,1; AND entre w=00001111 y portb y guarda resultado en portb
;lo que se termino de  hacer  es para no alterar el contenido de los 4 bit menos significativos dell portb

    movf    aux,0; carga aux en w
    
    andlw    b'11110000'; AND entre literal 11110000 y w en el cual esta copiado aux  (guarda el resultdado en w)

    iorwf    portb,1; OR entre w  y portb - guarda resultado en portb
    
    bsf        portb,1; RB1=1 o sea E=1 habilito LCD

    call    retardo
    
    bcf        portb,1; RB1=E=0 deshabilita LCD
    call    retardo
    
;---terminó envio  4 bit MSB-------
;---comienza el envio de 4 bit LSB---

    movlw    0fh; carga 00001111 en w
    andwf    portb,1; AND entre w=00001111 y portb - guarda resultado en portb
    swapf    aux,0; intercambia NIBLES de aux y lo guarda en w
    andlw    b'11110000'; AND entre literal 11110000 y w en el cual esta copiado aux con los NIBLES intercambiados (guarda el resultdado en w)
    iorwf    portb,1; OR entre w  y portb - guarda resultado en portb

;lo que se termino de  hacer  es para no alterar el contenido de los 4 bit menos significativos dell portb

    bsf        portb,1; RB1=1 o sea E=1 habilito LCD
    call    retardo
    call    retardo
    bcf        portb,1; RB1=E=0 deshabilita LCD
    call    retardo
;---termino el envio de lo 4bit LSB---    
    return

;---------Fin  subrutina que manda instruccion o dato al LCD------
;------------------Fin Subrutina INSTRC/ESCRIB------------------------

;----------------Subrutina retardo----------------------------------
;Esta subrutina utiliza el registro de proposito general temp5

retardo
    
    movlw    0ffh; carga literal 0ffh en w
    movwf    temp5; mueve contenido de w a temp5
decr
    decfsz    temp5,1; decrementa temp5 y guarda resultado en temp5- salta la intruccion siguiente si temp5 es igual a cero
    goto    decr
    movlw    0ffh; carga literal 0ffh en w
    movwf    temp5; mueve contenido de w a temp5
decr2
    decfsz    temp5,1; decrementa temp5 y guarda resultado en temp5- salta la intruccion siguiente si temp5 es igual a cero
    goto    decr2
    return

;---------------- Fin Subrutina retardo----------------------------------

;----------Subrutina largaespera - -----------------------    

largaespera    

;Escribe una E en display para indicar larga espera
    movlw    0C7h; 
    call instruc
    movlw    "E"; 
    call    escrib
;Termino de escribir la E 

retardo4
    incf    tempo1,1
retardo5
    incf    tempo2,1
retardo6
    incf    tempo3,1
    btfss     tempo3,7
    goto    retardo6
    clrf    tempo3
    btfss    tempo2,7
    goto    retardo5
    clrf    tempo2
    btfss    tempo1,7
    goto    retardo4
    clrf    tempo1

;Llama reiteradas veces a subrutina espera -para incrementar espera
;Tanto como subrutina espera y largaespera utilizan los mismos registros de proposito general

    call espera
    call espera
; Termino de llamar reiteradas veces a subrutina espera

;Limpia la E en display que escribio al principio
    movlw    0C7h; 
    call instruc
    movlw    " "; 
    call    escrib
;Termino de limpiar la E 

    return
;-----Fin subrutina largaespera-----------------------

;----------Subrutina espera -( Retardo general)--------
;Esta subrutina utiliza los registros de proposito general- temp1-temp2-temp3
;Son los mismos que utiliza la subrutina largaespera    

espera    nop

retardo1
    incf    tempo1,1
retardo2
    incf    tempo2,1
retardo3
    incf    tempo3,1
    btfss     tempo3,6
    goto    retardo3
    clrf    tempo3
    btfss    tempo2,5
    goto    retardo2
    clrf    tempo2
    btfss    tempo1,4
    goto    retardo1
    clrf    tempo1
    return
;-------------------Fin subrutina espera------------

;---Subrutina copyright-----------

copyright
    
    
    movlw    80h; se indica posicion de memoria del LCD en que quiere escibir el dato
    call instruc
    movlw    " "; 
    call    escrib



    movlw    81h; 
    call instruc
    movlw    "E"; 
    call    escrib

;repito con el resto de los caracteres
    
    movlw    82h; 
    call instruc
    movlw    "E"; 
    call    escrib

    movlw    83h; 
    call instruc
    movlw    "T"; 
    call    escrib

    movlw    84h; 
    call instruc
    movlw    " "; 
    call    escrib

    movlw    85h; 
    call instruc
    movlw    "5"; 
    call    escrib

    movlw    86h; 
    call instruc
    movlw    " "; 
    call    escrib

    movlw    87h; 
    call instruc
    movlw    " "; 
    call    escrib


    call    espera
    call    espera
    call    espera
    call    espera
    
    return


;---Fin subrutina copyright-----------------------------------------------

;---Subrutina mensaje1-----------

mensaje1
    movlw    01h
;    call    instruc; borrar pantalla
    

    movlw    80h; se indica posicion de memoria del LCD en que quiere escibir el dato

    call instruc

    movlw    "R"; este es el primer caracter del mensaje - al estar entre comillas se le indica al compilador que el dato requerido s el valo ASCII del caracter

    call    escrib

;repito con el resto de los caracteres
    
    movlw    81h; 
    call instruc
    movlw    "E"; 
    call    escrib

    movlw    82h; 
    call instruc
    movlw    "C"; 
    call    escrib

    movlw    83h; 
    call instruc
    movlw    "R"; 
    call    escrib

    movlw    84h; 
    call instruc
    movlw    "E"; 
    call    escrib

    movlw    85h; 
    call instruc
    movlw    "O"; 
    call    escrib

    movlw    86h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    87h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    88h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    89h; 
    call instruc
    movlw    "."; 
    call    escrib


    movlw    8Ah; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    8Bh; 
    call instruc
    movlw    "."; 
    call    escrib

    call    espera
    call    espera
    call    espera
    call    espera
    
    return


;---Fin subrutina mensaje1-----------------------------------------------


;---Subrutina mensaje2-----------

mensaje2
    movlw    01h
;    call    instruc; borrar pantalla
    

    movlw    80h; se indica posicion de memoria del LCD en que quiere escibir el dato

    call instruc

    movlw    "A"; este es el primer caracter del mensaje - al estar entre comillas se le indica al compilador que el dato requerido s el valo ASCII del caracter

    call    escrib

;repito con el resto de los caracteres
    
    movlw    81h; 
    call instruc
    movlw    "L"; 
    call    escrib

    movlw    82h; 
    call instruc
    movlw    "A"; 
    call    escrib

    movlw    83h; 
    call instruc
    movlw    "R"; 
    call    escrib

    movlw    84h; 
    call instruc
    movlw    "M"; 
    call    escrib

    movlw    85h; 
    call instruc
    movlw    "A"; 
    call    escrib

    movlw    86h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    87h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    88h; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    89h; 
    call instruc
    movlw    "."; 
    call    escrib


    movlw    8Ah; 
    call instruc
    movlw    "."; 
    call    escrib

    movlw    8Bh; 
    call instruc
    movlw    "."; 
    call    escrib

    call    espera
    call    espera
    call    espera
    call    espera
    
    return


;---Fin subrutina mensaje2-----------------------------------------------













;--------FIN SUBRUTINAS-------------




end
y me da los siguientes errores!

----------------------------------------------------------------------
Debug build of project `C:\Users\BerKoX\Desktop\prueba1\prueba2\4bit\hola \hola.asm.mcp' started.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Sat Jun 09 14:59:32 2012
----------------------------------------------------------------------
Error: File "C:\Users\BerKoX\Desktop\prueba1\prueba2\4bit\hola .asm" not found.
Skipping link step. Not all sources built successfully.
----------------------------------------------------------------------
Debug build of project `C:\Users\BerKoX\Desktop\prueba1\prueba2\4bit\hola \hola.asm.mcp' failed.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Sat Jun 09 14:59:32 2012
----------------------------------------------------------------------
BUILD FAILED

gracias por su ayuda. Saludos desde Venezuela.
09/06/2012 #5
Moderador

Avatar de Chico3001

El compilador no encontro el programa hola.asm. posiblemente esta mal configurado o estas colocando tu programa en un archivo que no es...
10/06/2012 #6


si muchas gracias ya lo corregí. saludos hermano!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.