ImagenImagenImagenImagen
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Buscando fallo del ASM

Foro para postear los temas de ensamblador

Moderador: Junta Directiva

Responder
Avatar de Usuario
Meta
Forero Habitual
Forero Habitual
Mensajes: 142
Registrado: Dom Ene 20, 2008 8:49 pm
Ubicación: http://electronica-pic.blogspot.com
Contactar:

Buscando fallo del ASM

Mensaje por Meta » Mié Ago 26, 2009 2:57 pm

Hola:

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

----------------------------------------------------------------------
Release build of project `C:\PIC16F84A\Meta_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 programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "Meta_Control.asm" /l"Meta_Control.lst" /e"Meta_Control.err"
Error[116] C:\PIC16F84A\META_CONTROL.ASM 202 : Address label duplicated or different in second pass (Inicio)
Message[302] C:\PIC16F84A\LCD_4BIT.INC 93 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PIC16F84A\LCD_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:\PIC16F84A\Meta_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:

Código: Seleccionar todo

; 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


http://electronica-pic.blogspot.com Manuales PIC y electrónica general.

Avatar de Usuario
El_Pack
Forero Habitual
Forero Habitual
Mensajes: 119
Registrado: Vie May 04, 2007 2:38 pm
Nombre: Francisco Llopis
Ubicación: Massamagrell
Contactar:

Re: Buscando fallo del ASM

Mensaje por El_Pack » Mié Ago 26, 2009 3:27 pm

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.
Saludos!!

El_Pack

Nunca llega tan alto el hombre como cuando no sabe a donde va. Oliver Cromwell

Avatar de Usuario
Goblin Welder
Visitador del Foro
Visitador del Foro
Mensajes: 75
Registrado: Sab Jun 20, 2009 9:09 pm
Nombre: Goblin Welder

Re: Buscando fallo del ASM

Mensaje por Goblin Welder » Mié Ago 26, 2009 3:55 pm

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.
I wrecked your metal guy, boss. But look! I made you an ashtray.

Avatar de Usuario
Meta
Forero Habitual
Forero Habitual
Mensajes: 142
Registrado: Dom Ene 20, 2008 8:49 pm
Ubicación: http://electronica-pic.blogspot.com
Contactar:

Re: Buscando fallo del ASM

Mensaje por Meta » Mié Ago 26, 2009 4:11 pm

Tengo duplicada la etiqueta Inicio

En:

Código: Seleccionar todo

	ORG	0
Inicio
	call	LCD_Inicializa
y en:

Código: Seleccionar todo

Inicio
	bsf		SalidaR1	; Como se ha pulsado la tecla de parada se
	bsf		SalidaR2	
[/QUOTE]

Ya encontré el fallo. Gracias. Lo de TRISA o PORTA no tiene nada que ver.
http://electronica-pic.blogspot.com Manuales PIC y electrónica general.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado