Autor Tema: Valor por defecto de los registros de propósito general  (Leído 1966 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado bAIthrO

  • PIC10
  • *
  • Mensajes: 7
Valor por defecto de los registros de propósito general
« en: 09 de Noviembre de 2005, 07:29:00 »
Buenas. Os cuento mi problema:

En el vector de INICIO configuro el PIC, Serial, interrupciones, LCD, etc, etc...

El asunto es que quiero que sólo configure el PIC la primera vez. Posteriormente, cuando vuelva de las interrupciones quiero que salte la rutina de INICIO. Para ello he creado un registro llamado Flag_INICIO. ¿Cúal es su valor al resetear el PIC? ¿Hay alguna manera de darle un valor por defecto a estos registros?

Sería algo así:

org     0x0000
        goto    INICIO

org   0x0004
..... (rutina de interrupcion)
retfie

INICIO
      
   btfss Flag_INICIO,0      
   Goto Configurar_INICIO
        Goto Seguirconmiprograma


Si cargo Flag_INICIO con un valor al comienzo del vector de INICIO, machacaré este registro cada vez que vuelva del vector de interrupción.

Gracias.


Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Valor por defecto de los registros de propósito general
« Respuesta #1 en: 09 de Noviembre de 2005, 09:44:00 »
Haber si he entendido bien...si tu creas un flag como es el caso de Flag_INICIO deberas declararlo en el programa, de esta forma
Codigo:

Flag_INICIO     EQU     1     ; por ejemplo valor a 1


Tambien puedes reservar memoria para dicha variable
Codigo:

     CBLOCK
     Flag_INICIO         ;se reserva el valor de la variable
     ENDC


Cada vez que resetees el PIC la variable Flag_INICIO obtendra el valor definido por el programador o si no se definio ningun valor tendra valor 0

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Valor por defecto de los registros de propósito general
« Respuesta #2 en: 09 de Noviembre de 2005, 12:35:00 »
Creo que el se refiere a si el PIC se reinicia por alguna razon, entonces el programa debera  estar condicionado por el valor de ese flag... ok, primeramente, lo que tratas de hacer no lo puedes hacer usando la RAM del PIC puesto que esta se borra o corrompe al inicializarlo despues de un POR (encendido), lo que kiere decir q no sabras a ciencia cierta que hay en la memoria y por ende, podria darte problemas con el programa bifurcado.

La solucion es usar la memoria EEPROM (si esta disponible) del PIC, no mencionas cual usas, pero suponiendo que estes usando el 16F84, lo q haces es guardar el valo del flag en alguna posicion de la memoria EEPROM. El pic lo primero que debera hacer despues del reset sera cargar el valor del flag almacenado en EEPROM y con ese valor puedes estar seguro de q efectivamente el programa se esta ejecutando como deberia, al menos lo q corresponde al flag de inicio.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Valor por defecto de los registros de propósito general
« Respuesta #3 en: 10 de Noviembre de 2005, 12:21:00 »
hola, bueno, yo implemente eso que queres vos, pero con un motivo distinto(no el de esquivar la config, sino usar el boton de reset del PIC como boton de reset de toda la memoria EEPROM)
El problema es que los registros pueden quedar "sucios".
Yo lo que hice fue poner un valor exacto, suponte:
;el programa necesita el archivo ".inc" del pic que vayas a usar

flaginit   EQU   0x20

org    0x00

movf    flaginit,w
xorwf   0xfd
btfsc    STATUS,Z
goto    skip_init

goto    inicio

;vector interrupcion

org       0x10
inicio
;aca pones la config
;...luego de la config...
movlw    0xfd
movwf    flaginit


skip_init
;aca comienza el programa
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
RE: Valor por defecto de los registros de propósito general
« Respuesta #4 en: 10 de Noviembre de 2005, 19:15:00 »
HOLA

ESTOY DE ACUERDO CON FENIX_JN LA MEJOR MANERA DE HACER LO QUE DESEAS ES DESTINANDO UN ESPCIO EN LA EEPROM PARA LAMACENAR LA POSICION EN LA CUAL QUEDAS. PERO QUISIERA SABER SI ES NECESARIO QUE BORRES TODOS LOS DATOS DE ESTA.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Valor por defecto de los registros de propósito general
« Respuesta #5 en: 10 de Noviembre de 2005, 22:43:00 »
borrar todos los datos de dond PAOLA09?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Valor por defecto de los registros de propósito general
« Respuesta #6 en: 11 de Noviembre de 2005, 01:45:00 »
fenix, tu idea funciona bien, hasta que apagas el pic y lo enciendes...explico:

Suponte que has grabado el flag en la EEPROM con un valor definido por ti.

Apaga el PIC, enciendelo, y el programa leera la EEPROM, leera el valor, y salteara la inicializacion. Listo. Grave error. La solucion y el truco esta JUSTAMENTE en usar MEMORIA VOLATIL!. exitos.-
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: Valor por defecto de los registros de propósito general
« Respuesta #7 en: 11 de Noviembre de 2005, 02:25:00 »
Hola colegas, ho hace mucho tube que hacer algo parecido y la solución por la que opté aunque no es la más optima... funciona muy bien.

En mi aparato, cuando lo encendíamos la primera vez (y sólo la primera vez) ejecutaba unas determinadas funciones.

En todos los encendidos posteriores que efectuaba ejecutaba OTRAS funciones.

Lo solucioné (como fénix_in comenta) con la eeprom. Lo primero que hacía era leer en una posición.
Si lo que leía era un 0xFF interpretaba que la eeprom nunca se había grabada y que, por tanto, era el primer encendido.

Acto seguido en esa dirección escribía un 0x01.

En todos los encendidos posteriores siempre leería un 0x01 (por lo que deduzco que ya había sido encendido con anterioridad).



Un saludo desde Alicante.
« Última modificación: 28 de Septiembre de 2008, 12:39:25 por Azicuetano »

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Valor por defecto de los registros de propósito general
« Respuesta #8 en: 11 de Noviembre de 2005, 14:23:00 »
No, la idea de usar la memoria EEPROM es efectivamente condicionar esa bifurcacion necesitada, si usamos la RAM comun no se esta haciendo nada, puesto q la RAM al ser apagada pierde sus datos o los corrompe.. de cualkier forma no es confiable. Si guaradamos la informacion en la RAM y reiniciaramos el PIC (ojo estoy hablando de un POR) e intentaramos usar la memoria RAM para comprobar el estado del flag, estariamos generando un proceso aleatorio, es decir, la informacion que esta en la posicion tendra un valor desconocido, por lo q la rutina de bifurcacion podra o no ejecutarse de forma incierta. Sencillamente estariamos dejando el control del programa al aire.

a fin de controlar correctamente el programa se necesita algo q no sea volatil, bien sea un dispositivo externo o uno interno, a fin de reducir perifericos, el dispositivo interno, la EEPROM, es la mejor opcion. Es cierto que el PIC podria apagarse antes de escribir un valor en la EEPROM pero esa situacion debe ser contenida por el programador q debera desarrollar algun metodo para detectar ese tipo de fallas.



 

anything