Portal    Foro    Talleres    Buscar    FAQ    Registrarse    Conectarse
Publicar Nuevo Tema  Responder al Tema Página 1 de 3
Ir a la Página 1, 2, 3  Siguiente
Introduccion Al Lenguaje C Para PICs
Autor Mensaje
Responder Citando  
Mensaje Introduccion Al Lenguaje C Para PICs 
 
Cita "An Introduction to Programming the Microchip PIC in CCS C" por Nigel Gardner, traucción al castellano: Micro_Cadaver  Mr. Green
Cita:

Porque usar C?

EL lenguaje C fue desarrollado en la Bell Labs a inicios de 1970 por Dennis Ritchie y Brian Kernighan. Una de las primeras plataformas de desarollo fue el PDP-11 (más información aqui) ejecutandose bajo un entorno UNIX.

Desde su aparición, ha sido mejorado y estandarizado por la industria de la computación como un definitivo lenguaje de programación. La PC se convirtió en una plataforma de desarrollo de bajo coste para el uso del C, u otras versiones del ANSI estandar.

El C es un lenguaje portátil destinado a tener mínimos cambios cuando un progama es transferido de una PC a otra. Esto es muy útil cuando se trabaja con PCs y servidores, pero los microcontroladores y microprocesadores son distintos dispositivos. El flujo del programa principal basicamente permanecera incambiable, mientras que las amplias configuraciones y los controles de puerto/periférico serán específicos de cada micro. Un ejemplo de esto es la direccion de los registros de puertos en un PIC donde 1 = Entrada y 0 = Salida, mientras que en el H8 (que eso? aqui) 0 = Entrada y 1 = Salida.

El uso del C en aplicaciones con microcontrolador ha sido impulsado por fabricantes ofreciendo extensos programas y áreas de memoria RAM para aumentar la velocidad del sistema.

Un ejemplo que me sucedió: diseñar una función stopclock me tomaba de 2 a 3 dias en C y 2 semanas en ASM.
Ah!!!! te escuche decir mientras has ido corriendo a conseguir un compilador de lenguaje C, por qué nos molestamos programando en ASM?. Todo se reduce a la eficiencia de código, un programa escrito en ASM es tipicamente el 80% del tamaño de un programa escrito en C (esto desde el punto de vista del programador en cantidad de pantalla usada, no desde el análisis de quién consume más recursos o memoria de programa). El C favorece la programacion de dispositivos con gran espacio de memoria, pero no para dispositivos pequeños. Tu eres el que paga y compra su PIC!




Última edición por micro_cadaver el 18 Dec 2007 07:35; editado 1 vez 




Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
AQUÍ PUEDE IR TU PUBLICIDAD
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
A todo esto puedo agregar que conviene mucho aprender el C para mirar el futuro de los PIC micros, pues cada vez están implementándo mayor capacidad de memoria RAM y ROM, con el 16f84A teniamos 1K de memoria de programa y ahora en el 18F2550 hay 16K  Shocked  y eso que estamos hablando de PICs del año 2000, ya estamos 2008 que se vendrá? encima esos chips eran de 8bits y ahora la microchip esta vendiendo una gama de 32 bits.

Considero positivo el aprendizaje del ASM pero como iniciación para la comprensión del hardware del microcontrolador, luego pasar a las grandes ligas con el C (o el basic) y podrán comprender mi vicio por el lenguaje C  Mr. Green .
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Estructura de un programa en C
Se observan 6 zonas basicas, con lo cual podemos partir pues en el C hay mucha libertad al momento de construir un programa. En la web existen miles de ejemplos de los cuales podemos aprender, comparar y complementar con lo que hagamos aqui.


Encabezado

Definicion de Constantes (si las hay)

Declaracion de Variables (Globales)

Declaracion de Protitpos de Funciones (si las hay)

Programa MAIN

  Funciones (si hubo prototipo)

  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Bueno, vamos a dirigir esto por el lado de los microcontroladores PIC y en especifico del compilador en C de la casa CCS, pues el C, si bien es cierto está estandarizado, posee diferencias en cuanto al hardware, puertos, perifericos entre dispositivos como un microprocesador, microcontrolador, familias, gamas, marcas, etc.

Todo esto servira de base para el hilo de ejemplos de tal manera que se conciba un avance claro y solido de esta programación.
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
El Encabezado


