Autor Tema: Manejo de tablas PIC18f452  (Leído 2252 veces)

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

Desconectado Razoh

  • PIC10
  • *
  • Mensajes: 9
Manejo de tablas PIC18f452
« en: 06 de Diciembre de 2005, 11:02:00 »
Hola,

Me gustaria saber si alguien puede decirme como se manejan las tablas en el MPlab. Necesitaba crear una tabla de 80x10 para manejar caracteres que recibo por el canal serie. Estoy trabajando con un micro PIC18F452 y lo programo en C.

Neceistaba saber como crear la tabla y después como manejarla, me dijeron que no se hace como en el C normal y yo no tengo ni idea de que hacer.

Un saludo

Alberto Enes

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Manejo de tablas PIC18f452
« Respuesta #1 en: 06 de Diciembre de 2005, 11:29:00 »
Te recomendaria que te vieras algun manual de C, puesto que es igual que en CCS, mirate el capitulos de las tablas (arrays en C), basicamente es una variable bidimensional en este caso, y para "nombar una celdilla" tienes una variable i y otra j por ejemplo. La esquina superior izquierda en es nombre_variable[0][0].

Por ejemplo en la tabla:
tabla[4][3]={
A,  B,  C,  D,
E,  F,  G,  H,
I,   J,  K,  L}

Para apuntar a la "G" seria tabla[2][1]. Como no me eplico muy bien Avergonzado mejor que veas el manual, a menos que postee alguien con dones didacticos jeje

Lo que hay que tener en cuenta es que para declararla se cuenta desde el 1, y para apuntar desde el 0 RollEyes
Si juegas contra el mejor, pierdes como los demás.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Manejo de tablas PIC18f452
« Respuesta #2 en: 06 de Diciembre de 2005, 11:57:00 »
El ejempo que te dió el amigo radon es muy genérico y con un array "inicializado".
Cabe aclarar que si tu array es muy grande y lo pretendes inicializar, esto llega muchas lineas de código.  Piensa en assembler, inicializar un array, significa que tienes varios movlw dato para cargar el WREG y que luego son ubicados en la posición de memoria del subíndice del array adecuado.

Si tu quieres recibir caracteres por la usart, lo más adecuado sería un array de unsigned char (datos de 8 bits sin signo)

Lo declaras asi:

Codigo:

unsigned char datos[80];
unsigned char n;



Y luego lo direccionas algo así.
Codigo:

datos[n] = getc();


y luego incrementas n o lo decrementas, de acuerdo a como quieras almacenar tu arreglo de datos.

Si utilizaras un array de 2 dimensiones, usas el ejemplo de radon.

Escrito originalmente por radon

Lo que hay que tener en cuenta es que para declararla se cuenta desde el 1, y para apuntar desde el 0 RollEyes

Esto es porque cuando uno declara una variable, uno reserva N posiciones de memoria.  

Entonces al hacer :

unsigned char datos[8] ;  

Reservamos 8 bytes en la memoria RAM.
Ahora bien, para "direccionar" esto, se comienza del 0, porque es la posicion 0 respecto al inicio del arreglo, hasta la posición 7 desde el inicio del arreglo (que es el 8vo byte).  Esa es la explicación de poruqe se comienza de 0.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)