# Errores de programa de mplab



## lucianovan (Oct 20, 2010)

Hola, estoy teniendo varios error al compilar un codigo

El codigo es:


	INCLUDE "p16F84.inc"



	PROCESSOR       16F84
  	LIST			r = dec, F = INHX8M, MM = ON, T = ON, ST = OFF
	RADIX           HEX

	__IDLOCS        H'0000'
    ERRORLEVEL      0, -302, -306


	CBLOCK h'20'	;Comienzo del banco 0 de memoria RAM en el PIC
	;Aca van las variables
	CONT3
	CONT4
	CONT		

	ENDC			;Final de definiciones de variables de RAM


#DEFINE BITZ	    STATUS, Z     	 	  ;Bit de cero
#DEFINE BITC		STATUS, C      		  ;Bit de carry
RP0	equ	5
RB0	equ	0
RB1	equ	1
RB2	equ	2
RB3	equ	3
RB4	equ	4
RB5	equ	5	
RB6	equ	6
RB7	equ	7
RA0 	equ 	0
RA1 	equ	1
RA2 	equ	2
RA3 	equ	3
RA4 	equ	4


ORG		  2100h	;secuencias guardadas en memoria
DE		  0,B'00000000',B'10000001',B'01000010',B'00100100',B'00011000'
DE        0,B'00000000',B'00011000',B'00000000',B'00111100',B'00000000',B'01111110',B'00000000',B'11111111'

ORG     	0CH
CUENTA  RES 2		;guardo dos lugares de memoria que seran usados para el delay
ACUM	EQU 0EH	;creo un acumulador extra que luego sera usado

ORG         00h
	GOTO    INICIO

INICIO:				;ESCRIBIR EL CÓDIGO DEL PROGRAMA ACÁ
	BSF		STATUS,RP0		
	MOVLW		B'11111'         	
	MOVWF		TRISA            	
	MOVLW		B'00000000'     
	MOVWF		TRISB             
	BCF		STATUS,RP0	
	BCF 		INTCON,7         
	MOVLW		5				 
	MOVWF		CONT3		 
	MOVLW		0EH
	MOVWF		CONT4		 
	MOVLW		8
	MOVWF		CONT		 
	CLRF		PORTB		

;miro que switch fue oprimido
VERIFICO:
	BTFSC 	PORTA,0		 
	GOTO 	SECU1			
	BTFSC 	PORTA,1 		
	GOTO 	SECU2			
	BTFSC 	PORTA,2		 
	GOTO 	SECU3			
	BTFSC 	PORTA,3 		
	GOTO 	SECU4	         		
	GOTO 	VERIFICO		


SECU1
	CLRF	PORTB		
	BSF	PORTB,RB0	
	CALL 	RETARDO	
	BCF	PORTB,RB0	
	BSF	PORTB,RB1	
	CALL 	RETARDO	 
	BCF	PORTB,RB1	 
	BSF	PORTB,RB2	 
	CALL 	RETARDO	 
	BCF	PORTB,RB2	
	BSF	PORTB,RB3	 
	CALL	RETARDO	
	BCF	PORTB,RB3	 
	BSF 	PORTB,RB4	 
	CALL 	RETARDO	
	BCF 	PORTB,RB4	 
	BSF 	PORTB,RB5	
	CALL 	RETARDO	
	BCF 	PORTB,RB5	 
	BSF 	PORTB,RB6	
	CALL 	RETARDO	
   	BCF 	PORTB,RB6	
	BSF 	PORTB,RB7	
	CALL 	RETARDO	
	BCF 	PORTB,RB7	
	GOTO	VERIFICO      	 

SECU2
	CLRF		PORTB		
	MOVLW		0x01		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x03		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x07		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x0F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x1F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x3F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x7F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	CLRF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	CLRF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	CLRF		PORTB		
	GOTO		VERIFICO	



SECU3
	BCF 		STATUS, RP0 	
	MOVF 		CONT3,0 	
	MOVWF 	EEADR 		
	BSF 		STATUS, RP0 	
	BSF 		EECON1, RD 	
	BCF 		STATUS, RP0 	
	MOVF 		EEDATA, W 	
	MOVWF		PORTB		
	CALL		RETARDO	
	DECFSZ		CONT3,1	
	GOTO		SECU3		
	MOVLW		5				
	MOVWF		CONT3		
	GOTO		VERIFICO	;

