TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: ALSAMA en 26 de Septiembre de 2005, 17:09:00

Título: PROBLEMA CON MEMORIA
Publicado por: ALSAMA en 26 de Septiembre de 2005, 17:09:00
HOLA A TODOS

EL PROBLEMA QUE TENGO ES UN POCO ENRREDADO PERO VEAMOS A VER SI ME LOGRO EXPLICAR:

DEBO ESCRIBIR EN LA MEMORIA EEPROM DEL PIC UNOS DATOS, LOS DATOS ESTAN EN POSICIONES CONSECUTIVAS, LUEGO DEBO LEER EL DATO UNO Y COMPARARLO CON REGISTRO1, SI EL DATO ES DIFERENTE AL REGISTRO1 DEBE LIMPIAR REGISTRO2

LA DIFICULTAD ESTA EN LO SIGUIENTE SI ALTERO EL DATO2 O DATO3 EL REGISTRO2 SE LIMPIA, Y NO SE PORQUE


;*******EEPROM DE DATOS***************************************************************
;*******LECTURA DE LA MEMORIA*********************************************************
PROGRA   BSF      STATUS,RP1   ;CAMBIA AL BANCO 2
      BCF    STATUS,RP0   ;
      CLRF   PCLATH
      MOVWF   PIR2      ;LEE W PARA LA POSICION DE MEMORIA DEL DATO
      BSF      STATUS,RP0   ;CAMBIA AL BANCO 3
      BSF      STATUS,RP1
      BCF      PIR1,EEPGD   ;HABILITA ACCESO A MEMORIA DE DATOS
      BSF    PIR1,RD      ;HABILITA LECTURA
      BSF      STATUS,RP1   ;CAMBIA AL BANCO 2
      BCF    STATUS,RP0
      MOVF   PIR1,W      ;CARGA EL DATO A W
      BCF      STATUS,RP0   ;CAMBIA AL BANCO 0
      BCF    STATUS,RP1   
      RETURN
      
LECTU2   MOVWF   SETPOINT   ;CARGA DATO A REGISTRO AUXILIAR
      MOVLW   .140      ;CARGA CON 140 PARA REVISAR EL VALOR DEL
      SUBWF   SETPOINT,1   ;REGISTRO AUXILIAR POR MEDIO DE LA RESTA
      BTFSS   STATUS,0   ;REVISA EL RESULATADO DE LA RESTA
      GOTO   LECME1      ;SI ES MENOR DE 140
      CLRF   SETPOINT   ;SI ES MAYOR DE 140 LIMPIA EL REGISTRO
      GOTO   TCONTE
LECME1   ADDWF   SETPOINT,1   ;REGRESA EL VALOR INICIAL
TCONTE   MOVLW   .1         ;CARGA CON 1 PARA PCLATH
      MOVWF   PCLATH      ;ESTE DIRECCIONA LA POSISCION DE LA TABLA CONTEM      
      MOVF   SETPOINT,W   ;CARGA CON SETPOINT PARA OBTENER EL VALOR DE LA MEMORIA
      CALL   CONTEM      ;VA A LA TABLA CONTEM PARA CARGAR EL VALOR CORRESPONDIENTE
      MOVWF   SETP3      ;CARGA VALOR DE CONTROL EN REGISTRO PARA COMODIN
      MOVLW   .1         ;REVISA CONTADOR DE FUNCION PARA
      XORWF   CONMEM,W   ;SABER SI ES SETPOINT O CONTROL DE ALARMA
      BTFSS   STATUS,2   ;REVISA EL RESULTADO
      GOTO   SETPP1      ;SI NO ES SETPOINT
      MOVF   SETP3,W      ;SI ES SETPOINT RECUPERA VALOR PARA COMPARACION DESDE COMODIN
      MOVWF   SETP2      ;CARGA VALOR DE CONTROL EN REGISTRO PARA COMPARACION
      GOTO   PTODIS
SETPP1   MOVF   SETP3,W      ;RECUPERA VALOR DESDE COMODIN
PTODIS   CALL   SALPUER      ;VA A RUTINA PARA LLEVAR DATO AL PUERTO
;*******ESCRITURA DE LA MEMORIA*******************************************************            
PULSO   BTFSC   PORTC,4      ;LEE LOS PINES DE SUBIR Y BAJAR LA TEMPERATURA
      GOTO   ABAJO      ;SI ES UNO MIRA EL OTRO PIN PARA DISMINUIR
      CALL   RETA3      ;SI ES CERO LLAMA RETARDO PARA REVISAR REBOTES
      BTFSC   PORTC,4      ;REVISA SI ERA REBOTE
      GOTO   PULSO      ;SI ES REBOTE EMPIESA DE NUEVO
      INCF   SETPOINT,1   ;SI ES CERO INCREMENTA EL REGISTRO PARA PROGRAMAR LA TEMPERATURA
      CALL   VAL255      ;PRUEBA VALOR INFERIOR A 255
      GOTO   ESCRI      ;VA A LA MEMORIA PARA ESCRIBIR EL DATO
