Implementación de Clases escritas en CCS C Compiler para el control de micro controladores PIC18F4550

TODO EL SOFTWARE IMPLEMENTADO BAJO ESTE TALLER, POSIBLEMENTE UTILICE IMPLEMENTACIONES NO LIBRES, LABORATORIO DE UNIVERSIDAD....

Funciones.

Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa y de esta manera reducir la cantidad de código. Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.WikiBooks

Sobre el siguiente taller, vamos describir algo del funcionamiento de el lenguaje C aplicado a microcontroladores de la marca MicroChip

Herramientas

  • Entorno de simulación: VBox Windows 8.1 codigo cerrado
  • Compilador CCs código cerrado.
  • Proteus 8 código cerrado.

    Esperamos tener próximamente un taller aplicado el mismo controlador basado en Alternativas totalmente libres como SDCC

Implementacion de Funciones.

Función Fun_get.c:

Para llevar acabo esta ejecución, es necesario crear un proyecto nuevo sobre CCS C Compiler llamado "Fun_get.c" y agregue el siguiente código sobre esta función.

//Incluye la librería para el controlador microchip 18f4550 #include 18f4550.h // Define un ciclo de reloj de 4Khz #use delay(clock=4000000) // Inicia la comunicación USB nativa del microcontrolador #use rs232(baud=9600, bits=8, parity=N, xmit=PIN_C6, RCV=PIN_C7 )

// Función de Inicio del programa
void main()
{ // Defino un carácter
char ch;
// Imprime sobre la consola serial el texto de como salir del programa
printf("Para salir del programa pulsa la tecla n\r\r");
// Bucle o Sentencia repetitiva que valida el carácter oprimido
do {
//obtiene el carácter de la entrada de teclado
ch=getch();
// Imprime la tecla pulsada
printf("Has pulsado la tecla: %c\n",ch );
// Imprime el valor en ASCII
printf("El carácter %c tiene un valor ASCII decimal de: %d\r",ch,ch);
}// Valida la tecla oprimida y repite el proceso mientras no se oprima la tecla "n"
while(ch='n');
}

Esta primera Clase tiene internamente una función llamada void main()
La tarea de esta función es "Iniciar" la ejecución del programa sobre el microcontrolador.
El código es muy simple, solamente valida la entrada de teclado diferente de "n" y imprime el valor indicado en la entrada.

Compilamos el código en nuestro Software CCS C Compiler

Para la implementación del código contamos con un simulador llamado Proteus con el cual podremos llevar a cabo la simulación de nuestro circuito

  • directamente sobre nuestro computador creando una interfaz simulada del chip.

Para este caso, hemos creado un proyecto sobre Proteus 8 el cual realizara una implementación de un pic18f4550 con una interfaz serial conectada al puerto USB y próxima visualización en pantalla de los datos, si es necesario el archivo descargarlo de aquí y abrirlo como proyecto sobre Proteus 8

Al compilar nuestro código, este genera un archivo Hexa Decimal el cual podremos cargar directa sobre Proteus.
Seleccionamos el pic y cargamos el archivo .hex

Ejecutamos los fuentes sobre CCs y confirmamos sobre el emulador de terminal la ejecución del código.

Así, podemos repetir el procedimiento con todas las funciones que vamos a implementar.

Función Fun_put.c:

Para este caso, creamos un proyecto bajo CCS C Compiler llamado Fun_put.c

//Incluye la librería para el controlador microchip 18f4550 #include 18f4550.h // Incluimos librería stdio #include stdio.h // Defin un ciclo de relog de 4Khz #use delay(clock=4000000) // Inicializa la comunicacion USB natida del micron controlador #use rs232(baud=9600, bits=8, parity=N, xmit=PIN_C6, RCV=PIN_C7 )

// Se define el método de inicio de ejecución
void main(){
// Inicia vector de 9 posiciones
char nombre[9];
// Advierte un numero máximo de caracteres
puts("introduce tu nombre (maximo 9 caracteres)");
// optiene el los 9 caracteres y llena el vector con los datos optenidos en "puts"
gets(nombre);
// Imprime la variable nombre y la imprime total
printf("tu nombre es %s \n", nombre);
// sacamos el tercer carácter de la variable nombre y lo imprime
printf("el tercer caracter es %c", nombre[2]);

}

Esta Clase, recibe una cadena de caracteres el cual ira almacenando en el vector definido como nombre, imprime la cadena previamente almacenada y imprime el carácter que se encuentra en la posición 2

