ah se me olvido colocar el código:
CBLOCK 0x0020
Primer_digito,Segundo_digito,Tercer_digito,Cuarto_digito,Quinto_digito,Sexto_digito,Septimo_digito,Octavo_digito
Contador_bits,dato_lectora,Dato_completo
w_Anterior,status_Anterior,pclath_Anterior
CtteBaud, Auxiliar
Dato_Enviado1,puntero
Offset_L,Offset_H,Aux_w
Contador_cedula,var,flagx
ENDC
#Define green PORTC,0
#Define red PORTC,1
;--------------------------------------------------------------------
; Vectores de inicio...
ORG 0x0000
nop
goto INICIO
ORG 0x0004
nop
movwf w_Anterior
movf STATUS,w
movwf status_Anterior
movf PCLATH,w
movwf pclath_Anterior
Pagesel INTERRUPCION
goto INTERRUPCION
goto INTERRUPCION
;--------------------------------------------------------------------
; Tabla de mensajes...
;--------------------------------------------------------------------
; Archivos de cabecera...
Include "TX-USART-F87XA.INC"
;--------------------------------------------------------------------
;********************************************************************
; Programa principal...
;********************************************************************
INICIO:
call Cond_Iniciales
call mensaje_serial_1
Principal:
btfsc Dato_completo,0
call Procesar_dato
btfsc flagx,1
call compare
goto Principal
;********************************************************************
;--------------------------------------------------------------------
; Subrutinas...
;-------------------------------------------------------------------
Cond_Iniciales:
banksel PORTB
clrf PORTB
banksel TRISB
movlw b'00000011'
movwf TRISB
banksel PORTC
clrf PORTC
banksel TRISC
movlw b'10000000'
movwf TRISC
banksel OPTION_REG
movlw b'00000000'
movwf OPTION_REG
movlw .25
movwf CtteBaud
call IniUSART
banksel TXSTA
movlw 0x24
movwf TXSTA
banksel RCSTA
movlw b'10010000'
movwf RCSTA
banksel STATUS
movlw .11
movwf Contador_bits
movlw 0x00
movwf puntero
movlw 0x00
movwf Contador_cedula
movlw 0x00
movwf Dato_completo
bcf INTCON,INTF
movf PORTB,w
banksel INTCON
movlw b'00010000'
movwf INTCON
bsf INTCON,7
movlw 0x20
movwf FSR
bsf flagx,0
return
;-------------------------------------------------------------------
INTERRUPCION:
btfsc flagx,0
call mensaje_serial_2
bcf INTCON,INTF
bsf STATUS,C
movlw .11
subwf Contador_bits,w
btfsc STATUS,C
goto get_out
bsf STATUS,C
movlw 0x03
subwf Contador_bits,w
btfss STATUS,C
goto fin_interrupcion
btfss PORTB,1
goto $+4
bsf STATUS,C
rrf dato_lectora
goto $+3
bcf STATUS,C
rrf dato_lectora
goto get_out
fin_interrupcion:
movlw 0x01
xorwf Contador_bits,w
btfss STATUS,Z
goto get_out
bsf Dato_completo,0
movlw .12
movwf Contador_bits
get_out:
bcf flagx,0
decf Contador_bits,f
movf pclath_Anterior,w
movwf PCLATH
movf status_Anterior,w
movwf STATUS
movf w_Anterior,w
retfie
;--------------------------------------------------------------------
mensaje_serial_1:
movlw LOW(Mensaje_2)
movwf Offset_L
movlw HIGH(Mensaje_2)
movwf Offset_H
movf puntero,w
addwf Offset_L,f
btfss STATUS,Z
goto $+3
movlw .1
addwf Offset_H,f
movf Offset_H,w
movwf PCLATH
movf puntero,w
Lcall Tabla_ini
movwf var
movlw 0x00
addwf var,w
btfsc STATUS,Z
goto salir_mensaje_1
movf var,w
call DatoUSART_Tx
incf puntero,f
goto mensaje_serial_1
salir_mensaje_1:
movlw 0x00
movwf puntero
return
;--------------------------------------------------------------------
Procesar_dato:
bcf Dato_completo,0
movlw 0x00
movwf puntero
movlw 0x08
bcf STATUS,Z
xorwf Contador_cedula,w
btfss STATUS,Z
goto Ciclo_Procesar_dato
movlw 0x0D
call DatoUSART_Tx
movlw 0x0A
call DatoUSART_Tx
call mensaje_serial_2
movlw 0x00
movwf Contador_cedula
movlw 0x00
movwf puntero
movlw 0x20
movwf FSR
goto Ciclo_Procesar_dato
Ciclo_Procesar_dato:
movlw LOW(Msj_1)
movwf Offset_L
movlw HIGH(Msj_1)
movwf Offset_H
movf puntero,w
addwf Offset_L,f
btfss STATUS,Z
goto $+3
movlw .1
addwf Offset_H,f
movf Offset_H,w
movwf PCLATH
movf puntero,w
call Tabla_lectora
movwf Aux_w
bcf STATUS,Z
xorwf dato_lectora,w
btfsc STATUS,Z
goto get_next
bcf STATUS,Z
movlw 0x00
addwf Aux_w
btfsc STATUS,Z
goto salir_procesar
bcf STATUS,C
movlw 0x02
addwf puntero
goto Ciclo_Procesar_dato
get_next:
incf puntero
movf puntero,w
call Tabla_lectora
movwf INDF
call DatoUSART_Tx
incf FSR
incf Contador_cedula
bcf STATUS,Z
movlw 0x08
xorwf Contador_cedula,w
btfss STATUS,Z
goto salir_procesar
bsf flagx,1
salir_procesar:
movlw 0x00
movwf dato_lectora
movlw 0x00
movwf puntero
return
;--------------------------------------------------------------------
mensaje_serial_2:
movlw LOW(Mensaje_1)
movwf Offset_L
movlw HIGH(Mensaje_1)
movwf Offset_H
movf puntero,w
addwf Offset_L,f
btfss STATUS,Z
goto $+3
movlw .1
addwf Offset_H,f
movf Offset_H,w
movwf PCLATH
movf puntero,w
Lcall Tabla_CI
movwf var
movlw 0x00
addwf var
btfsc STATUS,Z
goto salir_mensaje_2
movf var,w
call DatoUSART_Tx
incf puntero,f
goto mensaje_serial_2
salir_mensaje_2:
return
;--------------------------------------------------------------------
compare:
bcf STATUS,Z
movlw '1'
xorwf Primer_digito,w
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '8'
xorwf Segundo_digito,w
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '5'
xorwf Tercer_digito
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '2'
xorwf Cuarto_digito
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '7'
xorwf Quinto_digito
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '5'
xorwf Sexto_digito
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '9'
xorwf Septimo_digito
btfss STATUS,Z
goto acceso_negado
bcf STATUS,Z
movlw '1'
xorwf Octavo_digito
btfss STATUS,Z
goto acceso_negado
bcf red
bsf green
call mensaje_acceso
goto salir_compare
acceso_negado:
bcf green
bsf red
movlw 0x00
movwf puntero
ciclo_negado:
movlw LOW(Mensaje_AN)
movwf Offset_L
movlw HIGH(Mensaje_AN)
movwf Offset_H
movf puntero,w
addwf Offset_L,f
btfss STATUS,Z
goto $+3
movlw .1
addwf Offset_H,f
movf Offset_H,w
movwf PCLATH
movf puntero,w
Lcall Tabla_AN
movwf var
movlw 0x00
addwf var,w
btfsc STATUS,Z
goto salir_compare
movf var,w
call DatoUSART_Tx
incf puntero,f
goto ciclo_negado
salir_compare:
bcf flagx,1
return
;--------------------------------------------------------------------
mensaje_acceso:
movlw 0x00
movwf puntero
mensaje_serial_A:
movlw LOW(Mensaje_Acc)
movwf Offset_L
movlw HIGH(Mensaje_Acc)
movwf Offset_H
movf puntero,w
addwf Offset_L,f
btfss STATUS,Z
goto $+3
movlw .1
addwf Offset_H,f
movf Offset_H,w
movwf PCLATH
movf puntero,w
Lcall Tabla_Acc
movwf var
movlw 0x00
addwf var
btfsc STATUS,Z
goto salir_mensaje_A
movf var,w
call DatoUSART_Tx
incf puntero,f
goto mensaje_serial_A
salir_mensaje_A:
return
;--------------------------------------------------------------------
Tabla_lectora: addwf PCL,f
Msj_1 EQU $
DT 0x45,'0',0x16,'1',0x1e,'2',0x26,'3',0x25,'4',0x2E,'5',0x36,'6',0x3d,'7',0x3e,'8',0x46,'9',0x00
Tabla_ini: addwf PCL,f
Mensaje_2: EQU $
DT " ***Cerradura Electronica*** ",0x0D,0x0A,0x00
Tabla_CI: addwf PCL,f
Mensaje_1: EQU $
DT "C.I.: ",0x00
Tabla_AN: addwf PCL,f
Mensaje_AN: EQU $
DT 0x0D,0x0A,"Usted no puede entrar a las instalaciones",0x0D,0x0A,0x00
Tabla_Acc: addwf PCL,f
Mensaje_Acc: EQU $
DT 0x0D,0x0A,"Usted puede ingresar",0x0D,0x0A,0x00
;--------------------------------------------------------------------
; Fin del programa...
Fin:
END
;********************************************************************
;--------------------------------------------------------------------