Asesoria en Programa en asm para pic 16f877A

Hola amigos les cuento estube durante todo este fin de semana hasta las altas horas de la noche tratando de hacer un programa para el pic16f877a y mas encima soy novato en este tema .bueno les cuento ,este programilla tiene que efectuar varias rutinas ingresadas por la PORTA desde una conbinacion de 4 BIT desde un dipswich cuyo resultado se reflejara en la salida (PORTB) a traves de 8 leds el tema es que lo termine pero tube problemas con mi pic ya que al grabarlo y en la etapa de test me salia un error algo de la direccion 000h no recuerdo muy bien entoces lo compile y lo simule en mi proteus cuyo esquema = lo adjunto y me funciono de maravillas todas las convinaciones pero al momento de probarlo en mi project board no hubo caso no me corria no se apreciaba ningun tipo de respuesta en la salida nada de nada efectue mediciones de continuidad en el cableado medi valores de tension de 0 y 5 volt respectibamente los cuales debian estar presente a medida que variaba la posicion del dipswitch pero nada lo grabe en tres Pic y ademas varie el tiempo entre 1s y 0.5 segundos en el retardo cambie el oscilador capacitores y nada de nada al final trabajamos con el programa que diseño mi compañero. ahjora lo que no puedo entender es que en el proteus funciona full sin problemas ahora quiero ver si alguien mas experimentado en este tema me pudiera ayudar a encontrar la solucion a este problema presente ya que no me quiero quedar con la duda de que si algo estoy haciendo mal al programar que en teoria si da resultado pero en la practica pudiera darme muchos problemas bueno gracias por su tiempo y su atencion.

combinacion para las respectivas entradas.

000 input_1
001 input_2
0010 input_3
0011 input_4
0100 input_5
0101 input_6
0110 input_7
0111 input_8
1000 input_9
1001 input_10

Nota: como fui corrijiendo el programilla se me quedaro algunos comentario que no actualize.
Gracias nuevamente.







Aldevharan
 

Adjuntos

  • Copia de prueba secuencia.txt
    18.4 KB · Visitas: 84
  • proteus circuit.JPG
    proteus circuit.JPG
    109.7 KB · Visitas: 109
Hola aldevharan... te cuento:

Los PIC no se llevan muy bien con las Protoboards (Project boards), me refiero a que las protoboards generan ruido eléctrico en los circuitos, especialmente en los que son en base a PIC, ya que los PIC son integrados delicados. Además, las boards tienen problemas de contactos cuando están muy usadas.

Yo también tuve ese problema, yo te recomiendo amigo mío que te hagas un circuito de pruebas para tu PIC en un PCB (Circuito impreso) de esta forma tu PIC funcionará sin ningún drama, te lo doy por seguro.

Por otras parte, si eres nuevo en este tema, puedes visitar mi blog de microcontroladores, ahí encontrarás cursos de assembler escritos por mi y toda la ayuda que necesites.... el curso está enfocado en el PIC 16F628A, pero al fin y al cabo todos los micros de la familia PIC son casi iguales.

Te dejo mi blog amigo mío para que lo visites... www.ingenieropic.wordpress.com

Esper te sea de ayuda.... suerte --Ingeniero--
 
Hola amigo mira tengo unas serias dudas acerca la programacion del PIC 16f877,la verdad me han dejado para crear un proyecto con ese Pic, lo estasmos llevando en el PROTEUS y en el MPLAB! pero la verdad no se nada de como utilizar comandos o sentencias en este lenguaje, kisiera ver si puedes subir un manual sobre como programar o que explique los codigos y para que sirven..., gracias de antemano.
 
Última edición:
q tal el motivo que les escribo es para ver si me pueden colaborar con este codigo asm lo que quiero es agregarle dos leds uno rojo y uno verde yo no manejo el asm pero me dfiendo no eh podido mofificar este codigo ya que lo saque de un libro y les pido la colaboracion lo que intento hacer es que el led rojo mantenga encendido y cuando presione bien la contraseña se apague el rojo y encienda el verde eso es todo me podrian colaborar por favor lese anexo el codigo de antemano muchas gracias colega :apreton:

