fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Buscando fallo del ...
 
Avisos
Vaciar todo

Buscando fallo del ASM

4 Respuestas
3 Usuarios
0 Likes
4,989 Visitas
meta
Respuestas: 142
 Meta
Topic starter
(@meta)
Estimable Member
Registrado: hace 16 años

Hola:

Estoy con el ASM del PIC-16F84A y me aparece este error compilado con el MPLAB v8.36.

----------------------------------------------------------------------
Release build of project `C:PIC16F84AMeta_Control.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.33, mplink.exe v4.33
Wed Aug 26 13:35:17 2009
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:Archivos de programaMicrochipMPASM SuiteMPASMWIN.exe" /q /p16F84A "Meta_Control.asm" /l"Meta_Control.lst" /e"Meta_Control.err"
Error[116] C:PIC16F84AMETA_CONTROL.ASM 202 : Address label duplicated or different in second pass (Inicio)
Message[302] C:PIC16F84ALCD_4BIT.INC 93 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:PIC16F84ALCD_4BIT.INC 105 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project `C:PIC16F84AMeta_Control.disposable_mcp' failed.
Language tool versions: MPASMWIN.exe v5.33, mplink.exe v4.33
Wed Aug 26 13:35:19 2009
----------------------------------------------------------------------
BUILD FAILED

Su código fuente es:

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

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
MensajeApuntado ; Va a guarda la dirección del mensaje apuntado.
ENDC

#DEFINE SalidaR1 PORTB,3 ; Define dónde se sitúan las salidas.
#DEFINE SalidaR2 PORTB,2
#DEFINE SalidaR3 PORTB,1
#DEFINE SalidaR4 PORTB,0