ABAJO   BTFSC   PORTC,5      ;REVISA EL PIN DE DECREMENTO   
      GOTO   PINES      ;SI ES UNO INICIA DE NUEVO REVISION DE PINES
      CALL   RETA3      ;SI ES CERO LLAMA RETARDO PARA REVISAR REBOTES
      BTFSC   PORTC,5      ;REVISA SI ERA REBOTE
      GOTO   ABAJO      ;SI ES REBOTE EMPIESA DE NUEVO
      MOVLW   .0         ;SI NO ES REBOTE PROBAR SI EL DATO ES CERO
      XORWF   SETPOINT,W   ;PARA PROBAR SI EL NUMERO ES CERO
      BTFSS   STATUS,2   ;REVISA EL RESULTADO
      GOTO   DECR      ;SI NO ES CERO
      GOTO   ZERO      ;SI ES CERO
DECR   DECF   SETPOINT,1   ;SI ES CERO DECREMENTA EL REGISTRO PARA PROGRAMAR LA TEMPERATURA
      CALL   VAL255      ;PRUEBA VALOR INFERIOR A 255
      GOTO   ESCRI      ;VA A LA MEMORIA PARA ESCRIBIR EL DATO
ZERO   CLRF   SETPOINT   ;LIMPIA EL REGISTRO PARA MANDAR DATO AL PUERTO
      GOTO   ESCRI      ;VA A LA MEMORIA PARA ESCRIBIR EL DATO
ESCRI   MOVF   ALARMA,W
      BSF    STATUS,RP1   ;CAMBIA AL BANCO 2
      BCF    STATUS,RP0
      MOVWF   PIR2      ;AL REGISTRO EEADR
      MOVF   SETPOINT,W   ;EL DATO SE LLEVA A LA MEMORIA PARA SER ALMACENADO
      MOVWF   PIR1      ;AL REGISTRO EEDATA
      BSF    STATUS,RP1   ;CAMBIA AL BANCO 3 PARA CONFIGURAR EL EECON1
      BSF    STATUS,RP0   
      BCF    PIR1,EEPGD   ;HABILITA ACCESO A MEMORIA DE DATOS
      BSF    PIR1,WREN   ;HABILITA LA ESCRITURA
      MOVLW    55H         ;CODIGO
      MOVWF    PIR2      ;NESESARIO
      MOVLW    .170      ;PARA EL
      MOVWF    PIR2      ;PROCESO DE ESCRITURA
      BSF    PIR1,WR      ;EN LA MEMORIA DE DATOS
ESCRI1   BTFSC   PIR1,1      ;REVISA LA BANDERA DE FIN DE ESCRITURA
      GOTO   ESCRI1      ;SI NO HA TERMINADO REVISA DE NUEVO
      BCF      PIR1,WREN   ;DESHABILITA LA ESCRITURA DE MEMORIA
      BCF    STATUS,RP1   ;CAMBIA AL BANCO 0
      BCF    STATUS,RP0
      
      MOVLW   .0         ;CARGA LA DIRECCION DE LA MEMORIA   
      CALL   PROGRA      ;LEER MEMORIA PARA DATO DE COMPARACION
      MOVWF   SETP4      ;CARGA DATO A REGISTRO
      MOVLW   .1         ;CARGA CON 1 PARA PCLATH
      MOVWF   PCLATH      ;ESTE DIRECCIONA LA POSISCION DE LA TABLA CONTEM
      MOVF   SETP4,W      ;CARGA VALOR PARA TABLA
      CALL   CONTEM      ;VA A LA TABLA
      CLRF   PCLATH      ;LIMPIA PCLATH PARA NO SALTAR   
      XORWF   SETP2,W      ;REALIZA PRUEBA CON AUXILIAR DE SETP2 PARA MIRAR TIEMPO DE SETPOINT
      BTFSS   STATUS,2   ;REVISA RESULTADO DE LA COMPARACION
      GOTO   RESETB      ;NO ES IGUAL, LIMPIA BANDERA Y REGISTRO DE TIEMPO
      GOTO   PINES      ;SI ES IGUAL
RESETB   CLRF   MINCOMO      ;LIMPIA COMODIN DE TIEMPO
      BCF      PORTC,1      ;LIMPIA PIN DE ALARMA
      GOTO   PINES






[[size=20]size=10]ESPERO QUE ME PUEDAN AYUDAR DE ANTEMANO GRACIAS
[/size][/size]
Título: RE: PROBLEMA CON MEMORIA
Publicado por: vszener en 26 de Septiembre de 2005, 17:56:00
Ummmm tendras que expecificar en que lenguaje de programacion estas trabajando y poner parte del codigo de comprobaciones y borrado para ver si hay fallos ya que muchos ojos ven mas que dos....Giño