Código:
LIST   P=16F877A



T_RELE	EQU	20H	;CONTROLA EL TIEMPO QUE EL RELE ACCIONA EL MARCO DE LA PUERTA
PCL	EQU	02H
STATUS	EQU	03H
PORTA	EQU	05H
DATO	EQU	06H	;PUERTO B
KEYB	EQU	07H
TRISA	EQU	05H
TRISB	EQU	06H
TRISC	EQU	07H
PUNTAB	EQU	20H
INTENTO	EQU	21H
TECLA	EQU	22H
CUENTA1	EQU	23H
CUENTA2	EQU	24H
CUENTA3	EQU	25H
COD1	EQU	26H
COD2	EQU	27H
COD3	EQU	28H
COD4	EQU	29H
CUENTA4	EQU	2AH
COD1A	EQU	2BH
COD2A	EQU	2CH
COD3A	EQU	2DH
COD4A	EQU	2EH
CODWRITE EQU	2FH
EEADR	EQU	10DH
EECON1	EQU	18CH
EECON2	EQU	18DH
EEDATA	EQU	10CH
INTCON	EQU	0BH
PIR2	EQU	0DH
PIE2	EQU	8DH
F	EQU	1
W	EQU	0

#DEFINE	EN	05H,2
#DEFINE	RW	05H,1
#DEFINE	RS	05H,0
#DEFINE ALA	05H,3
#DEFINE PORTERO 05H,5



	ORG	00H
	GOTO	INICIO
	ORG	04H
	BCF	PIR2,4
	RETFIE
TABLA	MOVWF	PCL
MEN_1	RETLW	'I'
	RETLW	'N'
	RETLW	'T'
	RETLW	'R'
	RETLW	'O'
	RETLW	'D'
	RETLW	'U'
	RETLW	'Z'
	RETLW	'C'
	RETLW	'A'
MEN_5	RETLW	' '
	RETLW	'C'
	RETLW	'L'
	RETLW	'A'
	RETLW	'V'
	RETLW	'E'
	RETLW	00H

MEN_2	RETLW	'P'
	RETLW	' U'
	RETLW	'E'
	RETLW	'D'
	RETLW	'E'
	RETLW	' '
	RETLW	'P'
	RETLW	'A'
	RETLW	'S'
	RETLW	'A'
	RETLW	'R'
	RETLW	00H

MEN_3	RETLW	'C'
	RETLW	'L'
	RETLW	'A'
	RETLW	'V'
	RETLW	'E'
	RETLW	' '
	RETLW	'I'
	RETLW	'N'
	RETLW	'C'
	RETLW	'O'
	RETLW	'R'
	RETLW	'R'
	RETLW	'E'
	RETLW	'C'
	RETLW	'T'
	RETLW	'A'
	RETLW	00H

MEN_4	RETLW	'C'
	RETLW	'A'
	RETLW	'M'
	RETLW	'B'
	RETLW	'I'
	RETLW	'O'
	RETLW	' '
	RETLW	'D'
	RETLW	'E'
	RETLW	00H

MEN_6	RETLW	' '
	RETLW	'A'
	RETLW	'N'
	RETLW	'T'
	RETLW	'I'
	RETLW	'G'
	RETLW	'U'
	RETLW	'A'
	RETLW	00H

MEN_7	RETLW	'N'
	RETLW	'U'
	RETLW	'E'
	RETLW	'V'
	RETLW	'A'
	RETLW	00H

MEN_8	RETLW	'V'
	RETLW	'E'
	RETLW	'R'
	RETLW	'I'
	RETLW	'F'
	RETLW	'I'
	RETLW	'Q'
	RETLW	'U'
	RETLW	'E'
	RETLW	00H

