Hola chicos y chicas, tengo un problema con un programa para sacar un mensaje por el LCD y despues de muchos intentos no encuentro los errores, podriais decirme porque tengo duplicados los registros.
LIST P=16F877A
INCLUDE <P16F877A.INC>
INCLUDE <Rutina_5ms.inc>
#define OFF_COMANDO bcf PORTA,0 ;Desactiva RS.
#define DISABLE bcf PORTA,2 ;Desactiva señal E.
#define LEER bsf PORTA,1 ;Pone LCD en modo lectura.
#define ENABLE bsf PORTA,2 ;Activa señal E.
#define ESCRIBIR bcf PORTA,1 ;Pone LCD en modo escritura.
#define ON_COMANDO bsf PORTA,0 ;Activa RS.
;
;------------------------------------------------------------------------------------------------------------
; VARIABLES
;------------------------------------------------------------------------------------------------------------
;
CBLOCK H'20'
cantms ;Variable para Rutina_5ms
cursor ;Variable para Rutina_LCD.
curdisp ;Variable para Rutina_LCD.
poeslcd ;Variable para Rutina_LCD.
ENDC
;
RESET ORG 0X00
GOTO INICIO
ORG 0X05 ;Salva vector de interrupcion.
INICIO bsf STATUS,5 ;Cambio al banco 1
bcf STATUS,6
clrf TRISB ;RB se programa como salida.
movlw b'00000110' ;RA<4:3> se programan como entradas.
movwf ADCON1 ;RA<2:0> se programan como salidas.
movlw b'00011000' ;Puerta A E\S digitales
movwf TRISA
bcf STATUS,5 ;Cambio al banco 0
OFF_COMANDO ;Desactiva RS del modulo LCD.
DISABLE ;Desactiva E del modulo LCD.
LCD_INI movlw b'00111000'
call LCD_REG ;Codigo de instruccion
call Rutina_5ms ;Temporiza 5 mS.
movlw b'00111000'
call LCD_REG ;Codigo de instruccion
call Rutina_5ms ;Temporiza 5 mS.
movlw b'00111000'
call LCD_REG ;Codigo de instruccion
call Rutina_5ms ;Temporiza 5 mS.
RETURN
B_DISPLAY movlw b'00000001'
call LCD_REG
RETURN
LCD_REG OFF_COMANDO ;Desactiva RS (Modo instruccion).
movwf PORTB ;Saca el codigo de instruccion.
call LCD_BUSY
LCD_E ENABLE ;Activa señal E.
nop ;Espera 1us.
DISABLE ;Desactiva señal E.
RETURN
LCD_BUSY LEER ;Pone el LCD en modo lectura.
bsf STATUS,5 ;Selecciona el Banco 1
movlw 0xFF
movwf PORTB ;Puerta B actua de entrada
bcf STATUS,5 ;Selecciona el Banco 0
ENABLE ;Activa el LCD (Señal E)
nop
L_BUSY btfsc PORTB,7 ;Chequea el bit BUSY
goto L_BUSY ;Est a "1" (Ocupado)
DISABLE ;Desactiva el LCD (Se¤al E)
bsf STATUS,5 ;Selecciona el Banco 1
clrf PORTB ;Puerta B actua como salida
bcf STATUS,5 ;Selecciona el Banco 0
ESCRIBIR ;Pone el LCD en modo escritura
RETURN
movlw b'00000110' ;Cargamos en cursor la config. deseada.
MOV_DESP movwf cursor
call LCD_REG
RETURN
movlw b'00001100' ;Cargamos en curdisp la config. deseada.
CUR_DISP movwf curdisp
call LCD_REG
RETURN
movlw b'10000000' ;Cargamos en poeslcd la config. deseada.
POES_LCD movwf poeslcd
call LCD_REG
RETURN
LCD_DATO OFF_COMANDO ;Desactiva RS (Modo instruccion)
movwf PORTB ;Valor ASCII a sacar por PB.
call LCD_BUSY ;Espera a que se libere el LCD.
ON_COMANDO ;Activa RS (Modo dato).
goto LCD_E ;Genera pulso en señal E.
PRINCIPAL movlw DATOS1
call LCD_DATO
;------------------------------------------------------------------------------------------------------------
;MENSAJES
;------------------------------------------------------------------------------------------------------------
DATOS1 addwf PCL,1
retlw ' '
retlw 'A'
retlw 'J'
retlw 'U'
retlw 'S'
retlw 'T'
retlw 'E'
retlw ' '
retlw 'I'
retlw 'N'
retlw 'I'
retlw 'C'
retlw 'I'
retlw 'A'
retlw 'L'
retlw ' '
retlw 0x00
call LCD_DATO
END
Aqui los errors
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "Alarma.asm" /l"Alarma.lst" /e"Alarma.err" /d__DEBUG=1
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 25 : Overwriting previous address contents (0000)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 25 : Overwriting previous address contents (0000)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 29 : Overwriting previous address contents (0005)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 29 : Overwriting previous address contents (0005)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 30 : Overwriting previous address contents (0006)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 30 : Overwriting previous address contents (0006)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Overwriting previous address contents (0007)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Overwriting previous address contents (0007)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 32 : Overwriting previous address contents (0008)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 32 : Overwriting previous address contents (0008)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Overwriting previous address contents (0009)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Overwriting previous address contents (0009)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 34 : Overwriting previous address contents (000A)
Error[118] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 34 : Overwriting previous address contents (000A)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 35 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\PROYECTOS\Proyecto1\Alarma.mcp' failed.
Language tool versions: MPASMWIN.exe v5.33, mplink.exe v4.33
Preprocessor symbol `__DEBUG' is defined.
Thu Oct 08 18:42:54 2009
----------------------------------------------------------------------
BUILD FAILED
Gracias.