Práctica 3 - Microcontroladores

Anuncio
PRÁCTICA No. 3
Lectura y Escritura de la memoria EEPROM de datos
1.- En el programa ISIS crear un nuevo diseño con el siguiente circuito:
El circuito corresponde al de una cerradura electrónica, activada por clave.
En operación normal, el interruptor PROG deberá estar abierto. Después de energizar el circuito, el
display muestra el número 0000. La clave se introduce con los botones B1, B2, B3 y B4, los que de
manera independiente incrementan de 0 a 9 y regreso a 0, cada uno de los dígitos del display.
Una vez que la clave se muestra en el display, oprimir el botón ENT para introducirla. Si la clave es
correcta, encenderá el LED verde (D2) y permanecerá encendido hasta que se oprima el botón RESET.
Si la clave en incorrecta, entonces el LED rojo (D1) parpadeará hasta que se oprima el botón de
RESET.
Para cambiar la clave, cerrar el interruptor PROG y oprimir el botón RESET. El display mostrará la
clave actual. Esta puede ser modificada con los botones B1, B2, B3 y B4. Para guardar la nueva clave,
oprimir el botón ENT. Al final oprimir RESET para verificar que la nueva clave quedó almacenada en
la EEPROM de datos.
Para regresar a la operación normal, abrir el interruptor PROG y oprimir RESET.
2.- Agregar un nuevo archivo .ASM al proyecto, con el siguiente código:
list
p=16f877
include
DIR
equ
CONTA equ
"p16f877.inc"
0x20
0x21
movlw
movwf
movlw
movwf
bcf
B'111'
TRISE
B'11010101'
OPTION_REG
STATUS, RP0
movlw 0x30
movwf FSR
cblock 0x30
D1, D2, D3, D4
endc
cblock
0x50
CONT1, CONT2, CONT3, CONT4
endc
;..............................
ELIMREB
call
btfsc
goto
btfss
goto
call
btfss
goto
endm
macro PUERTO, BIT
Retardo
PUERTO, BIT
$-2
PUERTO, BIT
$-1
Retardo
PUERTO, BIT
$-2
clrf
LeerEEPROM
movf
bsf
bcf
movwf
bsf
bcf
bsf
bcf
movf
bcf
movwf
sublw
EEDATA
btfsc
;EEDATA > 9
goto
;No
DIR
DIR, W
STATUS,
STATUS,
EEADR
STATUS,
EECON1,
EECON1,
STATUS,
EEDATA,
STATUS,
INDF
D'9'
RP1
RP0 ;Banco 2
RP0 ;Banco 3
EEPGD
RD
RP0 ;Banco 2
W
RP1 ;Banco 0
;W = 9 -
STATUS, C
?
IncrDIR
;...............................
org
goto
org
Inicio
clrf
clrf
clrf
clrf
clrf
bsf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
0x00
Inicio
0x05
PORTA
PORTB
PORTC
PORTD
PORTE
STATUS, RP0
0x06
ADCON1
B'111111'
TRISA
B'00000000'
TRISB
B'00000000'
TRISC
B'11111100'
TRISD
clrf
bsf
clrf
bsf
btfsc
goto
bcf
bsf
movlw
movwf
movlw
movwf
bsf
bcf
bcf
bcf
IncrDIR
incf
incf
movf
xorlw
INDF
STATUS,
EEDATA
STATUS,
EECON1,
$-1
EECON1,
EECON1,
0x55
EECON2
0xAA
EECON2
EECON1,
EECON1,
STATUS,
STATUS,
FSR, F
DIR, F
DIR, W
4
RP1 ;Banco 2
RP0 ;Banco 3
WR
EEPGD
WREN
WR
WREN
RP1
RP0 ;Banco 0
btfss STATUS, Z
goto LeerEEPROM
;*******************************
*******
;La clave es D1:D2:D3:D4
;*******************************
*******
btfsc PORTE, 2
goto EnServicio
swapf
addwf
movwf
swapf
addwf
movwf
D2, W
D1, W
PORTB
D4, W
D3, W
PORTC
movf
movwf
movf
movwf
movf
movwf
movf
movwf
D1, W
CONT1
D2, W
CONT2
D3, W
CONT3
D4, W
CONT4
Programacion
Boton1
btfsc PORTA, 0
goto Boton2
ELIMREB PORTA, 0
incf CONT1, F
movf CONT1, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT1
swapf CONT2, W
addwf CONT1, W
movwf PORTB
goto Boton1
Boton2
btfsc PORTA, 1
goto Boton3
ELIMREB PORTA, 1
incf CONT2, F
movf CONT2, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT2
swapf
addwf
movwf
goto
CONT2, W
CONT1, W
PORTB
Boton1
Boton3
btfsc PORTA, 2
goto Boton4
ELIMREB PORTA, 2
incf CONT3, F
movf CONT3, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT3
swapf CONT4, W
addwf CONT3, W
movwf PORTC
goto Boton1
Boton4
btfsc PORTA, 3
goto BotonENT
ELIMREB PORTA, 3
incf CONT4, F
movf CONT4, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT4
swapf CONT4, W
addwf CONT3, W
movwf PORTC
goto Boton1
BotonENT
btfsc PORTE,1
goto Boton1
ELIMREB PORTE, 1
clrf DIR
movlw 0x50
movwf FSR
EscribirEEPROM
movf DIR, W
bsf
STATUS,
movwf EEADR
bcf
STATUS,
movf INDF, W
bsf
STATUS,
movwf EEDATA
bsf
STATUS,
btfsc EECON1,
goto $-1
bcf
EECON1,
bsf
EECON1,
movlw 0x55
RP1 ;Banco 2
RP1 ;Banco 0
RP1 ;Banco 2
RP0 ;Banco 3
WR
EEPGD
WREN
movwf
movlw
movwf
bsf
bcf
bcf
bcf
EECON2
0xAA
EECON2
EECON1,
EECON1,
STATUS,
STATUS,
incf
incf
movf
xorlw
btfss
goto
FSR, F
DIR, F
DIR, W
4
STATUS, Z
EscribirEEPROM
WR
WREN
RP1
RP0 ;Banco 0
goto Boton1
;...............................
........
EnServicio
clrf
clrf
clrf
clrf
ELIMREB PORTA, 2
incf CONT3, F
movf CONT3, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT3
swapf CONT4, W
addwf CONT3, W
movwf PORTC
goto Boto1
CONT1
CONT2
CONT3
CONT4
Boto1
btfsc PORTA, 0
goto Boto2
ELIMREB PORTA, 0
incf CONT1, F
movf CONT1, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT1
swapf CONT2, W
addwf CONT1, W
movwf PORTB
goto Boto1
Boto4
btfsc PORTA, 3
goto BotoENT
ELIMREB PORTA, 3
incf CONT4, F
movf CONT4, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT4
swapf CONT4, W
addwf CONT3, W
movwf PORTC
goto Boto1
BotoENT
btfsc PORTE,1
goto Boto1
ELIMREB PORTE, 1
movf
xorwf
btfss
goto
CONT1, W
D1
STATUS, Z
ClaveNoValida
movf
xorwf
btfss
goto
CONT2, W
D2
STATUS, Z
ClaveNoValida
movf
xorwf
btfss
goto
CONT3, W
D3
STATUS, Z
ClaveNoValida
movf
xorwf
btfss
goto
CONT4, W
D4
STATUS, Z
ClaveNoValida
Boto2
btfsc PORTA, 1
goto Boto3
ELIMREB PORTA, 1
incf CONT2, F
movf CONT2, W
xorlw D'10'
btfsc STATUS, Z
clrf CONT2
swapf CONT2, W
addwf CONT1, W
movwf PORTB
goto Boto1
ClaveValida
bsf
PORTD, 0
goto
Boto3
btfsc PORTA, 2
goto Boto4
$
ClaveNoValida
bsf
call
call
bcf
call
call
goto
PORTD, 1
Retardo
Retardo
PORTD, 1
Retardo
Retardo
ClaveNoValida
;..............................
Retardo
movlw D'10'
movwf CONTA
DiezMS
movlw D'100'
movwf TMR0
bcf
INTCON, T0IF
btfss INTCON, T0IF
goto $-1
decfsz
CONTA, F
goto DiezMS
return
;...............................
end
3.- Compilar el programa y cargarlo al microcontrolador si no tiene errores. Ajustar la frecuencia Fosc
en 4 MHz.
4.- Reportar:
•
•
•
•
Modifique el diseño para que la clave sea un número de 5 dígitos.
Modifique el programa de modo que la clave guardada en la EEPROM sea de 5 dígitos.
Haga un diagrama de flujo del programa.
Compruebe la operación del nuevo diseño y cuando sea satisfactoria envíe todo a la dirección
ya conocida a más tardar un día antes de la siguiente práctica .
Descargar