Curso básico de programación de PIC en C

Cualquier cosa relacionado con la programación de Microcontroladores PIC en C utilizando el compilador CCS.

Curso básico de programación de PIC en C

Notapor biblioman » Vie Mar 20, 2009 5:25 pm

Aportaciones al curso básico de programación de PIC en C. Pon aquí cualquier aporte que quieras hacer y que creas que sea útil al curso: ejemplos, enlaces, etc.

Para acceder a la explicación correspondiente a cada ejemplo accede desde el curso de teoría:

http://www.aquihayapuntes.com/progranacion-pic-en-c.html?start=1

Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Curso básico de programación de PIC en C

Notapor jose » Sab Jul 18, 2009 6:19 pm

Hola a todos :mrgreen: :mrgreen: Videotutorial publicado en YouTube sobre como crear un proyecto con PCW de CCS



Que lo disfruteis :D :D
jose
 
Mensajes: 9
Registrado: Sab Jul 18, 2009 4:08 pm

Re: Curso básico de programación de PIC en C

Notapor biblioman » Vie Jul 24, 2009 4:09 pm

Uso de las funciones getc(), getch() y getchar(): Ejemplos de como utilizar estas funciones en CCS
Código: Seleccionar todo
/*--------------------------------------------------------*\
|  EJEMPLO - uso de la función getch(),getc(),getchar()   |
|  www.aquihayapuntes.com                                 |
\*--------------------------------------------------------*/

#include <16F877.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D0, RCV=PIN_D1)

void main() {

  char ch;
       
  printf("Introduzca un caracter :\r");
  ch=getch();
  printf("El caracter %c tiene un valor ASCII decimal de %d.\r",ch,ch);
  ch=getc();
  printf("El caracter %c tiene un valor ASCII decimal de %d.\r",ch,ch);
  ch=getchar();
  printf("El caracter %c tiene un valor ASCII decimal de %d.\r",ch,ch);
}


Y el segundo ejemplo:

Código: Seleccionar todo
/*--------------------------------------------------------*\
|  2 EJEMPLO - uso de la función getch(),getc(),getchar() |
|  www.aquihayapuntes.com                                 |
\*--------------------------------------------------------*/

#include <16F877.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D0, RCV=PIN_D1)

void main() {

  char ch;     
  printf("Para salir del programa pulsa la tecla n\r");
 
  do{
       ch=getch();
       printf("Has pulsado la tecla %c\r",ch);

  }while(ch!='n');
}


:idea: He pensado incluir el código de los ejemplos en el foro, de está manera el que quiera puede comentarlos directamente ó incluir los suyos propios

:mrgreen: :mrgreen: Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Curso básico de programación de PIC en C

Notapor biblioman » Jue Jul 30, 2009 3:07 pm

Uso de las funciones gets() y puts().
Código: Seleccionar todo
/*-------------------------------------------*\
| Funciones de E/S serie: puts() y gets     |
|  www.aquihayapuntes.com                   |
\*-------------------------------------------*/

#include <16F877.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D4, RCV=PIN_D5)

void main() {
char nombre[9];
   
puts("Introduce tu nombre (max. 9 caracteres)y pulsa enter: ");
gets(nombre);
printf("Te llamas: %s\r",nombre);
//sacamos por la terminal el tercer caracter del nombre.
printf("La tercera letra de tu nombre es: %c\r",nombre[2]);
}
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Uso de operadores

Notapor biblioman » Dom Ago 30, 2009 5:06 pm

Ejemplo de como utilizar diferentes operadores:
Código: Seleccionar todo
/*-------------------------------------------*\
|  Ejemplo: Uso de operadores (I)           |
|  Autor: biblioman. www.aquihayapuntes.com |
\*-------------------------------------------*/
#include <16F877.h>
#use delay(clock=4000000)
#include <stdlib.h>
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D4, RCV=PIN_D5)
void main() {
   char cadena1[6];
   char cadena2[6];
   signed long x;
   signed long y;
   signed long suma;
   signed long resta;
   signed long producto;
   int division;
 
   printf("Introduce el valor de x, y pulsa enter:\r");
   gets(cadena1);//capturamos los caracteres numéricos introducidos
                 //por el teclado y los guardamos en el array cadena1
   x=atol(cadena1);//convertimos los caracteres a un valor entero del
                   //tipo signed long y lo guardamos en la variable x
   printf("x = %Ld\r",x);//mostramos el valor introducido
   printf("Introduce el valor de y, y pulsa enter:\r ");
   //repetimos el proceso para el segundo operando
   gets(cadena2);
   y=atol(cadena2);
   printf("y = %Ld\r",y);
   //con el operador sizeof()podemos saber el tamaño en bytes de la variable y
   printf("El tama\xa4o de y es: %d bytes\r",sizeof(y));
   suma=x+y;//realizamos diferentes operaciones con los datos
   resta=x-y;
   producto=x*y;
   division=x/y;
   printf("x+y= %Ld\r",suma);//mostramos en la terminal los resultados
   printf("x.y= %Ld\r",resta);
   printf("x*y= %Ld\r",producto);
   printf("x/y= %d ",division);
   printf(" resto: %Ld",x%y);//el operador % nos da el resto de una división
                             //entera.
}
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Ejemplo práctico del uso de operadores aritméticos

Notapor biblioman » Dom Ago 30, 2009 5:33 pm

