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 .