MEN_9	RETLW	' '
	RETLW	'C'
	RETLW	'A'
	RETLW	'M'
	RETLW	'B'
	RETLW	'I'
	RETLW	'A'
	RETLW	'D'
	RETLW	'A'
	RETLW	00H

MEN_10	RETLW	'L'
	RETLW	'A'
	RETLW	' '
	RETLW	'C'
	RETLW	'L'
	RETLW	'A'
	RETLW	'V'
	RETLW	'E'
	RETLW	' '
	RETLW	'D'
	RETLW	'E'
	RETLW	'B'
	RETLW	'E'
	RETLW	00H

MEN_11	RETLW	'T'
	RETLW	'E'
	RETLW	'N'
	RETLW	'E'
	RETLW	'R'
	RETLW	' '
	RETLW	'4'
	RETLW	' '
	RETLW	'D'
	RETLW	'I'
	RETLW	'G'
	RETLW	'I'
	RETLW	'T'
	RETLW	'O'
	RETLW	'S'
	RETLW	00H

MEN_12	RETLW	'I'
	RETLW	'N'
	RETLW	'T'
	RETLW	'E'
	RETLW	'N'
	RETLW	'T'
	RETLW	'E'
	RETLW	'L'
	RETLW	'O'
	RETLW	00H

MEN_13	RETLW	'D'
	RETLW	'E'
	RETLW	' '
	RETLW	'N'
	RETLW	'U'
	RETLW	'E'
	RETLW	'V'
	RETLW	'O'
	RETLW	00H


INICIO	CLRF	DATO
	CLRF	KEYB
	CLRF	PORTA
	BSF	STATUS,5
	MOVLW	06H
	MOVWF	9FH
	CLRF	DATO
	BCF	EN
	BCF	RW
	BCF	RS
	BCF	ALA
	BCF	PORTERO
	MOVLW	0F0H
	MOVWF	KEYB
	BCF	STATUS,5
	BCF	PIR2,4
	MOVLW	03H
	MOVWF	INTENTO
	

	CALL	INITLCD
	CALL	INITLCD
PRINCI	CALL	CLEARL


	MOVLW	00H
	CALL	SITUCU
	MOVLW	MEN_1
	CALL	ESCMEN

	MOVLW	44H
	CALL	SITUCU

ECOD12	CALL	SUELKEY
	CALL	ESPEKEY
	MOVWF	COD1
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD12
	MOVF	COD1,W
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	INCOR
	MOVF	COD1,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	CAMBIOC
	MOVF	COD1,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD12
	MOVLW	'*'
	CALL	WRITEL
ECOD22	CALL	SUELKEY


	CALL	ESPEKEY
	MOVWF	COD2
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD1
	MOVF	COD2,W
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	INCOR
	MOVF	COD2,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	CAMBIOC
	MOVF	COD2,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD22
	MOVLW	'*'
	CALL	WRITEL
ECOD32	CALL	SUELKEY

	CALL	ESPEKEY
	MOVWF	COD3
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD2
	MOVF	COD3,W
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	INCOR
	MOVF	COD3,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	CAMBIOC
	MOVF	COD3,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD32
	MOVLW	'*'
	CALL	WRITEL
ECOD42	CALL	SUELKEY
	
	CALL	ESPEKEY
	MOVWF	COD4
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD3
	MOVF	COD4,W
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	INCOR
	MOVF	COD4,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	CAMBIOC
	MOVF	COD4,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD42
	MOVLW	'*'
	CALL	WRITEL
	CALL	SUELKEY

	
FINCOD	CALL	ESPEKEY
	MOVWF	TECLA
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	FINCOD2
	MOVF	TECLA,W
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD4
	MOVF	TECLA,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	CAMBIOC
	GOTO	FINCOD