SECU4
	BCF 		STATUS, RP0 	
	MOVF 		CONT4,0 	
	MOVWF 	EEADR 		
	BSF 		STATUS, RP0 	
	BSF 		EECON1, RD 	
	BCF 		STATUS, RP0 	
	MOVF 		EEDATA, W 	
	MOVWF		PORTB		
	CALL		RETARDO	
	DECF		CONT4,1	
	DECFSZ		CONT,1		
	GOTO		SECU4		
	MOVLW		0EH
	MOVWF		CONT4		
	MOVLW		8
	MOVWF		CONT		
	GOTO		VERIFICO	

RETARDO				
	CLRF 		CUENTA	
	CLRF 		CUENTA+1	
RETARDO1
	DECFSZ 	CUENTA,1	
	GOTO 		RETARDO1	
	DECFSZ 	CUENTA+1,1	
	GOTO 		RETARDO1	
	RETURN

	END			


Y lo errores que me tira el compilador son:


Executing: "D:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84 "tp9.asm" /l"tp9.lst" /e"tp9.err"
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\: Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Found directive in column 1. (ORG)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Overwriting previous address contents (000D)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Overwriting previous address contents (000D)
Halting build on first failure as requested.

Obviamente me interesa resolver los errores primero, antes que las advertenecias

Muchas gracias

Saludos!


----------



## ByAxel (Oct 20, 2010)

Escoge bien el tipo de PIC en "Select Device";
La directiva PROCESSOR se pone arriba de todo;
luego el INCLUDE;
LIST, RADIX, __IDLOCS H' no son nada necesarios...;
RP0	equ	5 y todos esos bits pon con todo el nombre del registro (RP0 equ STATUS,5  y así para todos);
los warning aparecen por que esas directivas deben ir luego de uno o más TAB.


----------



## lucianovan (Oct 20, 2010)

ByAxel dijo:


> Escoge bien el tipo de PIC en "Select Device";
> La directiva PROCESSOR se pone arriba de todo;
> luego el INCLUDE;
> LIST, RADIX, __IDLOCS H' no son nada necesarios...;
> ...



hola axel, gracias por responder! ante todo,
el device lo tenia bien elegido, despues corregio el tema de la directiva PROCESSOR que lo puse arribar de todo,
y con respecto a los bits, vos me decis ponerlo de esta forma:

#DEFINE BITZ	    STATUS, Z     	 	  ;Bit de cero
#DEFINE BITC		STATUS, C      		  ;Bit de carry
RP0	equ	STATUS,5
RB0	equ	STATUS,0
RB1	equ	STATUS,1
RB2	equ	STATUS,2
RB3	equ	STATUS,3
RB4	equ	STATUS,4
RB5	equ	STATUS,5	
RB6	equ	STATUS,6
RB7	equ	STATUS,7
RA0 	equ 	STATUS,0
RA1 	equ	STATUS,1
RA2 	equ	STATUS,2
RA3 	equ	STATUS,3
RA4 	equ	STATUS,4


o como? no entendi bien....


----------



## ByAxel (Oct 20, 2010)

Algo así... 
Supongo que usas RB0 para referirte al PORTB,0; el compilador no sabe de donde es si solo pones RB0 equ 0, por eso hay que decirle explicitamente a donde pertenece la nueva definición... lo mismo para todos.

RP0 equ STATUS,5
RB0 equ PORTB,0
RB1 equ PORTB,1
...
RA0 equ PORTA,0
...


----------



## lucianovan (Oct 20, 2010)

ByAxel dijo:


> Algo así...
> Supongo que usas RB0 para referirte al PORTB,0; el compilador no sabe de donde es si solo pones RB0 equ 0, por eso hay que decirle explicitamente a donde pertenece la nueva definición... lo mismo para todos.
> 
> RP0 equ STATUS,5
> ...