Función Operadores.c:

Para este caso, crearemos un proyecto sobre CCS C Compiler llamado Operadores.c

//Incluye la librería para el controlador microchip 18f4550 #include 18f4550.h // Incluimos librería stdio #include stdio.h // Incluimos la librería stdlib #include stdlib.h

// Define un ciclo de relog de 4Khz

use delay(clock=4000000)

// Inicia la comunicación USB nativa del microcontrolador

use rs232(baud=9600, bits=8, parity=N, xmit=PIN_C6, RCV=PIN_C7 )

void main(){
// Se define un vector de 6 registros de tipo char
char cadena1[6];
char cadena2[6];

// se definen variables con signo tipo long
signed long y;
signed long x;
signed long suma;
signed long resta;
signed long producto;
signed long division;
signed long modulo;

printf("introduce el valor de x \n"); // Se imprime en pantalla la solicitud del caracter
gets(cadena1); // se lee el valor de X y se almacena en cadena1
x = atoi(cadena1); // convierte los caracteres a entero tipo signed long
printf("x = %Ld \n",x); // Imprime el valor de x en

printf("introduce el valor de y \n"); // muestra en pantalla la solicitud del caracter
gets(cadena2); // obtiene la cadena y la almacena sobre cadena2
y = atol(cadena2); // convierte los caracteres a entero tipo signed long
printf("x = %Ld \n",y); // imprime el nuevo calor del entero en "y"

//sizr of trae el tamaño en bytes
printf("el tama\xa4o de x es: %d bytes \n",sizeof(x)); // imprime el tamaño de x
printf("el tama\xa4o de y es: %d bytes \n",sizeof(y)); // imprime el tamaño de y
// operaciones aritméticas
suma =  x +y ;
resta =  x-y;
producto= x* y;
division = x/y;
modulo = x%y;
//Impresión de la operaciones aritméticas. 
printf("x+y= %Ld \n", suma);
printf("x-y= %Ld \n", resta);
printf("x*y= %Ld \n", producto);
printf("x/y= %Ld \n", division);
printf("su reciduo = %Ld",x%y);

}


Esta clase, recibe como parámetros dos cadenas de caracteres que se esperan a la entrada que por lo menos sean numéricos para poder ejecutar algunas operaciones aritméticas sobre este, y imprimirlos en pantalla con su resultado.

Función Operadores2.c

Para este caso, crearemos un proyecto sobre CCS C Compiler llamado Operadores2.c

//Incluye la librería para el controlador microchip 18f4550 #include<18f4550.h> // Define un ciclo de relog de 4Khz #use delay(clock=4000000) // Inicia la comunicación USB nativa del microcontrolador #use rs232(baud=9600, bits=8, parity=N, xmit=PIN_C6, RCV=PIN_C7 ) // Incluye las librerías standard para el control de entrada y salidas y gestion de de memoria #include #include // Método de inicio para el microcontrolador void main(){ // Definición de vectores de caracteres y datos de tipo flotante. char cadena1[6]; char cadena2[6]; float y; float x; float suma; float resta; float producto; float division;

printf("introduce el valor de x \n"); // imprime en pantalla el texto
gets(cadena1); // captura el valor para x
x = atof(cadena1); // convierte los caracteres ASCII a float
printf("x = %1.4f \n",x); // Imprime el valor para x

printf("introduce el valor de y \n"); // Imprime en pantalla el text
gets(cadena2); // captura el valor para y
y = atof(cadena2); // convierte los caracteres ASCII a float
printf("y = %f \n",y);
//sizr of trae el tamaio en bytes de x/y
printf("el tama\xa4o de x es: %d bytes \n",sizeof(x));
printf("el tama\xa4o de y es: %d bytes \n",sizeof(y));
// Operaciones aritméticas
suma =  x +y ;
resta =  x-y;
producto= x* y;
division = x/y;
//Impresión de las operaciones aritméticas con los números
printf("x+y= %1.4f \n", x+y);
printf("x-y= %1.4f \n", x-y);
printf("x*y= %1.4f \n", x*y);
printf("x/y= %1.4f \n", x/y);

}

Esta clase opera muy parecido a la clase anterior solamente que el tipo de datos para esta son tipo "float"
Y hasta aquí hemos finalizado el taller del día de hoy.
Este es uno de muchos talleres que estaremos realizando basados en Electrónica Digital.