FINCOD2	MOVLW	00H
	CALL	LEECOD
	SUBWF	COD1
	BTFSS	STATUS,2
	GOTO	INCOR

	MOVLW	01H
	CALL	LEECOD
	SUBWF	COD2
	BTFSS	STATUS,2
	GOTO	INCOR

	MOVLW	02H
	CALL	LEECOD
	SUBWF	COD3
	BTFSS	STATUS,2
	GOTO	INCOR

	MOVLW	03H
	CALL	LEECOD
	SUBWF	COD4
	BTFSS	STATUS,2
	GOTO	INCOR

	
	CALL	CLEARL		;CLAVE CORRECTA
	MOVLW	02H
	CALL	SITUCU
	MOVLW	MEN_2
	CALL	ESCMEN
	MOVLW	03H
	MOVWF	INTENTO
	BSF	PORTERO
	MOVLW	T_RELE
	CALL	DELAY
	BCF	PORTERO
	MOVLW	10H
	CALL	DELAY
	GOTO	PRINCI

INCOR	MOVLW	0CH
	CALL	COMANDO
	CALL	CLEARL
	MOVLW	MEN_3
	CALL	ESCMEN
	DECFSZ	INTENTO,F
	GOTO	INCOR2
	GOTO	ALARMA
INCOR2	MOVLW	20H
	CALL	DELAY
	GOTO	PRINCI

ECOD1	MOVLW	44H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	44H
	CALL	SITUCU
	GOTO	ECOD12

ECOD2	MOVLW	45H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	45H
	CALL	SITUCU
	GOTO	ECOD22

ECOD3	MOVLW	46H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	46H
	CALL	SITUCU
	GOTO	ECOD32

ECOD4	MOVLW	47H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	47H
	CALL	SITUCU
	GOTO	ECOD42

ALARMA	MOVLW	1EH
	MOVWF	TECLA
ALARMA4	MOVLW	03H
	MOVWF	INTENTO
	MOVLW	00FH
	MOVWF	CUENTA1
	MOVLW	030H
	MOVWF	CUENTA2
ALARMA1	MOVLW	20H
	MOVWF	CUENTA4
	DECF	CUENTA1,F
	BTFSC	STATUS,2
	GOTO	ALARMA2
ALARMA3	BSF	ALA
	CALL	FRECU
	BCF	ALA
	CALL	FRECU
	DECFSZ	CUENTA4,F
	GOTO	ALARMA3
	GOTO	ALARMA1
		
ALARMA2	MOVLW	01H
	CALL	DELAY
	DECFSZ	TECLA,F
	GOTO	ALARMA4
	GOTO	PRINCI

FRECU	MOVF	CUENTA1,W
	MOVWF	CUENTA3
FRECU2	DECFSZ	CUENTA3,F
	GOTO	FRECU2
	DECFSZ	CUENTA2,F
	GOTO	FRECU
	MOVLW	030H
	MOVWF	CUENTA2
	RETURN

CAMBIOC	CALL	CLEARL
	MOVLW	MEN_4
	CALL	ESCMEN
	MOVLW	MEN_5
	CALL	ESCMEN
	MOVLW	20H
	CALL	DELAY
	CALL	CLEARL
	MOVLW	MEN_5
	CALL	ESCMEN
	MOVLW	MEN_6
	CALL	ESCMEN
	CALL	SUELKEY
	MOVLW	44H
	CALL	SITUCU	

	CALL	COGECOD
	MOVLW	00H
	CALL	LEECOD
	SUBWF	COD1
	BTFSS	STATUS,2
	GOTO	INCORE
	
	MOVLW	01H
	CALL	LEECOD
	SUBWF	COD2
	BTFSS	STATUS,2
	GOTO	INCORE

	MOVLW	02H
	CALL	LEECOD
	SUBWF	COD3
	BTFSS	STATUS,2
	GOTO	INCORE

	MOVLW	03H
	CALL	LEECOD
	SUBWF	COD4
	BTFSS	STATUS,2
	GOTO	INCORE

	MOVLW	03H
	MOVWF	INTENTO