En este ejemplo se muestra como utilizar los operadores aritméticos para simular las luces del coche fantástico.
Código: Seleccionar todo
/*--------------------------------------------------------*\
|  Coche fantástico (utilizando operadores matemáticos)   |
|  autor: biblioman                                       |
|  www.aquihayapuntes.com                                 |
\*--------------------------------------------------------*/
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#byte puerto_b=6

void main() {

   set_tris_b(0x00);
   puerto_b=1;
   delay_ms(1000);
   while(true)
  {
    while(puerto_b<=0b01000000)
     {
       puerto_b=puerto_b*2;
       delay_ms(1000);
     }
    while(puerto_b>=0b00000010)
     {
       puerto_b=puerto_b /2;
       delay_ms(1000);
     }
 
  }

}
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Sentencias Repetitivas: Bucle for()

Notapor biblioman » Dom Sep 20, 2009 10:53 am

Ejemplo que muestra las diferentes opciones que nos presenta el bucle for().

Código: Seleccionar todo
/*-------------------------------------------*\
|  SENTENCIAS REPETITIVAS: Bucle for        |
|  Autor: Biblioman. www.aquihayapuntes.com |
\*-------------------------------------------*/
#include <16F84A.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B5,bits=8)
#define VAL_MAX 20
#define MAXIMO 200
void main() {
   //Declaración de variables auxiliares
   int indice;
   int x;
   int y;
   char ch;
     
  //Primer bucle for:
   printf("Este bucle muestra los 20 primeros numeros decimales:\r");
   for(indice=1;indice<=VAL_MAX;indice++)
       printf("%d ",indice);
     
   //Segundo bucle for:
    printf("\rEste bucle muestra un bucle for con varias variables:\r");
    for(x=0,y=0;x+y<10;++x,++y)
      printf("x= %d y= %d\r",x,y);
   
   //Tercer bucle for:
    for(x=1;x<MAXIMO;x++);
    //Este bucle incrementará el valor de x hasta MAXIMO y no hará nada más.
    x=0;
   
    //Cuarto bucle for:
    printf("\rCuarto bucle for:\r");
    for(;x<=10;)
    {
       printf("x = %d ",x);
       x++;
    }
   
    //Quinto bucle for:
    printf("\rPara salir del bucle infinito pulsa la tecla: v\r");
    for(;;)
     {
     ch=getch();
     printf("\rhas salido del bucle infinito");
      if(ch=='v')
          break;
      }
   
}
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Sentencias Repetitivas: Bucle do-while()

Notapor biblioman » Lun Sep 21, 2009 7:39 pm

Ejemplo que muestra el uso del bucle do-while()

Código: Seleccionar todo
/*-------------------------------------------*\
|  SENTENCIAS REPETITIVAS:Bucle do-while    |
|  Autor: Biblioman. www.aquihayapuntes.com |
\*-------------------------------------------*/

#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B5,bits=8)

#include<stdlib.h>

void main() {
   
   int val;
   char ch[2];

   do{
    printf("Por favor, introduzca un numero entre 0 y 10\r");
    gets(ch);
    val=atoi(ch);
    if((val<1) || (val>10))
       printf("El numero tiene que estar entre 1 y 10\r");
   
   }while ((val<1) || (val>10));
    printf("Se ha introducido un %d\r",val);
}
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Sentencias Condicionales. Sentencia if-else()

Notapor biblioman » Vie Sep 25, 2009 7:45 pm

Ejemplo del uso de la sentencia condicional if-else
Código: Seleccionar todo
/*---------------------------------------------*\
|SENTENCIAS CONDICIONALES: Sentencia if-else()|
|Autor: Biblioman   www.aquihayapuntes.com    |
\*---------------------------------------------*/

#include <16F84A.h>
#use delay(clock=4000000)
#byte port_b = 0x06
#use fast_io(A) //directiva para hacer el código más eficiente

void main() {

  set_tris_a(0x1F);//Configuro puerto A como entrada
  set_tris_b(0x00);//Configuro puerto B como salida
  port_b = 0;//Inicializo el puerto B con el valor 0
   while(true)
  {
    if(input(PIN_A0))
      port_b = 0b00111111;
    else
      port_b = 0b00000110;
  }

}
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Sentencias Condicionales. Sentencia switch()

Notapor biblioman » Dom Sep 27, 2009 11:29 am

Ejemplo del uso de la sentencia switch()

Código: Seleccionar todo
/*---------------------------------------------*\
|SENTENCIAS CONDICIONALES: Sentencia switch() |
|Autor: Biblioman   www.aquihayapuntes.com    |
\*---------------------------------------------*/
#include <16F877.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B5,bits=8)
#include <stdlib.h>

void main() {
   char cadena1[20];
   int num;
   printf("Introduce un numero y pulsa enter: ");
   gets(cadena1);
   printf("%s\r",cadena1);
   num=atoi(cadena1);
   switch(num){
      case 1:
         printf("El numero introducido es el uno\r");
         printf("El 1 es un numero entero\r");
         break;
      case 2:
         printf("El numero introducido es el dos\r");
         printf("El 2 es un numero entero\r");
      case 3:
         printf("Solo estan definidos el 1 y el 2\r");
         break;
    default:
        printf("Ese numero no esta definido\r");
    }
    printf("Este ejemplo muestrar el uso de la sentencia switch");
}
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Siguiente

Volver a Programación PIC en C con CCS

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron