Professional Documents
Culture Documents
Directivas de preprocesado
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
cdigo fuente.
como
documentacin
del
p.e.:int i;
Significado
Tamao
carcter
8 bits
entero
8 bits
coma flotante
32 bits
float doble precisin no soportado
sin valor
nulo
entero de 1 bit
1 bit
entero de 8 bits
8 bits
entero de 16 bits
16 bits
entero de 32 bits
32 bits
entero de 1 bit
1 bit
entero de 16 bits
16 bits
Rango
0 a 255 (sin signo)
0 a 255 (sin signo)
6 bits de precisin
No para PCM
ninguno
0a1
0 a 255 (sin signo)
0 a 65535 (sin signo)
0 a (232-1)
0a1
0 a 65535 (sin signo)
Los tipos de variable short y long pueden tener detrs la palabra int sin efecto alguno.
5
Significado
carcter con signo
entero con signo
coma flotante
Tamao
8 bits
16 bits
16 bits
Rango
-128 a 127
-16384 a 16383
-32768 a 32767
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.
Parmetros formales
Argumentos de llamada
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
De asignacin
Aritmticos
10
Lgicos
De bits
11
Desplazamiento bit
Direccin/indireccin
13
14
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;
else
sentencia 2;
15
Sentencia if-if/else
If (P1 !=0) c=20;
else c=0;
If (a>b) {
If (a>d) c = 15;
else c=0; }
If (a>b) {
If (a>d) c = 15;
}
else c=0;
16
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)
{
case constante 1:
grupo 1 de sentencias;
break;
case constante 2:
grupo 2 de sentencias;
break;
...
default:
grupo n de sentencias;
}
17
Sentencia switch
Switch (k) {
case 0:
x=1;
break;
case 2:
c=6;
b=15;
break;
case 3: x=12;
break;
default: break;
}
18
{
sentencia(s);
}
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
do {
a=1;
b=45;
x=p1;
}
while (x>0 && y++>5);
22
/* Esto tambin es
un comentario */
/* Pero esto que /* parece un comentario vlido*/ no lo es */
23
Las principales diferencias entre compiladores residen en las directivas (preprocessor commands) y en las funciones integradas (built-in functions).
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
#BYTE id=x
#DEVICE chip
#FUSES options
#INCLUDE <fichero>
#INCLUDE fichero
#INLINE
#SEPARATE
#INT_xxxx
#INT_GLOBAL
#PRIORITY ints
27
28
29
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
PCB (12bit)
PCM (14bit)
PCH (PIC18)
COMPILAR (F9)
MONTARLO
31
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;
TRISC = 0x0F;
// 8 terminales de salida
// 4 pin de mayor peso OUT,4 pin de menor peso IN
33
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
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
SW1
D1
SW-SPST-MOM
LED-BLUE
R1
180
COMPILAR (F9)
MONTARLO
36
input_X();
set_tris_X(valor);
port_b_pullups (valor);
37
output_low (pin*);
output_high (pin*);
output_bit (pin* , valor);
output_toggle(pin*);
output_float (pin*);
input_state(pin*);
input(pin*);
//Pin a 0.
//Pin a 1.
//Pin al valor especificado.
//Complementa el valor del pin.
//Pin de entrada, quedando a tensin flotante
//lee el valor del pin sin cambiar su sentido
// lee el valor del pin.
38
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
41