NUEVACL	CALL	CLEARL
	MOVLW	02H
	CALL	SITUCU
	MOVLW	MEN_7
	CALL	ESCMEN
	MOVLW	MEN_5
	CALL	ESCMEN
	MOVLW	44H
	CALL	SITUCU
	CALL	SUELKEY
	CALL	COGECOD
	MOVF	COD1,W		
	BTFSC	STATUS,2
	GOTO	INCOREC
	MOVWF	COD1A
	MOVF	COD2,W
	BTFSC	STATUS,2
	GOTO	INCOREC
	MOVWF	COD2A
	MOVF	COD3,W
	BTFSC	STATUS,2
	GOTO	INCOREC
	MOVWF	COD3A
	MOVF	COD4,W
	BTFSC	STATUS,2
	GOTO	INCOREC
	MOVWF	COD4A

	CALL	CLEARL		;VERIFIQUE CLAVE
	MOVLW	MEN_8
	CALL	ESCMEN
	MOVLW	MEN_5
	CALL	ESCMEN
	MOVLW	44H
	CALL	SITUCU
	CALL	SUELKEY
	CALL	COGECOD
	MOVF	COD1,W		
	SUBWF	COD1A,W
	BTFSS	STATUS,2
	GOTO	NOVERI
	MOVF	COD2,W
	SUBWF	COD2A,W
	BTFSS	STATUS,2
	GOTO	NOVERI
	MOVF	COD3,W
	SUBWF	COD3A,W
	BTFSS	STATUS,2
	GOTO	NOVERI
	MOVF	COD4,W
	SUBWF	COD4A,W
	BTFSS	STATUS,2
	GOTO	NOVERI

	CALL	CLEARL		;CLAVE CAMBIADA
	MOVLW	MEN_5
	CALL	ESCMEN
	MOVLW	MEN_9
	CALL	ESCMEN

	MOVF	COD1,W
	MOVWF	CODWRITE
	MOVLW	00H
	CALL	EEWRITE

	MOVF	COD2,W
	MOVWF	CODWRITE
	MOVLW	01H
	CALL	EEWRITE

	MOVF	COD3,W
	MOVWF	CODWRITE
	MOVLW	02H
	CALL	EEWRITE

	MOVF	COD4,W
	MOVWF	CODWRITE
	MOVLW	03H
	CALL	EEWRITE
	MOVLW	20H
	CALL	DELAY

	GOTO	PRINCI

NOVERI	CALL	CLEARL
	MOVLW	03H
	CALL	SITUCU
	MOVLW	MEN_12
	CALL	ESCMEN
	MOVLW	43H
	CALL	SITUCU
	MOVLW	MEN_13
	CALL	ESCMEN
	MOVLW	20H
	CALL	DELAY
	GOTO	NUEVACL
	


INCOREC	CALL	CLEARL		;LA CLAVE DEBE TENER 4 DIGITOS
	MOVLW	MEN_10
	CALL	ESCMEN
	MOVLW	40H
	CALL	SITUCU
	MOVLW	MEN_11
	CALL	ESCMEN
	MOVLW	20H
	CALL	DELAY
	GOTO	PRINCI

INCORE	DECF	INTENTO,F
	BTFSC	STATUS,2
	GOTO	ALARMA
	CALL	CLEARL
	MOVLW	MEN_3
	CALL	ESCMEN
	MOVLW	20H
	CALL	DELAY
	CALL	SUELKEY
	GOTO	PRINCI
	
;-----------------------------------------------------------------
COGECOD	CLRF	COD1
	CLRF	COD2
	CLRF	COD3
	CLRF	COD4
ECOD12C	CALL	SUELKEY
	CALL	ESPEKEY
	MOVWF	COD1
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD12C
	MOVF	COD1,W
	SUBLW	'A'
	BTFSC	STATUS,2
	RETURN
	MOVF	COD1,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	ECOD12C
	MOVF	COD1,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD12C
	MOVLW	'*'
	CALL	WRITEL