En el encabezado se ubica la definicion del microcontrolador a programar, en el ejemplo se observa que queremos programar al 16F84A y para tal cometido se invoca a la libreria 16F84A.h que esta en la carpeta de instalación del programa PICC (compilador CCs).

También podemos encontrar los FUSES, que son los bits de configuracion del hardware del microcontrolador, cada PIC posee caracteristicas distintas de hardware, por lo que para esta sección el compilador CCS posee una herramienta para identifcar sus fuses del pic a programar. Dicha información se peude contrastar con el datasheet del microcontrolador que se use.

Image
ruta:pestaña VIEW y luego la opción VALID FUSES.


Además de todo esto el compilador de CCS nos ofrece el uso de directivas para obtener un control sobre las diversas opciones que poseen los microcontroladores PIC, hay directivas comunes y otras que no, pues dependen de la arquitectura del micro, en el ejemplo se citan 2 directivas muy usadas, "use delay" y "use fast_io"

Ejemplo:
Cita:

#include <16F84A.h>
#FUSES NOWDT,XT,PUT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)


Directivas comunes

#INCLUDE <nombre_fichero>
#INCLUDE "nombre_fichero"
Esta directiva hace que el compilador incluya en el fichero fuente el texto que contiene el archivo especificado en <nombre_fichero>. Si el nombre del fichero se incluye entre los símbolos '< >' el compilador busca el fichero en el directorio INCLUDE que está en la carpeta de instalación PICC. Si se pone entre comillas dobles " " el compilador busca primero en el directorio actual o directorio de trabajo donde hemos guardado nuestro proyecto y si no lo encuentra, entonces lo busca en los directorios INCLUDE del compilador.

#FUSES opciones
Ya saben que es.

#USE DELAY (CLOCK=frecuencia)
Esta directiva indica al compilador la frecuencia del procesador, en ciclos por segundo, a la vez que habilita el uso de las funciones DELAY_MS() y DELAY_US(). Opcionalmente podemos usar la función restart_WDT() para que el compilador reinicie el WDT durante el retardo. Estas funciones no hacen uso de los timers, generan sus retardos a partir del uso de registros de propósito general.

#USE FAST_IO (puerto)
Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de dirección TRIS por lo tanto consume menos memoria de programa.  El usuario debe asegurarse de que los registros TRIS están configurados adecuadamente antes de operar con los puertos. El puerto puede ser A-G.

#USE FIXED_IO (puerto_OUTPUTS=pin_x#, pin_x#...)
Se genera código relativo a la dirección de los datos de manera previa cada vez que aparece una función integrada del tipo input…( ) ó output…( ), pero los pines se configuran de acuerdo con la información que acompaña a la directiva (sólo se indican los pines de salida) y no dependiendo de que la operación sea de entrada o de salida. Usa mas memoria que el fast_io. USE FIXED_IO (B_OUTPUTS = PIN_B2 , PIN_B3)

#USE STANDARD_IO (puerto)
Cada vez que se emplea una función output...() se inserta código previo para forzar a que el bit particular o el puerto completo sean de salida (mediante la carga del TRIS correspondiente). Si se tratade una función input...() se carga código para definir bit o puerto completo como de entrada. Ésta es la opción activa por defecto y usa mas memoria que el fast_io. El puerto puede ser A-G.

#ZERO_RAM
Limpia la memoria RAM antes de iniciar el programa principal.

Hay otras directivas más, pero las iremos explorando conforme se avance, les dejo una tabla con las directivas completas del CCS, aunque con cada PIC nuevo que sale aparecen nuevas directivas para estos.

Image

Tabla con las directivas del CCS

  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Definicion de Constantes


Es una directiva más del ANSI C, la quise separar porque se le puede considerar parte importante del programa, ya que con la definicion de cadenas o strings y su correspondiente identificador lograremos una mejor descripcion de nuestro programa tanto para nosotros como para con otras personas que lo utilicen.

La sintaxis es:
#DEFINE Identificador CADENA

Por ejemplo :
Cita:

#define  BITS  8                                                                  
#define rotar(x)  (x<<4)
#define PI 3.14                  
 
a=a+BITS;                // Es lo mismo que  a=a+8;          
a=rotar(a);               // Es lo mismo que a=(a<<4);        
i = PI;                      // Es lo mismo que i = 3.14;


Otras directivas muy útiles son #byte y #bit