gracias axel! ya lo voy agarrando la mano, lo compile otra vez y me tiro mas errores jaja, pero ahi vamos!
te paso lo corregido:

    PROCESSOR       16F84
	INCLUDE "p16F84.inc"


    ERRORLEVEL      0, -302, -306


	CBLOCK h'20'	;Comienzo del banco 0 de memoria RAM en el PIC
	;Aca van las variables
	CONT3
	CONT4
	CONT		

	ENDC			;Final de definiciones de variables de RAM


#DEFINE BITZ	    STATUS, Z     	 	  ;Bit de cero
#DEFINE BITC		STATUS, C      		  ;Bit de carry
RP0	equ	STATUS, 5
RB0	equ	PORTB, 0
RB1	equ	PORTB, 1
RB2	equ	PORTB, 2
RB3	equ	PORTB, 3
RB4	equ	PORTB, 4
RB5	equ	PORTB, 5	
RB6	equ	PORTB, 6
RB7	equ	PORTB, 7
RA0 	equ 	PORTA, 0
RA1 	equ	PORTA, 1
RA2 	equ	PORTA, 2
RA3 	equ	PORTA, 3
RA4 	equ	PORTA, 4


ORG		  		2100h	;secuencias guardadas en memoria
DE			  	0,B'00000000',B'10000001',B'01000010',B'00100100',B'00011000'
DE       	 	0,B'00000000',B'00011000',B'00000000',B'00111100',B'00000000',B'01111110',B'00000000',B'11111111'

ORG     			0CH
CUENTA  RES 2		;guardo dos lugares de memoria que seran usados para el delay
ACUM	EQU 0EH	;creo un acumulador extra que luego sera usado

ORG        		 00h
	GOTO    INICIO

INICIO:				;ESCRIBIR EL CÓDIGO DEL PROGRAMA ACÁ
	BSF		STATUS,RP0		 ;entramos al banco 1
	MOVLW		B'11111'         	;movemos 11111 al registro de trabajo
	MOVWF		TRISA            	;configuramos el puerto A como entrada
	MOVLW		B'00000000'     ;movemos 00000000 al registro de trabajo
	MOVWF		TRISB              ;configuramos el puerto B como salidas
	BCF		STATUS,RP0	;salimos del banco 1
	BCF 		INTCON,7         ;deshabilito las interrupciones globales
	MOVLW		5				 
	MOVWF		CONT3		 ;CONT3=5, esto es para la secuencia 3 guardada en memoria
	MOVLW		0EH
	MOVWF		CONT4		;CONT4=0E, esto es para la secuencia 4 guardada en memoria
	MOVLW		8
	MOVWF		CONT		 ;CONT=8, contador usado en la secuencia 4
	CLRF		PORTB		;limpio el puerto B

;miro que switch fue oprimido
VERIFICO:
	BTFSC 	PORTA,0		 ;miro si el bit 0 del puerto A esta en 1
	GOTO 	SECU1			 ;si esta en 1 salto a SECU1
	BTFSC 	PORTA,1 		 ;miro si el bit 1 del puerto A esta en 1
	GOTO 	SECU2			 ;si esta en 1 salto a SECU2
	BTFSC 	PORTA,2		 ;miro si el bit 2 del puerto A esta en 1
	GOTO 	SECU3			 ;si esta en 1 salto a SECU3
	BTFSC 	PORTA,3 		 ;miro si el bit 3 del puerto A esta en 1
	GOTO 	SECU4	         		;si esta en 1 salto a SECU4
	GOTO 	VERIFICO		 ;vuelvo a verificar


SECU1
	CLRF	PORTB	
	BSF	PORTB,RB0	 
	CALL 	RETARDO	 
	BCF	PORTB,RB0	 
	BSF	PORTB,RB1	 
	CALL 	RETARDO	 
	BCF	PORTB,RB1	 
	BSF	PORTB,RB2	 
	CALL 	RETARDO	 
	BCF	PORTB,RB2	 
	BSF	PORTB,RB3	 
	CALL	RETARDO	 
	BCF	PORTB,RB3	 
	BSF 	PORTB,RB4	 
	CALL 	RETARDO	
	BCF 	PORTB,RB4	 
	BSF 	PORTB,RB5	 
	CALL 	RETARDO	 
	BCF 	PORTB,RB5	 
	BSF 	PORTB,RB6	 
	CALL 	RETARDO	 
   	BCF 	PORTB,RB6	
	BSF 	PORTB,RB7	 
	CALL 	RETARDO	
	BCF 	PORTB,RB7	 
	GOTO	VERIFICO      	 