ECOD22C	CALL	SUELKEY


	CALL	ESPEKEY
	MOVWF	COD2
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD1C
	MOVF	COD2,W
	SUBLW	'A'
	BTFSC	STATUS,2
	RETURN
	MOVF	COD2,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	ECOD22C
	MOVF	COD2,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD22C
	MOVLW	'*'
	CALL	WRITEL
ECOD32C	CALL	SUELKEY

	CALL	ESPEKEY
	MOVWF	COD3
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD2C
	MOVF	COD3,W
	SUBLW	'A'
	BTFSC	STATUS,2
	RETURN
	MOVF	COD3,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	ECOD32C
	MOVF	COD3,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD32C
	MOVLW	'*'
	CALL	WRITEL
ECOD42C	CALL	SUELKEY
	
	CALL	ESPEKEY
	MOVWF	COD4
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD3C
	MOVF	COD4,W
	SUBLW	'A'
	BTFSC	STATUS,2
	GOTO	RETU4
	MOVF	COD4,W
	SUBLW	'C'
	BTFSC	STATUS,2
	GOTO	ECOD42C
	MOVF	COD4,W
	SUBLW	'D'
	BTFSC	STATUS,2
	GOTO	ECOD42C
	MOVLW	'*'
	CALL	WRITEL
	CALL	SUELKEY

	
FINCODC	CALL	ESPEKEY
	MOVWF	TECLA
	SUBLW	'A'
	BTFSC	STATUS,2
	RETURN			;YA TENGO EL CÓDIGO
	MOVF	TECLA,W
	SUBLW	'B'
	BTFSC	STATUS,2
	GOTO	ECOD4C
	GOTO	FINCODC


ECOD1C	MOVLW	44H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	44H
	CALL	SITUCU
	CLRF	COD2
	GOTO	ECOD12C

ECOD2C	MOVLW	45H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	45H
	CALL	SITUCU
	CLRF	COD3
	GOTO	ECOD22C

ECOD3C	MOVLW	46H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	46H
	CALL	SITUCU
	CLRF	COD4
	GOTO	ECOD32C

ECOD4C	MOVLW	47H
	CALL	SITUCU
	MOVLW	' '
	CALL	WRITEL
	MOVLW	47H
	CALL	SITUCU
	GOTO	ECOD42C

RETU4	CLRF	COD4
	RETURN
	
;-----------------------------------------------------------------
;	LEECOD:		SUBRUTINA QUE LEE EL REGISTRO DE LA EEPROM
;			INDICADO POR EL ACUMULADOR Y LO DEVUELVE EN
;			ACUMULADOR

LEECOD	BSF	STATUS,6
	BCF	STATUS,5
	MOVWF	EEADR
	BSF	STATUS,5
	BCF	EECON1,7
	BSF	EECON1,0
	BCF	STATUS,5
	MOVF	EEDATA,W
	BCF	STATUS,6
	RETURN
;----------------------------------------------------------------

;-----------------------------------------------------------------

;	EEWRITE:	SUBRUTINA QUE ESCRIBE EN LA EEPRON DE DATOS
;			PASAR LA DIRECCION DE LA EEPRON A ESCRIBIR EN W Y EL DATO A ESCRIBIR EN CODWRITE

EEWRITE	BSF	STATUS,6
	BCF	STATUS,5
	MOVWF	EEADR
	BCF	STATUS,6
	MOVF	CODWRITE,W
	BSF	STATUS,6
	MOVWF	EEDATA
	BSF	STATUS,5
	BCF	EECON1,7
	BSF	EECON1,2
	BCF	INTCON,7
	MOVLW	55H
	MOVWF	EECON2
	MOVLW	0AAH
	MOVWF	EECON2
	BSF	EECON1,1
	BSF	INTCON,7
	BCF	STATUS,5
	BCF	STATUS,6
EEWRIT	BTFSS	PIR2,4
	GOTO	EEWRIT
	BSF	STATUS,5
	BSF	STATUS,6
	BCF	EECON1,2
	BCF	STATUS,5
	BCF	STATUS,6
	BCF	PIR2,4

	RETURN

	



	