TECLA_RELE_1_ON EQU 'q' ; Código de las teclas utilizadas.
TECLA_RELE_1_OFF EQU 'a'
TECLA_RELE_2_ON EQU 'w'
TECLA_RELE_2_OFF EQU 's'
TECLA_RELE_3_ON EQU 'e'
TECLA_RELE_3_OFF EQU 'd'
TECLA_RELE_4_ON EQU 'r'
TECLA_RELE_4_OFF EQU 'f'
TECLA_INICIO EQU 'z'
TECLA_PARADA EQU ' '
TECLA_INFO EQU 'i' ; Código de la tecla espaciadora, (hay un espacio,
; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS *****************************************************************

ORG 0
Inicio
call LCD_Inicializa
call RS232_Inicializa
bsf STATUS,RP0 ; Configura como salidas las 4 líneas del
bcf SalidaR1 ; del Puerto B respetando la configuración del
bcf SalidaR2 ; resto de las líneas.
bcf SalidaR3
bcf SalidaR4
bcf STATUS,RP0
call Parado ; En principio todas las salidas deben estar
Principal ; apagadas.
call RS232_LeeDato ; Espera a recibir un carácter.
call TesteaTeclado
goto Principal

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeParado
DT "Sistema PARADO", 0x00
Mensaje_R1_ON
DT "RELE 1 ON", 0x00
Mensaje_R1_OFF
DT "RELE 1 OFF", 0x00
Mensaje_R2_ON
DT "RELE 2 ON", 0x00
Mensaje_R2_OFF
DT "RELE 2 OFF", 0x00
Mensaje_R3_ON
DT "RELE 3 ON", 0x00
Mensaje_R3_OFF
DT "RELE 3 OFF", 0x00
Mensaje_R4_ON
DT "RELE 4 ON", 0x00
Mensaje_R4_OFF
DT "RELE 4 OFF", 0x00
Mensaje_Info
DT "FirmWare v1.00", 0x00
Mensaje_Inicio
DT "Todos activos", 0x00

; Subrutina "TesteaTeclado" -------------------------------------------------------------
;
; Testea el teclado y actúa en consecuencia.

TesteaTeclado
movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada.
xorlw TECLA_RELE_1_ON ; ¿Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
goto R1_ON ; Sí, se desea movimiento hacia adelante.
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TECLA_RELE_1_OFF ; ¿Es la tecla del movimiento hacia atrás?
btfsc STATUS,Z
goto R1_OFF ; Sí, se desea movimiento hacia atrás.
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TECLA_RELE_2_ON ; ¿Es la tecla del movimiento hacia la izquierda?
btfsc STATUS,Z
goto R2_ON ; Sí, se desea movimiento hacia la izquierda.
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TECLA_RELE_2_OFF ; ¿Es tecla del movimiento hacia la derecha?
btfsc STATUS,Z
goto R2_OFF ; Sí, se desea movimiento hacia la derecha.
;
movf TeclaPulsada,W
xorlw TECLA_RELE_3_ON
btfsc STATUS,Z
goto R3_ON
;
movf TeclaPulsada,W
xorlw TECLA_RELE_3_OFF
btfsc STATUS,Z
goto R3_OFF
;
movf TeclaPulsada,W
xorlw TECLA_RELE_4_ON
btfsc STATUS,Z
goto R4_ON
;
movf TeclaPulsada,W
xorlw TECLA_RELE_4_OFF
btfsc STATUS,Z
goto R4_OFF
;
movf TeclaPulsada,W
xorlw TECLA_INICIO
btfsc STATUS,Z
goto Inicio
;
movf TeclaPulsada,W
xorlw TECLA_INFO
btfsc STATUS,Z
goto Info
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TECLA_PARADA ; ¿Es la tecla de parada?.
btfss STATUS,Z
goto Fin ; No es ninguna tecla de movimiento. Sale.
Parado
bcf SalidaR1 ; Como se ha pulsado la tecla de parada se
bcf SalidaR2 ; desactivan todas las salidas.
bcf SalidaR3
bcf SalidaR4
movlw MensajeParado
goto Visualiza
R1_ON
bsf SalidaR1
movlw Mensaje_R1_ON
goto Visualiza
R1_OFF
bcf SalidaR1
movlw Mensaje_R1_OFF
goto Visualiza
R2_ON
bsf SalidaR2
movlw Mensaje_R2_ON
goto Visualiza
R2_OFF
bcf SalidaR2
movlw Mensaje_R2_OFF
goto Visualiza
R3_ON
bsf SalidaR3
movlw Mensaje_R3_ON
goto Visualiza
R3_OFF
bcf SalidaR3
movlw Mensaje_R3_OFF
goto Visualiza
R4_ON
bsf SalidaR4
movlw Mensaje_R4_ON
goto Visualiza
R4_OFF
bcf SalidaR4
movlw Mensaje_R4_OFF
goto Visualiza
Inicio
bsf SalidaR1 ; Como se ha pulsado la tecla de parada se
bsf SalidaR2 ; desactivan todas las salidas.
bsf SalidaR3
bsf SalidaR4
movlw Mensaje_Inicio
goto Visualiza
Info
movlw Mensaje_Info

; Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
; el monitor del ordenador.

Visualiza
movwf MensajeApuntado ; Guarda la posición del mensaje.
call LCD_Borra ; Borra la pantalla del modulo LCD.
movf MensajeApuntado,W ; Visualiza el mensaje en la pantalla
call LCD_Mensaje ; del visualizador LCD.
call RS232_LineasBlanco ; Borra la pantalla del ordenador.
movf MensajeApuntado,W
call RS232_Mensaje ; Lo visualiza en el HyperTerminal.
call RS232_LineasBlanco
Fin return

INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END

Responder
3 respuestas
el_pack
Respuestas: 121
(@el_pack)
Estimable Member
Registrado: hace 17 años

Yo creo que el problema lo tienes aquí:

bsf STATUS,RP0 ; Configura como salidas las 4 líneas del
bcf SalidaR1 ; del Puerto B respetando la configuración del
bcf SalidaR2 ; resto de las líneas.
bcf SalidaR3
bcf SalidaR4
bcf STATUS,RP0

ya que SalidaR1 hace referencia al PORTB,3 y no al TRISB,3, que es donde se configuran los puertos como entradas o salidas. Lo mismo para las otras SalidaRn.

Responder
goblin welder
Respuestas: 77
(@goblin-welder)
Trusted Member
Registrado: hace 15 años

Creo que eso da igual, PORTB y TRISB representan el mismo valor de memoria, lo que realmente selecciona entre uno u otro es el banco en el que estés trabajando, por lo que donde se pone uno se puede poner el otro obteniendo el resultado esperado.

Probablemente el error lo tengas en los includes, mira que no tengas una etiqueta duplicada en un include y en tu programa.

Responder
meta
Respuestas: 142
 Meta
Topic starter
(@meta)
Estimable Member
Registrado: hace 16 años

Tengo duplicada la etiqueta Inicio

En:
ORG 0
Inicio
call LCD_Inicializa

y en:
Inicio
bsf SalidaR1 ; Como se ha pulsado la tecla de parada se
bsf SalidaR2

Ya encontré el fallo. Gracias. Lo de TRISA o PORTA no tiene nada que ver.

Responder
Compartir: