Autor Tema: MANEJO DE MUCHOS BYTES EN ASM  (Leído 2664 veces)

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

Desconectado integratecno

  • PIC10
  • *
  • Mensajes: 7
MANEJO DE MUCHOS BYTES EN ASM
« en: 16 de Octubre de 2005, 09:19:00 »
He visto sus foros y me parecen muy interesantes, espero poder colaborarles en algun momento.

Estoy interesado en manejar cadenas de mas de 80 bytes, almacenamiento en memoria del pic, para su posterior procesamiento y trasmision por RS232, no tengo problemas con la trasmision, pero si con el procesamiento para utilizacion posterior.

Trabajo en ASM, no soy experto, pero me defiendo. el problema radica en que no se como manejar cadenas grandes, en donde la separacion se hace con "," o cualquier tipo de separador y en donde los datos pueden variar de tamaño entre separadores, quisiera conocer algunos codigos en ASM de ejemplo, para poder almacenar, procesar y trasmitir lo que se necesite.

Estoy manejando un 16F873A, conectado a un PC

Agradezco de antemano la colaboracion al respecto.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #1 en: 16 de Octubre de 2005, 10:32:00 »
D dond provendrian las cadenas? Si es cosa de almacenamiento puedes usar 3 cosas: memoria EEPOM interna, memoria Flash de programa y memoria serial. La transmision por RS232 la tienes implementada en el modulo USART. De hecho las cadenas pueden ser tan grandes como memoria tngas.

Desconectado integratecno

  • PIC10
  • *
  • Mensajes: 7
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #2 en: 16 de Octubre de 2005, 13:56:00 »
Gracias   fenix_j

El circuito recibe informacion de un periferico(lector) y este envia tramas  de 80 a 90 bytes variables, la trama esta compuesta por un caracter de inicio, por dentro contiene la fecha y otras informaciones que estan separadas por "," en grupos de 5 o 6 bytes, hasta completar 80 o 90 bytes.

He manejado cadenas de tamaño fijo, pero no habia enfrentado cadenas de tamaño variable, es decir que entre separadores esten cambiando de tamaño,   entre 1 y 6 bytes.

Esto estaba conectado a un PC, pero han decidido eliminarlo y mi mision es conectarlo al periferrico de salida(impresora), sin tener que pasar, por un PC, para lo cual con un solo pic y un relevo puedo conmutar al puerto del PIC16f873a, recoger la informacion de un lado y pasarla al otro.

Por ahora no se requiere almacenar la informacion por lo que no he pensado en memoria adicional, estoy trabajando con la flash.

Lo que necesito  saber es como manejar las tramas variables, entre las comas y extraer la informacion que debo imprimir, por ahora con el manejo de tramas fijas, he podido imprimir, pero al no saber manejar  las tramas cuando varian lo que he logrado es imprimir basura.

He comenzado con esto de los pics pero, me considero muy novato cualquier comentario o codigo de sugerencia puede ser enviado a integratecno@etb.net.co

Escucho cualquier consejo. GRACIAS

Desconectado z0d4

  • PIC10
  • *
  • Mensajes: 9
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #3 en: 16 de Octubre de 2005, 18:09:00 »
Yo he trabajado con un gps de periferico.. ahi el manual del gps te especifica la palabra que precede a la informacion.. entonces lo que puedes hacer es esperar hasta q se cumpla esa palabra y luego comenzar a guardar los registros.. retransmitirlos o lo que sea.

Para guardarlos, si es que son muchos datos, puedes hacerlo por direccionamiento indirecto. Para pocos datos es enredado este metodo... pero para una cantidad grande de bytes es muy util.

Espero que de algo te sirva mi consejo.
Saludos

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #4 en: 17 de Octubre de 2005, 00:25:00 »
mmm ok,  veamos, la comunicacion q recibes es sincronica o asincronica? de cualkier forma creo q el secreto radica en detectar el byte ";", con ello marcarias un fin/inicio de nuevos datos. El direccionamiento por FSR es util solo si kieres almacenar en la RAM, pero en el caso tuyo de muchos datos, podrias usar un contador incremental q apunte a la direccion, omitiendo las veces q recibas el ";", el contador podria ser de 1 byte (dado q nunca pasa de 255 de acuerdo a los datos q indicas) por lo q el proceso podria ser rapido.

