Programa en ensamblador

Anuncio
D:\ACCESO\ACCESO.ASM
;Programa para el control de acceso a un sistema X
;mediante la introducción de una clave a través de un teclado
;matricial.
;Es posible cambiar la clave de acceso y guardarla en la EEPROM
;La velocidad de operación del PIC es Fosc = 4 MHz
;
;
ELABORO:
;
GUSTAVO VELAZQUEZ G.
;
Febrero de 2008
;
;***************************************************************
list
p=16f877
include "p16f877.inc"
ROTA
TEMP
TECLA
DIGITOS
DIR
equ
equ
equ
equ
equ
0x20
0x21
0x22
0x23
0x24
cblock 0x30
DIG1, DIG2, DIG3, DIG4
DIG5, DIG6, DIG7
endc
;.................................
org 0x00
goto
Inicio
org 0x05
Inicio
clrf
PORTA
clrf
PORTC
bsf
STATUS, RP0
movlw
0x06
movwf
ADCON1
movlw
B'110000'
movwf
TRISA
movlw
B'111'
movwf
TRISE
movlw
B'11111000'
movwf
TRISC
movlw
B'11010111'
movwf
OPTION_REG
bcf
STATUS, RP0
LecturaEEPROM
movlw
0x30
movwf
FSR
clrf
DIR
Leer
movf
DIR, W
bsf
STATUS,
movwf
EEADR
bsf
STATUS,
bcf
EECON1,
bsf
EECON1,
bcf
STATUS,
movf
EEDATA,
bcf
STATUS,
;Banco 0
RP1
;Banco 2
RP0
EEPGD
RD
RP0
W
RP1
;Banco 3
;Banco 2
;Banco 0
1
D:\ACCESO\ACCESO.ASM
movwf
incf
incf
movf
xorlw
btfss
goto
INDF
FSR, F
DIR, F
DIR, W
D'7'
STATUS, Z
Leer
;Se prepara la revisión del teclado
clrf
movlw
movwf
Escaneo
movlw
movwf
Escan
movf
movwf
movf
iorlw
movwf
comf
DIGITOS
0x30
FSR
;Inicia la revisión del teclado
B'11111110'
ROTA
ROTA, W
PORTA
PORTE, W
B'11111000'
TEMP
TEMP, F
btfsc
STATUS, Z
goto
Rotacion
ElimReb
call
Retardo
movf
PORTE, W
xorlw
0x07
btfsc
STATUS, Z
goto
ElimReb
movf
PORTE, W
xorlw
0x07
btfss
STATUS, Z
goto
$-3
call
Retardo
movf
PORTE, W
xorlw
0x07
btfss
STATUS, Z
goto
$-4
DeterminaTecla
comf
ROTA, W
call
Renglon
movwf
TECLA
movf
TEMP, W
call
Columna
addwf
TECLA, F
movf
TECLA, W
xorlw
D'10'
btfsc
STATUS, Z
goto
CambioClave
Gato?
movf
TECLA, W
xorlw
D'12'
btfsc
STATUS, Z
goto
Cancelar
RevisionClave
movf
TECLA, W
;Ejemplo: W = B'00000110'
;
W = B'11111110'
;
TEMP = B'11111110'
;
TEMP = B'00000001'
;El valor de TEMP solo puede ser
;1, 2 o 4
;Ninguna tecla oprimida?
;No, ninguna oprimida
;Si, alguna está siendo oprimida
;por lo que se elimina el rebote
;del botón pulsador
;Se determina el valor de la tecla
;que ha sido pulsada
;Se revisa
;si
;no se oprimió el asterisco?
;Sí se oprimio
;No se oprimio, se revisa
;si
;no se oprimio el gato?
;Sí se oprimió, va a cancelar
;No se oprimió, se revisa si el valor
2
D:\ACCESO\ACCESO.ASM
xorwf
btfss
goto
incf
incf
movf
xorlw
btfss
goto
goto
INDF, W
;de la tecla pulsada corresponde al dígito
STATUS, Z
;que debe ser, de acuerdo a la clave de acceso
Alarma
;Si no corresponde, va a la alarma
FSR, F
;Si es correcto, se incrementa el apuntador
DIGITOS, F ;y el contador de digitos o pulsaciones del teclado
DIGITOS, W ;Si se han hecho siete
D'7'
;pulsaciones correctas
STATUS, Z
;va a activar o iniciar el sistema
Escan
;Si aún no se completa la clave, va a revisar el teclado
ActivarSistema
Rotacion
bsf
rlf
btfsc
goto
goto
STATUS, C
ROTA, F
ROTA, 4
Escan
Escaneo
CambioClave
bsf
clrf
movlw
movwf
PORTC, 2
DIGITOS
0x30
FSR
Escaneo1
movlw
movwf
Escan1
movf
movwf
movf
iorlw
movwf
comf
;Se hace
;la rotación del "cero"
;Se hicieron ya 4 rotaciones?
;No
;Sí
B'11111110'
ROTA
ROTA, W
PORTA
PORTE, W
B'11111000'
TEMP
TEMP, F
btfsc
STATUS, Z
goto
Rotacion1
ElimReb1
call
Retardo
movf
PORTE, W
xorlw
0x07
btfsc
STATUS, Z
goto
ElimReb1
movf
PORTE, W
xorlw
0x07
btfss
STATUS, Z
goto
$-3
call
Retardo
movf
PORTE, W
xorlw
0x07
btfss
STATUS, Z
goto
$-4
DeterminaTecla1
comf
ROTA, W
call
Renglon
movwf
TECLA
movf
TEMP, W
call
Columna
addwf
TECLA, F
movf
TECLA, W
;Ejemplo: W = B'00000110'
;
W = B'11111110'
;
TEMP = B'11111110'
;
TEMP = B'00000001'
;El valor de TEMP solo puede ser
;1, 2 o 4
;Ninguna tecla oprimida?
;No, ninguna oprimida
;Si, alguna está oprimida
;Se revisa
3
D:\ACCESO\ACCESO.ASM
xorlw
D'10'
btfsc
STATUS, Z
goto
Cancelar
Gato1?
movf
TECLA, W
xorlw
D'12'
btfsc
STATUS, Z
goto
Cancelar
AlmacenaDigitos
movf
TECLA, W
movwf
INDF
incf
FSR, F
incf
DIGITOS, F
movf
DIGITOS, W
xorlw
D'7'
btfss
STATUS, Z
goto
Escan1
goto
Guardar
Rotacion1
bsf
rlf
btfsc
goto
goto
STATUS, C
ROTA, F
ROTA, 4
Escan1
Escaneo1
Guardar
movlw
movwf
btfsc
goto
call
btfsc
goto
btfss
goto
call
btfss
goto
B'11110111'
PORTA
PORTE, 2
$-1
Retardo
PORTE, 2
$-2
PORTE, 2
$-1
Retardo
PORTE, 2
$-2
;si
;no se oprimio el asterisco?
;Sí se oprimió, va a cancelar el cambio de clave
;No, se oprimió, se revisa
;si
;no se oprimió el gato?
;Sí se oprimió, va a cancelar
;Se hace
;la rotación del "cero"
;Se hicieron ya 4 rotaciones?
;No
;Sí
EscribirEEPROM
movlw
0x30
movwf
FSR
clrf
DIR
Escrib
movf
DIR, W
bsf
STATUS, RP1
movwf
EEADR
bcf
STATUS, RP1
movf
INDF, W
bsf
STATUS, RP1
movwf
EEDATA
bsf
STATUS, RP0
bcf
EECON1, EEPGD
bsf
EECON1, WREN
movlw
0x55
movwf
EECON2
movlw
0xAA
movwf
EECON2
bsf
EECON1, WR
bcf
EECON1,WREN
;BAnco 2
;Banco 0
;Banco 2
;Banco 3
4
D:\ACCESO\ACCESO.ASM
btfsc
goto
bcf
bcf
incf
incf
movf
xorlw
btfss
goto
EECON1,
$-1
STATUS,
STATUS,
FSR, F
DIR, F
DIR, W
D'7'
STATUS,
Escrib
WR
RP0
RP1
;Banco 0
Z
clrf
DIGITOS
movlw
0x30
movwf
FSR
bcf
PORTC, 2
goto
Escaneo
;...................................................
ActivarSistema
bsf
PORTC, 1
goto
$
Alarma
bsf
goto
Cancelar
movlw
movwf
Cance
bsf
call
call
bcf
call
call
decfsz
goto
goto
PORTC, 0
$
D'5'
TEMP
PORTC, 2
Retardo
Retardo
PORTC, 2
Retardo
Retardo
TEMP, F
Cance
LecturaEEPROM
;.........................................
Retardo
;100 ms aprox.
movlw
D'61'
movwf
TMR0
bcf
INTCON, T0IF
btfss
INTCON, T0IF
goto
$-1
movlw
D'61'
movwf
TMR0
bcf
INTCON, T0IF
btfss
INTCON, T0IF
goto
$-1
return
;..............................
Renglon
addwf
PCL, F
nop
retlw
D'0'
retlw
D'3'
nop
retlw
D'6'
5
D:\ACCESO\ACCESO.ASM
nop
nop
nop
retlw
D'9'
Columna
addwf
PCL, F
nop
retlw
D'1'
retlw
D'2'
nop
retlw
D'3'
;.......................
end
6
Descargar