; ARCHIVO EEPROMF88.ASM ; VERSION PARA 16F88 CON BOOTLOADER TINY ; PROGRAMA PARA ESCRIBIR Y LEER DATOS EN LA EEPROM ; SE ESCRIBEN EN LAS DIRECCIONES DE EEPROM 00..1FH ; LOS DATOS 10H...2FH ; LUEGO SE LEEN DE LA MISMA EEPROM Y SE MUESTRAN ; EN LOS LEDS DEL PUERTO B, ; CON RETRASOS DE MEDIO SEGUNDO ; EN TOTAL SON 32 DATOS. processor 16f88 include ;RESERVA LOCALIDADES PARA SUBRUTINA DE RETRASO COUNT EQU H'20' L EQU H'21' M EQU H'22' ;DEFINE NOMBRE DE LOS BITS EN LOS PUERTOS A Y B #DEFINE RA0 PORTA,0 #DEFINE RA1 PORTA,1 #DEFINE RA2 PORTA,2 #DEFINE RA3 PORTA,3 #DEFINE RA4 PORTA,4 #DEFINE RB0 PORTB,0 #DEFINE RB1 PORTB,1 #DEFINE RB2 PORTB,2 #DEFINE RB3 PORTB,3 #DEFINE RB4 PORTB,4 #DEFINE RB5 PORTB,5 #DEFINE RB6 PORTB,6 #DEFINE RB7 PORTB,7 ;MACROS PARA LA SELECCION DE LOS BANCOS DE REGISTROS BANCO0 MACRO BCF STATUS,RP0 BCF STATUS,RP1 ENDM BANCO1 MACRO BSF STATUS,RP0 BCF STATUS,RP1 ENDM BANCO2 MACRO BCF STATUS,RP0 BSF STATUS,RP1 ENDM BANCO3 MACRO BSF STATUS,RP0 BSF STATUS,RP1 ENDM ;MACRO PARA INICIALIZACION DE PUERTOS PARA 16F88 PUERTOS MACRO BANCO0 BCF RCSTA,SPEN ;DESHABILITA UART BANCO1 movlw 7 movwf CMCON ;DESHABILITA COMPARADORES ANALOGICOS CLRF CVRCON ;DESHABILITA VOLTAJE DE REFERENCIA CLRF ANSEL ;DESHABILITA CONVERTIDORES MOVLW H'1E' MOVWF TRISA ;RA0=SALIDA,RA1...RA4=ENTRADAS CLRF TRISB ;RB0...RB7=SALIDAS BANCO0 CLRF PORTB ;LEDS APAGADOS BCF RA0 ;DESHABILITA RELEVADOR ENDM ORG 0 CLRF PCLATH GOTO INICIO ORG 3 ;ORIGEN DEL PROGRAMA EN LA DIRECCION 0 INICIO: PUERTOS ;MACRO PARA INICIALIZAR LOS PUERTOS DE 16F88 BANCO0 escribe: movlw H'20' ;son 32 datos para escribir movwf COUNT movlw H'10' BANCO2 movwf EEDATA ;DATO =10H clrf EEADR ;DIRECCION EEPROM=0 BANCO0 mallo: call EEWR ;ESCRIBE EN EEPROM BANCO2 incf EEDATA incf EEADR BANCO0 decfsz COUNT goto mallo lee: movlw H'20' ;son 32 datos para leer movwf COUNT BANCO2 clrf EEADR ;DIRECCION INICIAL EEPROM=0 malli: call EERD ;LEE EN EEPROM, RESULTADO EN W BANCO0 movwf PORTB call delay3 BANCO2 incf EEADR BANCO0 decfsz COUNT goto malli sleep ;aquí inician las subrutinas de retraso delay movlw D'25' ;10 milisegundos movwf M malla3 movwf L malla2 decfsz L,f goto malla2 decfsz M,f goto malla3 return delay2 movlw D'250' ;250 milisegundos movwf M malla5 movwf L malla4 decfsz L,f goto malla4 decfsz M,f goto malla5 return delay3 call delay2 ;1 segundo call delay2 call delay2 return ;subrutina para leer dato de EEPROM 16F88 ;para usar esta subrutina, debe escribirse antes la dirección deseada ;en el registro EEADR (BANCO2). La rutina regresa con el dato en w. EERD: BANCO3 BCF EECON1,EEPGD ;APUNTA HACIA EEPROM DE DATOS BSF EECON1,RD ;HABILITA EL BIT 0 (RD) DEL REGISTRO EECON1 BANCO2 MOVF EEDATA,W ;TRANSFIERE EL DATO EN EEDATA A W, RETURN ;subrutina para escribir dato en EEPROM 16F88 ;para usar esta subrutina, debe escribirse antes la dirección DE LA EEPROM ;en el registro EEADR (BANCO2) y el dato en el registro EEDATA (BANCO2) ;la rutina regresa una vez que el dato fue escrito en la localidad deseada. EEWR: BANCO3 ;HABILITA EL BANCO 3 BCF EECON1,EEPGD ;APUNTA HACIA EEPROM DE DATOS BSF EECON1,WREN ;HABILITA ESCRITURA EN EEPROM BCF INTCON, GIE ;DESHABILITA INTERRUPCIONES MOVLW H'55' ;PREPARA SECUENCIA DE SEGURIDAD MOVWF EECON2 ;ESCRIBE PRIMER DATO DE SECUENCIA MOVLW H'AA' ;SEGUNDO DATO MOVWF EECON2 ;ESCRIBE SEGUNDO DATO DE SECUENCIA BSF EECON1,WR ;INICIA CICLO DE ESCRITURA EW: BTFSC EECON1,WR ;MALLA PARA ESPERAR AL FINAL DEL CICLO GOTO EW ;SI WR=1, CICLO DE ESCRITURA AUN NO TERMINA BCF EECON1, WREN ;DESHABILITA ESCRITURA BSF INTCON, GIE ;HABILITA INTERRUPCIONES RETURN END