Ahora un detalle... el dispositivo lector manda algun caracter de fin de transmision?? si no es asi lo q puedes hacer es recibir todo el bloque, y con uno de los timers, esperar un tiempo, si luego d ese tiempo NO hay actividad en el bus se asume q el bloque ha terminado y procedes a procesarlo. En el caso de q si, la solucion evidente es recibir todos los datos hasta q se detecte ese caracter de fin de transmision, cuando ello suceda entonces procesas el bloque (procesar es cualkier cosa q kieras o necesites con los datos recibidos).

Ah por cierto... lenguaje??

Desconectado integratecno

  • PIC10
  • *
  • Mensajes: 7
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #5 en: 17 de Octubre de 2005, 08:26:00 »
Gracias Zd04 y fenix_jn

Bueno...  me puse a comparar las cadenas y en realidad el manejo es parecido al de un GPS, tienes un encabezado que indica lo que viene despues, esta separado por comas, y tienes un final de trama, que esta compuesto por LRC y un "0D0A", El LRC es el  XOR de todos los anteriores y eso esta resuelto, la comunicacion es asincronica, tambien es correcto, despues de leerlos los guardo en varibles de memoria, y puedo omitir o no las comas, como lo sugiere fenix_jn,no me quedo claro pero me interesa esto de "con ello marcarias un fin/inicio de nuevos datos."

Definitivamente el problema esta al procesarlo, por ejemplo, en ocasiones llegan 2 comas seguidas y sin informacion por dentro, en otras llega 1 byte entre comas y en otras llegan hasta 6 bytes entre comas, y esto depende de lo que contenga, lo que este leyendo, lo que he entendido es que cuando hay comas seguidas significa que no hay datos al respecto, y cuando hay variacion significa que pueden haber datos de diferente tamaño, pero que corresponden al mismo bloque dentro de la trama.

La dificultad por mi novatada en el tema se da porque no se como identificar cada bloque dentro de la trama, tambien me ha ocurrido que el 16f873, me reporta reporta errores cuando intento almacenarlos todos seguidos, algo referente a __MAXRAM  o   __BADRAM  pero no entiendo el tema aun.

Definitivamente la falla es el proceso, por ejemplo: se que la fecha viene en determinada posicion por ejemplo en Byte 20, pero en ocasiones llega en el byte 16, porque en las tramas anteriores no hay datos, entonces al imprimir los resultados no son los esperados.

Aprendi que debo recibir primero y procesar despues porque sino es un lio, si tratas de recibir y procesar al mismo tiempo la cosa se me complica (inexperiencia)

Respecto al lenguaje, solo Asembler, aunque me gustaria empezar a explorar C, dicen que  es mas facil, pero ni idea, si tienen alguna guia para principiantes "GRACIAS"

Voy a tratar de identificar los bloques con un contador incremental de "," en el momento de recibir la trama, asi como lo sugiere fenix_jn, puede ser por hay.

Gracias de nuevo.

Desconectado integratecno

  • PIC10
  • *
  • Mensajes: 7
RE: MANEJO DE MUCHOS BYTES EN ASM
« Respuesta #6 en: 27 de Octubre de 2005, 14:32:00 »
Bueno...........después de ver varios foros, de leer todos los libros que aquí se aconsejan y de tener en cuenta los documentos del fabricante, por fin encontré la solución.  Rebotado Rebotado Rebotado Rebotado Rebotado

Primero, estaba almacenando en los registros de propósito general del PIC y pase de largo sobre la pagina afectando, los registros de la pagina siguiente como STATUS, FSR y toros, definitivamente hay que tener mucho cuidado en esta asignación, porque si no los programas no van a funcionar.

Corrigiendo este tema logre almacenar los bytes dentro de los registros y luego me quedaba, el procesamiento para lo cual seguí los consejos de  fénix_jn  contando las “,” y separando la información por bloques, así logre darle un orden.

Luego aprendí que cuando vamos a MANEJAR CANTIDADES DE BYTES como en este caso, 90 aproximadamente, debemos limpiar las variables con (CLRF) Así nos queda mas fácil  encontrar los errores al respecto, a pesar de los bytes de chequeo.

Con respecto a lo que apareció  de __BADRAM debemos tener cuidado que hay  algunas posiciones que debemos respetar según lo informan los Data Sheets de Microchip, porque nos generan problemas.

AGRADEZCO A TODOS LOS COLABORADORES POR SUS A PORTES EN DIFERENTES TEMAS.......NOS AYUDAN MUCHISIMO…..TRATARE DE COLABORAR CON LO QUE PUEDA Sonrisa Sonrisa


 

anything