;----------------------------------------------------------
;	GETKEY:	Subrutina que devuelve el valor pulsado en
;		un teclado hexadecimal en código ascii en W
;COL1: 0	COL2: 1		COL3: 2		COL4: 3
;ROW1: 4	ROW2: 5		ROW3: 6		ROW4: 7



GETKEY	MOVLW	0FH
	MOVWF	KEYB
	NOP
	MOVF	KEYB,W
	MOVWF	TECLA
	CALL	REBOTE
	MOVF	KEYB,W
	SUBWF	TECLA,F
	BTFSS	STATUS,2
	GOTO	GETKEY
	SUBLW	0FH
	BTFSS	STATUS,2
	GOTO	HAYTECL
	RETLW	0FH
HAYTECL	BTFSC	KEYB,4
	GOTO	ROW1
	BTFSC	KEYB,5
	GOTO	ROW2
	BTFSC	KEYB,6
	GOTO	ROW3
	BTFSC	KEYB,7
	GOTO	ROW4
	RETLW	0FH
ROW1	MOVLW	01H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,4
	RETLW	31H	;TECLA=1
	MOVLW	02H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,4
	RETLW	32H	;TECLA=2
	MOVLW	04H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,4
	RETLW	33H	;TECLA=3
	MOVLW	08H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,4
	RETLW	'A'	;TECLA=A
	RETLW	0FH

ROW2	MOVLW	01H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,5
	RETLW	34H	;TECLA=4
	MOVLW	02H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,5
	RETLW	35H	;TECLA=5
	MOVLW	04H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,5
	RETLW	36H	;TECLA=6
	MOVLW	08H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,5
	RETLW	'B'	;TECLA=B
	RETLW	0FH

ROW3	MOVLW	01H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,6
	RETLW	37H	;TECLA=7
	MOVLW	02H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,6
	RETLW	38H	;TECLA=8
	MOVLW	04H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,6
	RETLW	39H	;TECLA=9
	MOVLW	08H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,6
	RETLW	'C'	;TECLA=C
	RETLW	0FH

ROW4	MOVLW	01H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,7
	RETLW	'*'	;TECLA=*
	MOVLW	02H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,7
	RETLW	30H	;TECLA=0
	MOVLW	04H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,7
	RETLW	'#'	;TECLA=#
	MOVLW	08H
	MOVWF	KEYB
	NOP
	BTFSC	KEYB,7
	RETLW	'D'	;TECLA=D
	RETLW	0FH
;----------------------------------------------------------------
;-----------------------------------------------------------
;	SUELKEY:	SUBRUTINA QUE ESPERA A QUE SE SUELTE
;			LA TECLA PULSADA

SUELKEY CALL	GETKEY
	SUBLW	0FH
	BTFSC	STATUS,2
	RETURN
	GOTO	SUELKEY
;-----------------------------------------------------------
;---------------------------------------------------------------------
;     	ESPEKEY:	SUBRUTINA QUE ESPERA A QUE SE PULSE UNA TECLA
;			DEVUELVE EL VALOR EN W Y TECLA

ESPEKEY	CALL	GETKEY
	MOVWF	TECLA
	SUBLW	0FH
	BTFSC	STATUS,2
	GOTO	ESPEKEY
	MOVF	TECLA,W
	RETURN
;----------------------------------------------------------------------


;--------------------------------------------------------------------------------------------
;	   ESCMEN:	SUBRUTINA QUE ESCRIBE UN MENSAJE EN EL LCD, 
;			PASAR INICIO DE TABLA EN ACUMULADOR

ESCMEN	MOVWF	PUNTAB
ESCMEN2	CALL	TABLA
	ADDLW	00H
	BTFSC	STATUS,2
	RETURN
	CALL	WRITEL
	INCF	PUNTAB,F
	MOVF	PUNTAB,W
	GOTO	ESCMEN2
;-------------------------------------------------------------------------------------------

	

