Documente Academic
Documente Profesional
Documente Cultură
para el PIC18FX5XX
PCM
Genera código para microcontroladores con 14
bits en memoria de programa.
PCH
Genera código para microcontroladores con 16
bits en memoria de programa (PIC18FX5XX).
IDE-CCS
CCS
Comentarios
Informan el significado de cada parte del
programa. Son ignorados por el compilador y
puede ser colocado en cualquier parte; excepto
en medio de una palabra reservada, del nombre
de una función o del nombre de una variable.
Ejem.
/* Esto es un comentario */
Declaraciones
Establece los nombres y los atributos de las constantes y variables globales.
Tipos de datos constantes utilizados en el programa.
Tipos de variables utilizados en el programa.
Funciones
{Es un colección de declaraciones locales, definiciones, expresiones y sentencias
para realizar una determinada tarea}.
Función principal
{Toda la programación en C contienen una función principal llamada “main”, donde
el programa empieza la ejecución. Las llaves indican el inicio y el punto final del
programa}.
Estructura básica de un programa en C
ESTRUCTURA DE UN PROGRAMA EN C DE CCS
1. COMENTARIO SOBRE EL PROYECTO.
Nombre del archivo.
Descripción sobre que realiza el sistema.
Autor-año.
2. CONFIGURACIÓN DEL MICROCONTROLADOR
3. LIBRERÍAS A INCLUIR (ARCHIVOS .C, .H)
4. VALORES INICIALES PARA LOS MÓDULOS A UTILIZAR
5. DECLARACIÓN DE CONSTANTES
6. DECLARACIÓN DE VARIABLES
7. TRATAMIENTO DE INTERRUPCIONES
8. FUNCIONES (SUBRUTINAS)
9. VALORES INICIALES PARA LOS MÓDULOS A UTILIZAR
10.INICIO DE PROGRAMA
Configuración de periféricos del PIC
Configuración faltantes
11.BUCLE DEL PROGRAMA
12.FIN DE PROGRAMA
Estructura básica de un programa en C
// Directivas del procesador
#INCLUDE <18F2550.h>
#DEVICE ADC=10
#FUSES HSPLL,PUT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN
#USE delay(clock=48000000)
#DEFINE USB_EP1_TX_ENABLE USB_ENABLE_BULK //Turn on EP1(EndPoint1) for IN bulk/interrupt transfers
// Declaraciones
Static char valor[8]; //Vector donde almacenamos datos recibidos
Char P_dato,dato1,dato2,dato3,dato4; //Dato a ejecutar
Int8 adc_lo_2=0; //Contiene el LSB del valor del ADC
Int16 read_adc;
// Funciones
FUNCION_1 ( )
{
//Instrucciones;
}
FUNCION_2 ( )
{
//Instrucciones;
}
// Funcion principal
VOID MAIN()
{
set_tris_b(0x00); //Configuracion puerto B como salida
output_b(0x00); //Limpiamos el puerto B
set_tris_c(0b00111000);
#DEFINE
#ELIF
#ELSE
#ENDIF
#ERROR
#IF
#IFDEF
#IFNDEF
#INCLUDE
#LIST
#NOLIST
#PRAGMA
#UNDEF
Directivas en C del procesador
2. Directivas asociadas a las bibliotecas precompiladas, que proporcionan al
compilador información relacionada con estas bibliotecas:
#USE DELAY
#USE FAST_IO
#USE FIXED_IO
#USE I2C
#USE RS232
#USE STANDARD_IO
#DEVICE
#ID
#FUSES
#TYPE
Directivas en C del procesador
4. Directivas para identificar las características especiales de una función:
#INLINE
#INT_DEFAULT
#INT_GLOBAL
#INT_xxxxx
#SEPARATE
5. Directivas de control del compilador, referidas a la compilación del código del programa:
#CASE
#OPT
#ORG
#PRIORITY
funciones:
delay_us(microseg);
delay_ms(miliseg);
Otros usos:
123 Decimal
0123 Octal
0x123 Hexadecimal
0b010101011 Binario
'A' Carácter
'\010' Carácter Octal
'\xA5' Carácter Hex.
“Cadena” Cadena de caracteres
\n,\r,\b,\t Caracteres especiales
CCS
Tipos de datos
CCS
Variable
La variable consistente en una caja en la que podemos
guardar algo, podemos disponer de muchas y tiene en su
frente su nombre; solo se pueden guardar en ellas
determinados tipos de objetos.
tipo_variable identificador [=valor_inicial];
tipo_variable = Tipo de dato de la variable.
Identificador = Nombre asignado a la variable.
valor_inicial = Valor inicial almacenado en la memoria asignada
Ejm.
Int b; int c =10; signed int8 i=-1,j=4,k=3,l=8,m=-1,n=4,w;
char abc,institucion, frase=”Dios mi Salvador”;
int8 recibe[2]; int8 modo[4]={40,50,60,80};
int8 envia[1]
CCS
Las variables deben ser declaradas antes de
ser utilizadas.
Pueden ser declaradas como locales o
globales.
Pueden ser definidas como:
AUTO: La variable existe mientras la
función está activa.
STATIC: Una variable local se activa como
global.
EXTERN: Permite el uso de variables en
programas de múltiples archivos.
IDE para CCS
Conversiones entre tipos
CCS nos permite mezclar diferentes tipos de variables dentro de una
misma expresión. Y existen un conjunto de reglas que nos permiten
saber que de que tipo será el resultado de la misma.
Ejm.
int a = 250, b = 10; c = a*b;
Si hubiésemos hecho:
int8 a = 250, b = 10;
long c= a*b; /* el valor almacenado en c hubiese sido efectivamente
2500 */
Funciones
donde:
nombre-> es el identificador con que es definida la función a la que
queremos llamar.
parámetros-> es la lista de valores que se asignan a cada parámetro
de la función (en caso de que tenga), separados también por comas.
Funciones
Valores devueltos
Todas las funciones, excepto aquellas de tipo void, devuelven un valor. Este valor se especifica
explícitamente en la sentencia return y si no existe ésta, el valor es 0.
return expresión;
Ejemplo.
Ejm.
funcion1 ()
{char abc;
.
.
.}
main()
{ char abc;
.
.
.}
funcion1()
{
.
.
.}
La variable tipo char llamada abc podrá utilizarse dentro de main() o
de funcion1().
Estructuras de control repetitivas
• Ciclos
while(a<100)
a<100?
{ No
a++; Si
}
//puede que no se
//ejecute ninguna
//vez a=a+1
Mientras que: WHILE
instrucción1;
“evaluable”
WHILE(condición) a verdadero
instrucción2; o falso.
Palabra
reservada instrucción3;
Se repite mientras
instrucción1; se evalúe “verdadero”
WHILE(condición)
{ instrucción2;
instrucción3;
instrucción4;
Bloque
}
instrucción5;
Hasta que: DO-WHILE
do
{
a++; a=a+1
}
while(a<100)
//el bucle se
//ejecuta al menos a<100?
No
//una vez
Si
Hasta que: DO-WHILE
instrucción1;
do “evaluable”
instrucción2; a verdadero
while(condición); o falso
Palabra instrucción3;
reservada
instrucción1;
Se repite mientras
Do se evalúe “verdadero”
{ (Igual que el while)
instrucción2;
instrucción3;
instrucción4;
}
while(condicion);
Bloque
instrucción5;
Número de veces: FOR
for (n=1;n<=10;n++)
{
n=1
contador=n;
}
n<=10?
No
Si
contador=n
n=n+1
Número de veces: FOR
instrucción 1;
for (inicio; termino; incremento o decremento)
instrucción 2;
instrucción 3;
instrucción 1;
for (inicio; termino; incremento o decremento)
{
instrucción 2;
instrucción 3;
}
instrucción 4;
Número de veces: FOR
0
1
int i; 2
for(i=0;i<10;i++) 3
4
{ 5
printf(“%d\n\r”,i); 6
} 7
8
9
Número de veces: FOR
0 - 10
int i,j; 1-9
2-8
for(i=0,j=10;((i<10)&&(j>0));i++,j--) 3-7
4-6
{ 5-5
printf("%d - %d\n\r",i,j); 6-4
7-3
} 8-2
9-1
ESTRUCTURAS DE CONTROL
4
Selectiva (Si-entonces): IF
La sentencia if permite decidir, ejecutar o no una instrucción o
un bloque de instrucciones.
Sintaxis
if (condición)
Instrucción o bloque;
Verdadero
condición
Falso sentencias
Selectiva (Si-entonces): IF
if (a==0)
{ a=0?
Si
b=10
b=10; No
}
instrucion1;
instrucion2; Otras instrucciones
instrucion3;
Selectiva (Si-entonces): IF
instruccion1;
if(condición)
instrucción2; “evaluable”
instrucción3; Si es verdadero, se
ejecuta instrucción2.
Palabra
reservada Si es falso, se ejecuta
instrucción3.
instrucción1;
if(condición) Bloque
{
instrucción2; “evaluable”
Bloque
instrucción3; Si es verdadero, se
instrucción4; ejecuta Bloque.
} Si es falso, se ejecuta
Instrucción5; instrucción5.
Selectiva (Si entonces-sino) IF - ELSE
La sentencia if – else permite decidir entre ejecutar una instrucción (o
un bloque de instrucciones) y otra instrucción (o un bloque de
instrucciones) Sintaxis
if (condición)
Instrucción o bloque;
else
Instrucción o bloque;
Falso Verdadero
condición
sentencias sentencias
Selectiva (Si entonces-sino) IF - ELSE
if (a==0)
{
b=10; Si
} a=0? b=10
else c=5; No
c=5
Selectiva (Si entonces-sino) IF - ELSE
if (a==0) Si
a=0? b=10
b=10;
else if (a>0) No
b=5;
No Si
else b=0; a>0?
b=0 b=5
Selectiva (Si entonces-sino) IF - ELSE
instruccion1; instrucción1;
if(condición) if(condición)
instrucción2; {
instrucción2;
else
instrucción3;
instrucción3;
instrucción4;
Instruccion4;
}
else
{
instrucción5;
instrucción6;
Palabra Se ejecuta si
}
reservada la “condición”
es verdadera Instrucción7; “condición”
falsa
Selectiva (Si entonces-sino) IF - ELSE
Instrucción 1; Instrucción 1;
If (condición 1)
If (condición 1)
{
instrucción2; instrucción2;
else }
else
if (condicion2) {
instrucción 3; if (condición 2)
else {
instrucción 3;
if (condición 3) }
instruccion4; else
{
Instrucción 5;
if (condición 3)
{
instrucción 4;
}
}
}
instrucción 5;
Selectiva (En el caso de) CASE
switch (A)
{
case 0: Si
B=10; A=0? B=10
break; N
case 1: o
Si
B=20; A=1? B=20
break;
case 2: N
o
B=30;
Si
break; A=2? B=30
default:break;
} N
o
Selectiva (En el caso de) CASE
Variable
por analizar
switch(<var>) Valores de
{ <var>
case <op1>:
instrucción 1;
instrucción 2;
break;
case <op2>: Ìr al termino
Palabras instrucción 3;
reservadas instrucción 4;
break;
default :
instrucción 5;
instrucción 6;
Termino }
de casos
Operadores de asignación
Permiten asignar valores a las variables. Tenemos las siguientes.
Operador Descripción
+= Asignación de suma. x+=y es lo mismo que x=x+y
-= Asignación de resta. x-=y es lo mismo que x=x-y
*= Asignación de multiplicación. x*=y es lo mismo que x=x*y
/= Asignación de división. x/=y es lo mismo que x=x/y
%= Asignación de resto de división. x%=y es lo mismo que x=x%y
Asignación de desplazamiento a la izquierda. x<<=y es lo mismo
<<=
que x=x<<y
Asignación de desplazamiento a la derecha. x>>=y es lo mismo
>>=
que x=x>>y
&= Asignación de AND de bits. x&=y es lo mismo que x=x&y
|= Asignación de OR de bits. x|=y es lo mismo que x=x|y
Asignación de OR exclusivo de bits (XOR). x^=y es lo mismo que
^=
x=x^y
Operadores aritméticos
Permiten la realización de operaciones matemáticas en nuestros
programas.
1. Si a = 15, b = 20, c = 30
Determine el valor de verdad de la expresión:
( ( a > b ) || ( a < c )) && (( a == c ) || ( a >= b ))