Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Clase 3 uP
CCS C
1
Compilador C para PIC
CCS PIC COMPILER
2
Compilador C para PIC
CCS PIC COMPILER
Directivas de preprocesado
Indican al compilador cmo debe generar el
cdigo mquina.
Programas
Bloques de programa.
Siempre debe incluirse una llamada main().
Sentencias
Instrucciones que definen lo que hace el
programa y la secuencia de ejecucin del mismo.
Comentarios
Imprescindibles como documentacin del
cdigo fuente.
3
Compilador C para PIC
VARIABLES
Las variables pueden ser locales o globales. Las variables locales slo pueden ser
usadas en la funcin en que se declaran, mientras que las variables globales son
compartidas por todas las funciones del programa (deben declararse fuera de cualquier
funcin y antes de ser utilizadas).
4
Compilador C para PIC
VARIABLES
Los tipos de variable short y long pueden tener detrs la palabra int sin efecto alguno.
5
Compilador C para PIC
VARIABLES
Todos los tipos de datos son por defecto sin signo (unsigned) salvo los de tipo float.
Para almacenar datos con signo, hay que introducir el modificador signed delante del
tipo. El efecto que se consigue es el recogido en la siguiente tabla.
Cuando se opera con distintos grupos de datos en una misma expresin, se aplican una
serie de reglas para resolver las diferencias. En general se produce una promocin
hacia los tipos de datos de mayor longitud presentes en la expresin.
6
Compilador C para PIC
FUNCIONES
Las funciones son los bloques constructivos fundamentales en C. Todas las sentencias
deben encontrarse dentro de funciones.
Las funciones deben ser definidas antes de ser utilizadas.
Formato general de definicin de una funcin:
Las funciones pueden devolver un valor a la sentencia que las llama. El tipo de dato
devuelto se indica mediante tipo_dato (char, int16, long). Si no se indica nada, se
entiende que devuelve un entero. Si no devuelve nada, debe incluirse una especificacin
tipo void.
7
Compilador C para PIC
FUNCIONES
La manera que tiene una funcin para devolver un valor es mediante la sentencia
return.
return (expresin); return expresin;
Cuando una funcin se encuentra con una sentencia return se vuelve a la rutina de
llamada inmediatamente y las sentencias posteriores a return no se ejecutan.
Adems de con las sentencia return, las funciones terminan su ejecucin y vuelven al
lugar desde donde se les llam cuando alcanzan la llave de cierre de funcin } tras
ejecutar la ltima sentencia de la misma.
8
Compilador C para PIC
FUNCIONES
Los argumentos se pueden pasar a las funciones por valor o por referencia.
La llamada por valor copia el argumento de llamada en el parmetro formal de la
funcin (No modifica su valor en la funcin de partida).
La llamada por referencia usa la direccin de la variable que se pasa a la funcin
(se consigue usando punteros o arrays).
9
Compilador C para PIC
OPERADORES
De asignacin
Aritmticos
10
Compilador C para PIC
OPERADORES
Relacionales
Lgicos
De bits
11
Compilador C para PIC
OPERADORES
In/decremento
Desplazamiento bit
Direccin/indireccin
12
Compilador C para PIC
OPERADORES
13
Compilador C para PIC
DECLARACIONES
14
Compilador C para PIC
Sentencias de control de programa
Sentencia if
Se ejecuta una sentencia o bloque de cdigo si la expresin que acompaa al
if tiene un valor distinto a cero (verdadero). Si es cero (falso) contina sin
ejecutar la sentencia o bloque de sentencias.
if (expresin)
sentencia; {
sentencia 1;
sentencia 2;
...
}
Sentencia if-else
Se evala una expresin y, si es cierta, se ejecuta el primer bloque de cdigo
(o sentencia 1). Si es falsa, se ejecuta el segundo.
if (expresin)
sentencia 1; (expresin) ? (sentencia 1) : (sentencia 2);
else
sentencia 2;
15
Compilador C para PIC
Sentencias de control de programa
Sentencia if-if/else
If (a>b) {
If (a>d) c = 15;
else c=0; }
If (a>b) {
If (a>d) c = 15;
}
else c=0;
16
Compilador C para PIC
Sentencias de control de programa
Sentencia switch
Substituye a if-else cuando se realiza una seleccin mltiple que compara una
expresin con una lista de constantes enteras o caracteres. Cuando se da una
coincidencia, el cuerpo de sentencias asociadas a esa constante se ejecuta
hasta que aparezca break.
switch (expresin) break es opcional. Si no aparece se
{ sigue con el case siguiente.
case constante 1:
grupo 1 de sentencias;
break; No puede haber constantes iguales
case constante 2: en dos case de la misma sentencia
switch.
grupo 2 de sentencias;
break;
... default es opcional y el bloque
default: asociado se ejecuta slo si no hay
grupo n de sentencias; ninguna coincidencia con las
constantes especificadas.
}
17
Compilador C para PIC
Sentencias de control de programa
Sentencia switch
Switch (k) {
case 0:
x=1;
break;
case 2:
c=6;
b=15;
break;
case 3: x=12;
break;
default: break;
}
18
Compilador C para PIC
Sentencias de control de programa
Sentencia de bucle for
Se emplea para repetir una sentencia o bloque de sentencias.
for (inicializacin ; condicin ; incremento)
{
sentencia(s);
}
19
Compilador C para PIC
Sentencias de control de programa
Sentencia de bucle for
For (i=1;i<=100;i++) {
delay_ms(33);
px=?px;
}
For (y=1;i<=99;y=y+3) {
delay_ms(33);
px=y;
}
20
Compilador C para PIC
Sentencias de control de programa
Sentencia de bucle while
La repeticin se lleva a cabo mientras sea cierta una expresin.
while (expresin)
{
sentencia(s);
}
La expresin se evala antes de cualquier iteracin. Si es falsa, ya no se
ejecuta la sentencia o bloque de sentencias.
Sentencia de bucle do-while.
do
{
sentencia(s);
}
while (expresin)
Las sentencias se ejecutan antes de que se evale la expresin, por lo que el
bucle se ejecuta siempre al menos una vez.
21
Compilador C para PIC
Sentencias de control de programa
Sentencia de bucle while-do/while
do {
a=1;
b=45;
x=p1;
}
while (x>0 && y++>5);
22
Compilador C para PIC
Comentarios
Los comentarios se incluyen en el cdigo fuente para explicar el sentido y la
intencin del cdigo al que acompaan. Son ignorados por el compilador y no
afectan a la longitud ni rapidez de ejecucin del cdigo final.
Un comentario se puede colocan en cualquier lugar del programa y pueden
tener la longitud y el nmero de lneas que se quiera.
Hay dos formatos posibles para los comentarios.
Formato 1. Empiezan por // y finalizan con el final de la lnea.
// Esto es un comentario.
/* Esto tambin es
un comentario */
/* Pero esto que /* parece un comentario vlido*/ no lo es */
23
Compilador C para PIC
C especfico para los PIC
Al final de esta seccin se incluyen sendas listas con las directivas y las
funciones integradas correspondientes al compilador de CCS.
#BIT id=x.y Se crea una variable tipo bit correspondiente al bit y del byte x
en memoria.
24
Compilador C para PIC
C especfico para los PIC
25
Compilador C para PIC
C especfico para los PIC
27
Compilador C para PIC
built-in functions
28
Compilador C para PIC
built-in functions
29
Compilador C para PIC
PIC C COMPILER
Se puede Crear o abrir un fichero (FILE > NEW / OPEN) o crear un proyecto
(conjunto de ficheros y opciones de compilacin que se utilizan en un
programa). Los proyectos tienen la extensin PJT.
Para crear un nuevo proyecto PROJECT > NEW > PIC WIZARD / MANUAL
CREATE
30
Compilador C para PIC
PIC C COMPILER PCB (12bit)
PCM (14bit)
PCH (PIC18)
COMPILAR (F9)
MONTARLO
31
Compilador C para PIC
GESTION DE PUERTOS
Existen dos opciones para configurar y manejar los puertos E/S
32
Compilador C para PIC
GESTION DE PUERTOS: POR RAM
OPCIN 1. Definiendo los registros en la RAM. Se definen los registros PORTx y TRISx
como bytes y se sitan en la posicin correspondiente de la memoria RAM. La
directiva C utilizada es #BYTE:
#BYTE variable=constante;
#BYTE TRISA = 0x85 //Variable TRISA en 85h.
#BYTE PORTA = 0x05 //Variable PORTA en 05h.
#BYTE TRISB = 0x86 //Variable TRISB en 86h.
#BYTE PORTB = 0x06 //Variable PORTB en 06h.
Una vez definidas estas variables se pueden configurar y controlar los puertos
mediante comandos de asignacin.A partir de este punto, estas variables
permiten controlar los puertos y se pueden utilizar en sentencias de
asignacin.
TRISA = 0xFF; // 8 terminales de entrada
TRISB = 0x00; // 8 terminales de salida
TRISC = 0x0F; // 4 pin de mayor peso OUT,4 pin de menor peso IN
33
Compilador C para PIC
GESTION DE PUERTOS: POR RAM
Escritura en los puertos:
PORTC = 0x0A; // salida del datos 00001010 por el puerto C
Lectura de puertos:
valor = PORTA; // Asigna el dato del puerto A a la variable valor.
Manejo de sentencias:
TRISD=0x0F;
if (PORTD & 0x0F) PORTD |= 0xA0; //comprueba los 4 terminales de
// menor peso del puerto D y si son
// 1111 saca por los 4 terminales de
// mayor peso el dato 1010.
34
Compilador C para PIC
GESTION DE PUERTOS: POR RAM
35
Compilador C para PIC
GESTION DE PUERTOS: POR RAM
Ejemplo: LED CONTROLADO POR BOTON
21
RB0/INT
22
RB1
23
RB2
24 SW1
RB3/PGM
25
RB4 SW-SPST-MOM
RB5
26 D1
27 LED-BLUE
RB6/PGC
28
RB7/PGD
11
RC0/T1OSO/T1CKI
12
RC1/T1OSI/CCP2
13 R1
RC2/CCP1
14 180
RC3/SCK/SCL
15
RC4/SDI/SDA
16
RC5/SDO
17
RC6/TX/CK
18
RC7/RX/DT
COMPILAR (F9)
MONTARLO
36
Compilador C para PIC
GESTION DE PUERTOS: POR DIRECTIVAS
37
Compilador C para PIC
GESTION DE PUERTOS: POR DIRECTIVAS
#define PIN_A0 40
#define PIN_A1 41
38
Compilador C para PIC
GESTION DE PUERTOS: POR DIRECTIVAS
39
Compilador C para PIC
GESTION DE PUERTOS: POR DIRECTIVAS
El efecto de colocar una u otra directiva se puede observar en los ficheros *.lst
que se generan como resultado de la compilacin. En general se puede decir
que resulta ms cmodo gestionar los pines de E/S de modo STANDARD, pero
hacindolo de modo FAST se adquiere ms control de lo que se le est
mandando al PIC y se optimiza cdigo.
40
Compilador C para PIC
GESTION DE PUERTOS: POR DIRECTIVAS
41
Compilador C para PIC
GESTION DE PUERTOS: POR PUNTEROS
La memoria se puede acceder en C usando punteros. Los punteros deben ser del
tipo INT.
portb es un puntero INT cuyo valor es la direccin del bus del dispositivo. El
puerto es accesible mediante el uso del operado *.
int p
p = *portb
42
Compilador C para PIC
GESTION DE PUERTOS: POR PUNTEROS
43
Compilador C para PIC
GESTION DE PUERTOS: POR PUNTEROS
44