Sintaxis:
#BYTE  identificador = x

#BIT    identificador = x . y

Por ejemplo :
Cita:

#byte  puerto_A = 0x05 //posicion de memoria en los registros especiales del portA
#byte  puerto_B = 0x06 //posicion de memoria en los registros especiales del portB                                                            
#bit     sensor_sala = puerto_A.0
#bit     sensor_patio = puerto_A.1
#bit     sensor_calle = puerto_A.2
 
puerto_A = 3;           // Es lo mismo que output_a(3);
puerto_B = 1;           // Es lo mismo que output_b(1);

sensor_sala = 1;  //es lo mismo que output_high(PIN_A0);
sensor_sala = 0;  //es lo mismo que output_low(PIN_A1);
sensor_sala = 1;  //es lo mismo que output_high(PIN_A2);

  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Declaracion de Variables


Existen en el lenguaje C para pics 2 tipos de variables:

Globales: declaradas fuera de la función principal y de cualquier otra función, y declaradas antes de ser usadas. Las variables globales permiten su uso en cualquier funcion del programa.

Locales: declaradas dentro de una función específica y solo pueden ser utilizadas dentro de la función donde fueron declaradas. Se permite que en diferentes funciones existan variables que tengan el mismo nombre.

En el lenguaje C hay varios especificadores de variables, las cuales se diferencian por su tamaño en bits:

unsigned
define un número de 8 bits sin signo                    

unsigned int
define un número de 8 bits sin signo                

int
define un número de 8 bits sin signo                          

char
define un número de 8 bits sin signo                        

long
define un número de 16 bits sin signo                        

long int
define un número de 16 bits sin signo                    

signed
define un número de 8 bits con signo                      

signed int
define un número de 8 bits con signo                  

signed long
define un número de 16 bits con signo                

float
define un número de 32 bits en punto flotante              

short            
define un bit        

short int      
define un bit

y si les parece pesado aprenderse todo eso el CCS nos ahorra ese trabajito asi:

int1
Define una variable de 1 bit
 
int8
Define una variable de 8 bits
 
int16
Define una variable de 16 bits
 
int32
Define una variable de 32 bits

Luego también el compilador nos proporciona de 2 calificadores:

static
Variable global e inicializada a 0. Se le concede una posición de memoria definitiva en la RAM.

auto
La variable existe mientras el procedimiento está activo. Es el valor por defecto, por eso no es necesario poner auto.

Ejemplos:
Cita:

El formato de declaración de una variable es la siguiente:
calificador     tipo_de_variable     nombre_de_la_variable ;

int    micro_cadaver;
int16 buscador;
static char resultado;


Les dejo una tabla con el resumen de las variables:
Image


Image

  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Programa MAIN


Bueno, hasta que llegamos a la parte más interesante e importante, en esta zona es donde se aloja nuestro codigo en lenguaje C, y pues aqui encontraremos las instrucciones y comandos y demás artilugios que nos proporciona el compilador CCS.

La Funcion MAIN
Es la función principal del programa y es la que gobierna al resto de funciones que se vayan a crear,

Cita:

void main()
{
   //aqui va todo el codigo
}


Debido a que es la función principal del programa no debe retornar ningun valor ni pedir el ingreso de variables, por eso lleva un VOID delante que indica que no retorna valores, y unos parentesis vacios () que significa que no pide el ingreso de variables, y luego su cuerpo es todo aquello que escribamos dentro de ese par de llaves { }.
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Estructuras de Control

Selectivas:
- if
- if else
- switch case

Repetitivas:
- while
- do while
- for

Bifurcaciónes:
- break
- continue

Estructura de Control IF
Es una declaración condicional cuyo código asociado es ejecutado dependiendo de la condición. Si la expresion o condicion es TRUE entonces se ejecuta la sentencia, si es FALSE se terminara la condicion, ahora, TRUE es un valor cualquiera diferente de cero 0, FALSE es un valor igual a cero 0.
 
sintaxis:

if (expresion o condicion)
   sentencia;

ejemplo:
int a,b;

if(a == 0X77)           //a es igual a 0x77?
         b = 'P' ;       //si, ejecutar sentencia b='P'
//no, fin de condicional no se ejecuto ninguna sentencia

sintaxis:

if (expresion o condicion)
   {
     sentencia1;
     sentencia2;
     sentencia3;
     sentencia4;
     sentencia5;
    }

