Curso de C, C++ para micros FreeScale
Con esta publicación pretendo iniciar un curso introductorio de C, C++ para micros FreeScale, además de resolver dudas y entre todos incorporar más ejemplos
Hay que iniciar por lo mas simple (C,C++) para luego saltar al ASSEMBLER y tener todo el dominio del microcontrolador (reducción de código, mayor precisión de tiempos, localización mejor de la memoria, etc)
Programa #01:
El siguiente programa sirve para todo tipo de micros FreesCale y define una función "colocarNumero" que toma como parámetro un arreglo de números enteros entre 0 y 255 (unsigned char), luego extrae cada elemento y lo envía al puerto A.
Podemos colocar unos LEDs en el PuertoA para visualizar las secuencias de activación en forma binaria
El programa tiene como propósito transferir datos de un arreglo a una función
/* CodeWarrior 6.2 2009 */
#include <hidef.h>
#include "derivative.h" /* Contiene la biblioteca del microcontrolador a trabajar */
#include "retardos.h" /* Contiene la biblioteca de retardos con un simple for */
////////////////
void colocarNumero ( unsigned char arreglo[] ); /* Declaración de la función */
void colocarNumero ( unsigned char arreglo[] ) { /* recibe como parámetro el primer valor de un arreglo */
unsigned char x;
for( x = 0; x <= 2; x=x+1 ) { /* Contador de 0 a 2 para extraer los tres elementos del arreglo */
PTA = arreglo[ x ]; /* Coloca en el puertoA los elementos del arreglo en intervalos de 3 segundos */
retardo ( 3 );
}
}
////////////////
void main ( void ) { /* Función principal */
CONFIG1_COPD = 0x01; /* Deshabilita el perro guardián */
DDRA = 0xFF; /* PuertoA como salida, NOTA el registro DDRA Puede cambiar en algunos micros */
for( ; ; ) { /* ciclo infinito */
unsigned char numeros1_3[ 3 ] = { 0x01, 0x02, 0x03 }; /* define el arreglo con los números del 1 al 3 */
colocarNumero ( numeros1_3 ); /* envía el inicio del arreglo a la función para que coloque en el puertoA los elementos del arreglo en intervalos de 3 segundos */
/* secuencia de de salida 00000001 (1) 00000010 (2) 00000011 (3) */
}
}
El código anterior se compila perfectamente y montado sobre un Protoboard funciona muy bien
Al agregar un nuevo vector para que la funcion lo envie al puertoA el compilador genera errores ¿
POR Qué el siguiente código genera error? Simplemente se adhirió al código anterior lo siguiente
...
unsigned char numeros4_6[ 3 ] = { 0x04, x05, 0x06 }; /* define el arreglo con los números del 4 al 6 */
colocarNumero ( numeros4_6 ); /* secuencia de de salida 00000100 (4) 00000101 (5) 00000110 (6) */
...
Por favor compilar el anterior codigo y descubrir el error
Gracias
...
for( ; ; ) { /* ciclo infinito */
unsigned char numeros1_3[ 3 ] = { 0x01, 0x02, 0x03 }; /* define el arreglo con los números del 1 al 3 */
colocarNumero ( numeros1_3 ); /* envía el arreglo a la función para que coloque en el puertoA los elementos del arreglo en intervalos de 3 segundos */
/* secuencia de de salida 00000001 00000010 00000011 */
// codigo en donde se genera el error??
unsigned char numeros4_6[ 3 ] = { 0x04, x05, 0x06 }; /* define el arreglo con los números del 4 al 6 */
colocarNumero ( numeros4_6 ); /* secuencia de de salida 00000100 00000101 00000110 */
}
}
Link de un foro amigo
http://www.ucontrol.com.ar/forosmf/freescale/