list P=16F877A
include <p16f877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
goto inicio
temp equ 0x20
numreg equ 0x21
reg1 equ 0x22
reg2 equ 0x23
reg3 equ 0x24
reg4 equ 0x25
temp1 equ 0x26
rep equ 0x27
dataeep equ 0x28
adreep equ 0x29
org 0x05
inicio
bcf STATUS,RP1
bsf STATUS,RP0
clrf TRISB
clrf TRISD
movlw 0x70
movwf TRISC
movlw b'00000100'
movwf OPTION_REG
movlw 0X06
movwf ADCON1
clrf TRISE
bcf STATUS,RP0
movlw b'00110000'
movwf T1CON
clrf PORTB
clrf PORTC
clrf numreg
movlw 0XFF
movwf temp
clrf reg1
clrf reg2
clrf reg3
clrf reg4
clrf temp1
clrf PORTD
movlw 0x03
movwf rep
clrf dataeep
movlw 0x00
call leer
movwf dataeep
movlw 0xFF
xorwf dataeep,W
btfsc STATUS,Z
call clave1
movlw b'00111000'
call control
movlw b'00001100'
call control
movlw b'00000110'
call control
clrw
verLCD
call limpiar
movlw 0x14
call control
movlw "I"
call escribirLcd
movlw "n"
call escribirLcd
movlw "g"
call escribirLcd
movlw "r"
call escribirLcd
movlw "e"
call escribirLcd
movlw "s"
call escribirLcd
movlw "e"
call escribirLcd
movlw "00010100"
call escribirLcd
movlw "c"
call escribirLcd
movlw "l"
call escribirLcd
movlw "a"
call escribirLcd
movlw "v"
call escribirLcd
movlw "e"
call escribirLcd
tabla
addwf PCL,F
retlw b'00111111'
retlw b'00000110'
retlw b'01011011'
retlw b'01001111'
retlw b'01100110'
retlw b'01101101'
retlw b'01111101'
retlw b'00000111'
retlw b'01111111'
retlw b'01101111'
retlw b'01110111'
retlw b'01111100'
retlw b'00111001'
retlw b'01011110'
retlw b'01111001'
retlw b'00110001'
guardar
btfsc rep,2
return
movlw 0x07
addwf numreg,F
movf numreg,W
addwf PCL,F
nop
nop
nop
nop
nop
nop
nop
call ordenar
movlw "*"
call escribirLcd
movf temp1,w
movwf reg4
bsf rep,2
return
nop
movlw "*"
call escribirLcd
movf temp1,W
movwf reg3
bsf rep,2
return
nop
movlw "*"
call escribirLcd
movf temp1,W
movwf reg2
return
nop
movlw "*"
call escribirLcd
movf temp1,w
movwf reg1
bsf T1CON,TMR1ON
call Demora
goto full
bucle
movlw 0x03
andwf rep,W
call tabla
movwf PORTD
movlw 0x01
movwf PORTC
btfsc PORTC,4
goto d1
btfsc PORTC,5
goto d2
btfsc PORTC,6
goto d3
movlw 0x02
movwf PORTC
btfsc PORTC,4
goto d4
btfsc PORTC,5
goto d5
btfsc PORTC,6
goto d6
movlw 0x04
movwf PORTC
btfsc PORTC,4
goto d7
btfsc PORTC,5
goto d8
btfsc PORTC,6
goto d9
movlw 0x08
movwf PORTC
btfsc PORTC,4
goto dadmin
btfsc PORTC,5
goto d0
btfsc PORTC,6
goto borrar
bcf rep,2
goto bucle
d1
movlw 0x01
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d2
movlw 0x02
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d3
movlw 0x03
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d4
movlw 0x04
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d5
movlw 0x05
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d6
movlw 0x06
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d7
movlw 0x07
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d8
movlw 0x08
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d9
movlw 0x09
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movwf temp
goto bucle
d0
movlw 0x00
movwf temp1
xorwf temp,W
btfss STATUS,Z
call guardar
movlw 0xFF
movwf temp
goto bucle
dadmin
bsf rep,3
call limpiar
movlw 0x14
call control
movlw "A"
call escribirLcd
movlw "d"
call escribirLcd
movlw "m"
call escribirLcd
movlw "i"
call escribirLcd
movlw "n"
call escribirLcd
movlw "i"
call escribirLcd
movlw "s"
call escribirLcd
movlw "t"
call escribirLcd
movlw "r"
call escribirLcd
movlw "a"
call escribirLcd
movlw "r"
call escribirLcd
bsf T1CON,TMR1ON
call Demora
borrar
clrf reg1
clrf,porte
clrf reg2
clrf reg3
clrf reg4
clrf numreg
clrf temp
clrf temp1
goto verLCD
full
bcf rep,2
btfsc rep,4
goto cambiar
swapf reg4,F
movf reg4,W
addwf reg3,F
movlw 0x01
movwf adreep
call leer
xorwf reg3,W
btfsc STATUS,Z
goto segunda
goto erronea
Demora
btfss PIR1,TMR1IF
goto Demora
bcf T1CON, TMR1ON
bcf PIR1,TMR1IF
clrf TMR1H
clrf TMR1L
return
leer
movf adreep,W
bcf STATUS,RP0
bsf STATUS,RP1
movwf EEADR
bsf STATUS,RP0
bcf EECON1,EEPGD
bsf EECON1,RD
bcf STATUS,RP0
movf EEDATA,W
bcf STATUS,RP1
return
escribir
movf adreep,W
bcf STATUS,RP0
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
movf dataeep,W
bsf STATUS,RP1
movwf EEDATA
bsf STATUS,RP0
bcf EECON1,EEPGD
bsf EECON1,WREN
bcf INTCON,GIE
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
b2
btfsc EECON1,WR
goto b2
bcf PIR2,EEIF
bcf EECON1,WREN
bcf STATUS,RP0
bcf STATUS,RP1
return
clave1
movlw 0x12
movwf dataeep
movlw 0x01
movwf adreep
call escribir
movlw 0x34
movwf dataeep
movlw 0x02
movwf adreep
call escribir
clrw
return
segunda
swapf reg2,F
movf reg2,W
addwf reg1,F
movlw 0x02
movwf adreep
call leer
xorwf reg1,W
btfss STATUS,Z
goto erronea
call limpiar
movlw 0x14
call control
movlw "C"
call escribirLcd
movlw "l"
call escribirLcd
movlw "a"
call escribirLcd
movlw "v"
call escribirLcd
movlw "e"
call escribirLcd
movlw 0x14
call escribirLcd
movlw "c"
call escribirLcd
movlw "o"
call escribirLcd
movlw "r"
call escribirLcd
movlw "r"
call escribirLcd
movlw "e"
call escribirLcd
movlw "c"
call escribirLcd
movlw "t"
call escribirLcd
movlw "a"
call escribirLcd
bsf T1CON,TMR1ON
call Demora
bsf rep, 0
bsf rep, 1
btfss rep,3
goto abrir
call limpiar
movlw 0x14
call control
movlw "N"
call escribirLcd
movlw "u"
call escribirLcd
movlw "e"
call escribirLcd
movlw "v"
call escribirLcd
movlw "a"
call escribirLcd
movlw 0x14
call escribirLcd
movlw "c"
call escribirLcd
movlw "l"
call escribirLcd
movlw "a"
call escribirLcd
movlw "v"
call escribirLcd
movlw "e"
call escribirLcd
bsf T1CON,TMR1ON
call Demora
bsf rep,4
goto borrar
cambiar
swapf reg4,F
movf reg4,W
addwf reg3,W
movwf dataeep
movlw 0x01
movwf adreep
call escribir
swapf reg2,F
movf reg2,W
addwf reg1,W
movwf dataeep
movlw 0x02
movwf adreep
call escribir
clrf adreep
call leer
clrf adreep
movwf dataeep
decf dataeep,F
call escribir
call limpiar
movlw 0x14
call control
movlw "C"
call escribirLcd
movlw "l"
call escribirLcd
movlw "a"
call escribirLcd
movlw "v"
call escribirLcd
movlw "e"
call escribirLcd
movlw 0x14
call escribirLcd
movlw "C"
call escribirLcd
movlw "a"
call escribirLcd
movlw "m"
call escribirLcd
movlw "b"
call escribirLcd
movlw "i"
call escribirLcd
movlw "a"
call escribirLcd
movlw "d"
call escribirLcd
movlw "a"
call escribirLcd
bsf T1CON,TMR1ON
call Demora
movlw 0x03
movwf rep
goto borrar
erronea
call limpiar
movlw 0x14
call control
movlw "C"
call escribirLcd
movlw "l"
call escribirLcd
movlw "a"
call escribirLcd
movlw "v"
call escribirLcd
movlw "e"
call escribirLcd
movlw 0x14
call escribirLcd
movlw "e"
call escribirLcd
movlw "r"
call escribirLcd
movlw "r"
call escribirLcd
movlw "o"
call escribirLcd
movlw "n"
call escribirLcd
movlw "e"
call escribirLcd
movlw "a"
call escribirLcd
bsf T1CON,TMR1ON
call Demora
decf rep,F
btfsc rep,0
goto borrar
btfsc rep,1
goto borrar
call limpiar
movlw 0x14
movlw "C"
call escribirLcd
movlw "a"
call escribirLcd
movlw "j"
call escribirLcd
movlw "a"
call escribirLcd
movlw 0x14
call escribirLcd
movlw "b"
call escribirLcd
movlw "l"
call escribirLcd
movlw "o"
call escribirLcd
movlw "q"
call escribirLcd
movlw "u"
call escribirLcd
movlw "e"
call escribirLcd
movlw "a"
call escribirLcd
movlw "d"
call escribirLcd
movlw "a"
call escribirLcd
clrw
call tabla
movwf PORTD
bloqueo
goto bloqueo
abrir
bsf PORTE,0
bsf T1CON,TMR1ON
call Demora
bsf T1CON,TMR1ON
call Demora
goto borrar
control
bcf PORTC,7
goto enviar
escribirLcd
bsf PORTC,7
enviar
bsf PORTD,7
movwf PORTB
clrf TMR0
call DemoraLcd
bcf PORTD,7
clrf TMR0
call DemoraLcd
return
limpiar
movlw 0x01
call control
return
DemoraLcd
btfss INTCON,T0IF
goto DemoraLcd
bcf INTCON,T0IF
return
ordenar
movlw b'11000000'
call control
movlw 0x14
call control
movlw 0x14
call control
movlw 0x14
call control
movlw 0x14
call control
movlw 0x14
call control
return
end