ejemplo:

int i,j,k;

if( i == 2) //i es igual a 2?
{
         j = 6; //si, ejecutar sentencias dentro de las llaves
         k = 0X04;
}
//no, fin de condicional no se ejecuto ninguna sentencia




Estructura de Control IF-ELSE
Tenemos 2 bloques de codigo separados por la condicion, de esta manera, si la condicon es TRUE ejecutar bloque 1, si es FALSE entonces ejecutar bloque2.

sintaxis:

if (expresion o condicion)
{
  sentencia1; //bloque 1
  sentencia2;
}
else
{
  sentencia3; // bloque 2
  sentencia4;
}

ejemplo:
int A,s,b;

      if(A >= 9); porta es mayor o igual que 9?
      {
         s=255; //bloque 1     TRUE
         b=0;
      }
      else  //sino, entonces...
      {
         b=255;//bloque 2       FALSE
         s=0;
      }
      //fin de condicion




Estructura de Control IF - ELSE/ELSE IF
Es una variante del IF - ELSE, por la cual el lenguaje C nos permite realizar una estructura de condicion con mas de 2 decisiones.

sintaxis:

if (expresion1 o condicion1)
{
  sentencia1; //bloque 1
  sentencia2;
}
else if (expresion2 o condicion2)
{
  sentencia3; // bloque 2
  sentencia4;
}
else
{
  sentencia5; // bloque 3
  sentencia6;
}

ejemplo:
int r,s,k;

      if(r == 0X0F) //condicion 1
      {
         s = 0X0F;
         k = 0X0F;
      }
      else if (r == 0X0E) // condicion 2
      {
         s = 13;
         k = 13;
      }
      else //sino , entonces
      {
         s++;
         k--;
      }




Finalmente, anotamos los operadores con lo que se obtienen las condiciones o expresiones del condicional IF:

x == y   :    x (igual a) y
x != y    :    x (es diferente a) y
x > y     :    x (es mayor que) y
x < y     :    x (es menor que) y
x <= y   :    x (es menor o igual que) y
x >= y   :    x (es mayor o igual que) y
x && y    :   AND logico
x || y     :   OR logico

  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Re: Introduccion Al Lenguaje C Para PICs 
 
Estructura de Control SWITCH CASE
Recuerdan que con el IF ELSE IF se puede seleccionar hasta mas de dos decisiones o alternativas?, que tal si tuvieramos multiples alternativas, el codigo se haria engorroso y el compilador la pasaria mal también, para estos casos existe la estructura SWITCH la cual permite de manera ordenada y práctica la elaboración de múltiples alternativas frente a una variable.

La variable es contrastada con cada constante de los CASEs, cuando se ubica una coincidencia, el bloque de sentencias definido dentro de dicho case es ejecutado hasta que se encuentra al break y termina la busqueda de coincidencias y también la estructura misma. Si no se encontrara ninguna opcion que satisfaga la variable se seleccionará por defecto la opcion DEFAULT, cuya presencia en un SWITCH CASE es opcional.

sintaxis:

switch (variable)
{
        case constante1:
               sentencia1;
               break;
        case constante2:
               sentencia2;
               break;
        case constante3:
               sentencia3;
               break;
        case constante4:
               sentencia4;
               break;
           .
           .
           .

        default:
               sentenciaX;
}

ejemplo:

int buscador;

            switch (buscador)
            {
                case 0:
                output_b(0);
                break;
                case 2:
                output_b(2);
                break;
                case 4:
                output_b(4);
                break;
                case 6:
                output_b(6);
                break;

                default:
                LATB=0XFF;
            }



pueden ir dentro de cada CASE mas de una sentencia; segun el ANSI standard dice que el C soporta hasta 257 CASEs, eso es bastante
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Mostrar mensajes anteriores:
Resumen de Valoraciones:
Media de Valoración Valoración Mínima Valoración Máxima Número de Valoraciones
10.00 10 10 4
Ver Información Detallada
Elegir Valoración: 
Publicar Nuevo Tema  Responder al Tema   Página 1 de 3
Ir a la Página 1, 2, 3  Siguiente

Usuarios navegando en este Tema: 0 Registrados, 0 Ocultos y 1 Invitado
Usuarios Registrados conectados: Ninguno


 
Lista de Permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No Puede descargar archivos
Puede enviar eventos al Calendario