;-------------------------------------------------------------------------------------------
;          WAITLCD:	SUBRUTINA DE ESPERA AL LCD

WAITLCD	BSF	STATUS,5
	MOVLW	0FFH
	MOVWF	DATO
	BCF	STATUS,5
	BSF	EN
	BCF	RS
	BSF	RW
	MOVLW	0FFH
	MOVWF	DATO
WAITLC	BTFSC	DATO,7
	GOTO	WAITLC
	BCF	EN
	BCF	RW
	BCF	DATO,7
	BSF	STATUS,5
	CLRF	DATO
	BCF	STATUS,5
	RETURN
;--------------------------------------------------------------------------------------------
	
	

;--------------------------------------------------------------------------------------------
;          INITLCD:	SUBRUTINA DE INICIALIZACIÓN DEL LCD

INITLCD	MOVLW	38H		;00111000
	CALL	COMANDO		;INTERFACE 8 BIT, 2 LINEAS
	MOVLW	0CH		;00001100
	CALL	COMANDO		;DISPLAY A ON, NO MUESTRA CURSOR, NO PARPADEO
	MOVLW	06H		;00000110
	CALL	COMANDO		;MUEVE CURSOR A LA DCHA DESPUES D ESCRIBIR, NO MUEVE VENTANA
	RETURN
;-------------------------------------------------------------------------------------------



;-------------------------------------------------------------------------------------------
;	   CLEARL:	SUBRUTINA QUE BORRA EL LCD Y LLEVA EL CURSOR AL LADO IZQUIERDO DEL
;			DISPLAY

CLEARL	MOVLW	01H
	CALL	COMANDO		;BORRADO
	RETURN
;--------------------------------------------------------------------------------------------

;--------------------------------------------------------------------------------------------
;	   WRITEL:	SUBRUTINA QUE ESCRIBE EN EL LCD EL CARACTER DEL ACUMULADOR

WRITEL	BSF	EN
	BSF	RS
	BCF	RW
	MOVWF	DATO
	BCF	EN
	CALL	WAITLCD
	RETURN
;---------------------------------------------------------------------------------------------


;---------------------------------------------------------------------------------------------
;	   COMANDO:	SUBRUTINA QUE ENVIA UN COMANDO AL LCD

COMANDO	BSF	EN
	BCF	RS
	BCF	RW
	MOVWF	DATO
	BCF	EN
	CALL	WAITLCD
	RETURN
;---------------------------------------------------------------------------------------------
;	   SITUCU:	SUBRUTINA QUE SITUA EL CURSOR EN LA DIRECCION INDICADA POR EL ACUMULADOR

SITUCU	IORLW	80H
	CALL	COMANDO
	RETURN
;----------------------------------------------------------------------------------------------
;=====================================================================
;***********  DELAY  ***********
;---------------------------------------------------------------------
;SUBRUTINA DE RETARDO SEGÚN EL VALOR DEL ACUMULADOR
;MODIFICA LOS SIGUIENTES REGISTROS
;	CUENTA1
;	CUENTA2
;	CUENTA3

DELAY	MOVWF	CUENTA1
DELAY3	MOVLW	0FFH
	MOVWF	CUENTA2
DELAY2	MOVLW	0FFH
	MOVWF	CUENTA3
DELAY1	DECFSZ	CUENTA3,F
	GOTO	DELAY1
	DECFSZ	CUENTA2,F
	GOTO	DELAY2
	DECFSZ	CUENTA1,F
	GOTO	DELAY3
	RETURN
;======================================================================
REBOTE	MOVLW	0FFH
	MOVWF	CUENTA1
REBO	DECFSZ	CUENTA1,F
	GOTO	REBO
	RETURN

	ORG	2100H
	DE	30H,30H,30H,30H

	END

no se donde tengo que colocar las rutinas de los leds :confused: :D

a se me olvidaba decirles que este proyecto es la cerradura electronica con el pic 16f877a
 
Última edición:
Atrás
Arriba