SECU2
	CLRF		PORTB		
	MOVLW		0x01		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x03		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x07		
	MOVWF		PORTB		
	CALL		RETARDO
	MOVLW		0x0F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x1F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x3F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0x7F		
	MOVWF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	CLRF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	CLRF		PORTB		
	CALL		RETARDO	
	MOVLW		0xFF		
	MOVWF		PORTB		
	CALL		RETARDO	
	GOTO		VERIFICO	



SECU3
	BCF 		STATUS, RP0 	
	MOVF 		CONT3,0 
	MOVWF 	EEADR 		
	BSF 		STATUS, RP0 	
	BSF 		EECON1, RD 	
	BCF 		STATUS, RP0 	
	MOVF 		EEDATA, W 	
	MOVWF		PORTB		
	CALL		RETARDO
	DECFSZ		CONT3,1	 
	GOTO		SECU3		
	MOVLW		5				
	MOVWF		CONT3		
	GOTO		VERIFICO	

SECU4
	BCF 		STATUS, RP0 	
	MOVF 		CONT4,0 	
	MOVWF 	EEADR 		
	BSF 		EECON1, RD 	
	BCF 		STATUS, RP0 	
	MOVF 		EEDATA, W 	
	MOVWF		PORTB	
	CALL		RETARDO	
	DECF		CONT4,1		
DECFSZ		CONT,1		
	GOTO		SECU4		
	MOVLW		0EH
	MOVWF		CONT4	
	MOVLW		8
	MOVWF		CONT		
	GOTO		VERIFICO	

RETARDO				
	CLRF 		CUENTA	
	CLRF 		CUENTA+1	
RETARDO1
	DECFSZ 	CUENTA,1	
	GOTO 		RETARDO1	
	DECFSZ 	CUENTA+1,1	
	GOTO 		RETARDO1	
	RETURN

	END				;Fin del programa


y te paso los nuevos errores:

rror[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Illegal character (,)
Error[115]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Duplicate label ("RP0" or redefining symbol that cannot be redefined)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA: Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Illegal character (,)
Error[108]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  Illegal character (,)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Overwriting previous address contents (000D)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Overwriting previous address contents (000D)


corregi lo de los puertos pero me salieron esos nuevos errores, de la (,) que nose que estara mal escrito.

El tema de los tabs, de las advertencias, los puse pero como ves me sigue la advertencia, pero igual eso poco me interesa


----------



## ByAxel (Oct 20, 2010)

Perdón, se suponía que RB0 lo usabas para referirte al PORTB,0 pero dentro del código los usas como bit, por lo que como lo hacías estaba bien.

Tal como te dije era para usarlo de esta forma...
*BCF RB4*
pero luego lo haces como...
*BCF PORTB,RB*4 >>> Aquí el error ya que RB4 está declarado como PORTB,RB4... no se si me entiendes...


----------



## lucianovan (Oct 20, 2010)

axel, ahi puse nuevamente como tenia antes, de esta forma lo corregi:

;**********************************************************************
;*						DEFINICIÓN DE ETIQUETAS                       *
;**********************************************************************
#DEFINE BITZ	    STATUS, Z     	 	  ;Bit de cero
#DEFINE BITC		STATUS, C      		  ;Bit de carry
RP0	equ	5
RB0	equ	0
RB1	equ	1
RB2	equ	2
RB3	equ	3
RB4	equ	4
RB5	equ	5	
RB6	equ	6
RB7	equ	7
RA0 	equ 0
RA1 	equ	1
RA2 	equ	2
RA3 	equ	3
RA4 	equ	4


el resto del codigo lo deje como estaba, y me saltaron estos errores:

Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Found directive in column 1. (DE)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Warning[205] D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Found directive in column 1. (ORG)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA : Overwriting previous address contents (000C)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Overwriting previous address contents (000D)
Error[118]   D:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\PRUEBA  : Overwriting previous address contents (000D)


La verdad que no te entiendo el error que me decis, disculpa que no te llegue a entender, como tendria que hacer entonces?


----------



## ByAxel (Oct 20, 2010)

...........
El error de "Overwriting previous address contents" es porque la RAM del PIC16F84 inicia en la dirección 0x0C y no en 0x20.
...........
No estas usando bien el direccionamiento el la memoria... todo lo que son variables van en CBLOCK 0x0C.


```
CBLOCK 0x0C	;Comienzo del banco 0 de memoria RAM en el PIC
;Aca van las variables
	CONT3
	CONT4
	CONT	
	CUENTA
	ACUM
	ENDC	 ;Final de definiciones de variables de RAM
```

..........
Los warning "Found opcode in column 1" son porque las instrucciones deben de ir luego de uno o mas TAB.
Ya compila pero con un muchos warning que es por lo de los TAB para las instrucciones...

saludos


----------



## lucianovan (Oct 20, 2010)

Axel, ya defini esas variables que me dijiste:

PROCESSOR 16F84
INCLUDE "p16F84.inc"


ERRORLEVEL 0, -302, -306


CBLOCK h'20' ;Comienzo del banco 0 de memoria RAM en el PIC
;Aca van las variables
CONT3
CONT4
CONT

ENDC ;Final de definiciones de variables de RAM


#DEFINE BITZ STATUS, Z ;Bit de cero
#DEFINE BITC STATUS, C ;Bit de carry
RP0 equ STATUS, 5
RB0 equ PORTB, 0
RB1 equ PORTB, 1
RB2 equ PORTB, 2
RB3 equ PORTB, 3
RB4 equ PORTB, 4
RB5 equ PORTB, 5
RB6 equ PORTB, 6
RB7 equ PORTB, 7
RA0 equ PORTA, 0
RA1 equ PORTA, 1
RA2 equ PORTA, 2
RA3 equ PORTA, 3
RA4 equ PORTA, 4


ORG 2100h ;secuencias guardadas en memoria
DE 0,B'00000000',B'10000001',B'01000010',B'00100100', B'00011000'
DE 0,B'00000000',B'00011000',B'00000000',B'00111100', B'00000000',B'01111110',B'00000000',B'11111111'

ORG 0CH
CUENTA RES 2 ;guardo dos lugares de memoria que seran usados para el delay
ACUM EQU 0EH ;creo un acumulador extra que luego sera usado

ORG 00h
GOTO INICIO

INICIO: ;ESCRIBIR EL CÓDIGO DEL PROGRAMA ACÁ
BSF STATUS,RP0 ;entramos al banco 1
MOVLW B'11111' ;movemos 11111 al registro de trabajo
MOVWF TRISA ;configuramos el puerto A como entrada
MOVLW B'00000000' ;movemos 00000000 al registro de trabajo
MOVWF TRISB ;configuramos el puerto B como salidas
BCF STATUS,RP0 ;salimos del banco 1
BCF INTCON,7 ;deshabilito las interrupciones globales
MOVLW 5
MOVWF CONT3 ;CONT3=5, esto es para la secuencia 3 guardada en memoria
MOVLW 0EH
MOVWF CONT4 ;CONT4=0E, esto es para la secuencia 4 guardada en memoria
MOVLW 8
MOVWF CONT ;CONT=8, contador usado en la secuencia 4
CLRF PORTB ;limpio el puerto B

;miro que switch fue oprimido
VERIFICO:
BTFSC PORTA,0 ;miro si el bit 0 del puerto A esta en 1
GOTO SECU1 ;si esta en 1 salto a SECU1
BTFSC PORTA,1 ;miro si el bit 1 del puerto A esta en 1
GOTO SECU2 ;si esta en 1 salto a SECU2
BTFSC PORTA,2 ;miro si el bit 2 del puerto A esta en 1
GOTO SECU3 ;si esta en 1 salto a SECU3
BTFSC PORTA,3 ;miro si el bit 3 del puerto A esta en 1
GOTO SECU4 ;si esta en 1 salto a SECU4
GOTO VERIFICO ;vuelvo a verificar


SECU1
CLRF PORTB
BSF PORTB,RB0
CALL RETARDO
BCF PORTB,RB0
BSF PORTB,RB1
CALL RETARDO
BCF PORTB,RB1
BSF PORTB,RB2
CALL RETARDO
BCF PORTB,RB2
BSF PORTB,RB3
CALL RETARDO
BCF PORTB,RB3
BSF PORTB,RB4
CALL RETARDO
BCF PORTB,RB4
BSF PORTB,RB5
CALL RETARDO
BCF PORTB,RB5
BSF PORTB,RB6
CALL RETARDO
BCF PORTB,RB6
BSF PORTB,RB7
CALL RETARDO
BCF PORTB,RB7
GOTO VERIFICO

SECU2
CLRF PORTB
MOVLW 0x01
MOVWF PORTB
CALL RETARDO
MOVLW 0x03
MOVWF PORTB
CALL RETARDO
MOVLW 0x07
MOVWF PORTB
CALL RETARDO
MOVLW 0x0F
MOVWF PORTB
CALL RETARDO
MOVLW 0x1F
MOVWF PORTB
CALL RETARDO
MOVLW 0x3F
MOVWF PORTB
CALL RETARDO
MOVLW 0x7F
MOVWF PORTB
CALL RETARDO
MOVLW 0xFF
MOVWF PORTB
CALL RETARDO
CLRF PORTB
CALL RETARDO
MOVLW 0xFF
MOVWF PORTB
CALL RETARDO
CLRF PORTB
CALL RETARDO
MOVLW 0xFF
MOVWF PORTB
CALL RETARDO
GOTO VERIFICO



SECU3
BCF STATUS, RP0
MOVF CONT3,0
MOVWF EEADR
BSF STATUS, RP0
BSF EECON1, RD
BCF STATUS, RP0
MOVF EEDATA, W
MOVWF PORTB
CALL RETARDO
DECFSZ CONT3,1
GOTO SECU3
MOVLW 5
MOVWF CONT3
GOTO VERIFICO

SECU4
BCF STATUS, RP0
MOVF CONT4,0
MOVWF EEADR
BSF EECON1, RD
BCF STATUS, RP0
MOVF EEDATA, W
MOVWF PORTB
CALL RETARDO
DECF CONT4,1
DECFSZ CONT,1
GOTO SECU4
MOVLW 0EH
MOVWF CONT4
MOVLW 8
MOVWF CONT
GOTO VERIFICO

RETARDO
CLRF CUENTA
CLRF CUENTA+1
RETARDO1
DECFSZ CUENTA,1
GOTO RETARDO1
DECFSZ CUENTA+1,1
GOTO RETARDO1
RETURN

END ;Fin del programa


disculpa que te moleste tanto con esto!


----------



## ByAxel (Oct 20, 2010)

Borra
.
ORG 0CH
CUENTA RES 2	 ;guardo dos lugares de memoria que seran usados para el delay
ACUM	EQU 0EH	;creo un acumulador extra que luego sera usado
.
no se para que está si las variables ya las tienes definidas mas arriba...


----------



## lucianovan (Oct 20, 2010)

Gracias axel!!! me aparecio el mejor mensaje del mundo: BUILD SUCCEEDED!!!!

y fue gracias a tu ayuda!

Disculpa por el tiempo que te quite, y muchas gracias por ayudarme con el codigo, te lo agradezco.

Saludos!


----------



## ByAxel (Oct 20, 2010)

No hay problema, suerte...


----------



## riff007 (Ene 14, 2011)

ByAxel dijo:


> No hay problema, suerte...



Hola axel, nose si te llegara el msj, porque todavia no puedo enviar mensajes privados.

Queria saber si me podias ayudar con un codigo. 

Te paso el post donde comente mi problema.

https://www.forosdeelectronica.com/f23/problema-circuito-termostato-pic-lm35-49837/


Saludos!


----------

