Autor Tema: Para Sispic y el foro en general  (Leído 2328 veces)

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

Desconectado Juampa_ar

  • PIC10
  • *
  • Mensajes: 25
Para Sispic y el foro en general
« en: 18 de Marzo de 2004, 21:44:00 »
Hola sispic.. revisando algunos trabajos en el foro .. me tope con una forma de guardar y leer informacion de la eeprom en la que vos ayudaste a sandra.. para hacer un codekey.. mi pregunta es la siguiente.. yo en vez de guardar 5 datos quisiera guardar 4 para guardar 5 no tuve problemas transformando el numero en hexa ... y ya intente de todas formas para 4 pero no lo logro hacer funcionar.. por que en realidad mucho no entendi el por que usaste.. .highbyte y .lowbyte cuando las lees si podrias ayudarme como guardar en la eeprom la "clave" 1234 y como leerla con tu "metodo"..asi me ubico te agradeceria..

    Desde ya mi disculpas por la molestia, y si alguien del foro podria colaborar tambien mis agradecimientos anticipados

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Para Sispic y el foro en general
« Respuesta #1 en: 19 de Marzo de 2004, 10:42:00 »
Hola.
Mira no lei el articulo de sispic pero te explico que las posiciones de la eeprom se agrupan en 8 bits asi que si quieres guardar un dato mayor a 256 decimal tu hex se compondra de 2 grupos de ocho bits c/u entonces debes descomponer ese dato en dos bits de ocho el high bit y el low bit y darle una posicion de memoria a cada uno de ellos en la eeprom,luego cuando la lees tambien la leeras como 2 bytes el que se guardo en la posicion 1 por ej mas el de la posicion 2 y ahi podras recomponer tu valor mayor a 256 decimalPor supuesto existen variantes para no guardar un valor de 16 bites como por ejemplo guardar solo el multiplicador de una variable o una constante que puede ser de ocho bits es decir por ejemplo que parto de una constante igual a 124 y solo guardo el multiplicador que seria 10 (ocho bits) para hacerla sencilla con eso ahorro memoria eeprom.ademas no te olvides que es muy limitada la cantidad de eeprom en caso de un 84 son 64 bytes y en el 628 128 bytes.Hay instrucciones en el PBPlus (word)16bites que te guardan el valor de 16 directo a la eeprom pero realmente estan guardando 2 bytes consecutivos el low y el high.
khasitos

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Para Sispic y el foro en general
« Respuesta #2 en: 19 de Marzo de 2004, 11:23:00 »
Si , khasistos lo explica muy bien .

Pero añadiendo un poco mas .
Tienes la clave "1234"

Esta la podrias guardar usando 4 posiciones de memoria . "1"-"2"-"3"-"4"

y ahorrando memoria  usando 2 de la siguiente manera :
usamos un registro de tamaño word llamado clave en dode tienes el valor decimal 1234  = 04D2 en hexagesimal.

en clave.highbyte tendras el valor 04
en clave.lowbyte  tendras el valor D2

Si no lo tienes claro no dudes en preguntar .
un saludo


Desconectado Juampa_ar

  • PIC10
  • *
  • Mensajes: 25
RE: Para Sispic y el foro en general
« Respuesta #3 en: 20 de Marzo de 2004, 06:00:00 »
Ok en teoria ahora lo entendi .. pero se ve que alguna cosita me falta por que para 5 digitos anda y para 4 no... a ver yo puse..
 
Data @0,$04,$D2
...
...
...
gosub leerclave
...
..
leerclave:
Read 0, clave.highbyte
Read 1, clave.lowbyte

teoricamente eso estaria bien no ?... bueno cuando capturo las teclas las pongo en un temporal que haga cuando tenga las 4 las compar, teniendo en cuenta que el teclado marcaria error cuando se ingresen dos veces la clave erronea...  cuando ingreso los numeros llegado a 8 salta el error.. lo que estaria bien por que serian dos veces cuatro.... pero... el problema es que no activa ni desactiva y lo que mas me hace dudar es que para cinco digitos funciona barbaro le cambio la cantidad de digitos que capturaria del teclado.. le cambio ... los datos hexa de la memoria.. y funciona a la perfeccion .. por eso no entiendo.. desde ya ... gracias... y espero haber logrado hacerme entender...
 

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Para Sispic y el foro en general
« Respuesta #4 en: 20 de Marzo de 2004, 08:09:00 »
Hola:
perdon por mi gran ignorancia pero en el ejemplo que has puesto no hay un decimal mayor a 256 por ende cada dato (4) y (210) decimal son de ocho y tu las estas tratando como de 16. no veo el porque high bit y low bit si son dos datos de ocho .Solo cuando usas un numero mayor a 255 fraccionas el bit en alto y bajo.Por otro lado deberas definirla a la variable X de 16 en var_low y var_ highbit solo cuando trabajes con decimales mayores a 255 Sino solo deberas tratarlas como cantidades individuales o variables simples de ocho.A mi punto de vista tienes dos formas de tratar la clave como 4 individuales que deben coincidir o sino como una palabra word de 16 completa ,en cuyo caso si deberas usar low y high bit una vez recuperada
En el PLUS eso no se utiliza frecuentemente solo trabajas con la variable x que ya va a ser de 16 y la grabas o comparas sin desarmarla en 2 de ocho con high y low.
Ejemplo en el aire.....
varx as word
varx=12345
Ewrite 1, [varx]
hasta aqui la variable de 16 se grabo en la eeprom
ahora la leo de la eeprom
x1= EREAD 1
Bueno con esto la defini la guarde en la eeprom y luego la lei de la eeprom en la x1
Si algo no esta bien pregunta
khasistos

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Para Sispic y el foro en general
« Respuesta #5 en: 20 de Marzo de 2004, 08:36:00 »
Creo que era esta una parte con 3 intentos y 4 digitos .
Codigo:

MyKey     var word    " tu clave
BufferKey var word    " clave entrada por el teclado
Key       var byte    " tecla pulsada

Intentos  var byte
Digitos   var byte
Temp      var word

"*********************************************************
Intenta:
for  Intentos = 1 to 3
     BufferKey = 0
     Temp = 1000
     for Digitos = 1 to 4                 " buscas 4 digitos
       gosub  scan_key                    " espera tecla pulsada
       if Key = 10 then Intenta           " Tecla cancelar  ejemplo "*" empieza de nuebo
       BufferKey = BufferKey + (Key*Temp)
       Temp = Temp / 10
     next Digitos                        " tienes los 4 digitos en BufferKey

     if BufferKey = MyKey then goto Bingo   "Ok

next Intentos

gosub Error       " error despues de 3 intentos
goto Intenta      " otra vez
"*********************************************************
Bingo:
 "bla
 "bla
goto Intenta

Scan_Key:
 " bla
 " bla
 " si emites un pitido al pulsar la tecla quedara + profesional
 " tecla "0" Key=0 etc.
return

Error:
 "beep



La forma con que lees la clave es correcta .
nos cuentas .


 

anything