Вы находитесь на странице: 1из 44

LENGUAJE C PARA PICS

PIC 18F4550

LENGUAJE C. TIPOS DE DATOS.


El compilador CCS acepta los siguientes tipos de variables:
Especificacin

Significado

Tamao

Rango

char

carcter

8 bits

0 a 255 (sin signo)

Int

entero

8 bits

0 a 255 (sin signo)

float

Coma flotante

32 bits

6 bits de precisin

double

Float doble
precisin

No soportado

No para PCM

void

Sin valor

nulo

Ninguno

int1

Entero de 1 bit

1 bit

0a1

int8

Entero de 8 bits

8 bits

0 a 255 (sin signo)

int16

Entero de 16 bits

16 bits

0 a 65535

int32

Entero de 32 bits

32 bits

0 a (232-1)

Short

Entero de 1 bit

1 bit

0a1

long

Entero de 16 bits

16 bits

0 a 65535 (sin signo)

LENGUAJE C. TIPOS DE DATOS


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.
Especificacin

Significado

Tamao

Rango

Signed char

carcter con signo 8 bits

-128 a 128

Signed int

Entero con signo

8 bits

-128 a 128

Signed long

Coma flotante

16 bits

-32768 a 32768

Los nmeros negativos se codifican en complemento a 2.


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
3
mayor longitud presentes en la expresin .

LENGUAJE C. CONSTANTES

OPERADORES ARITMTICOS

OPERADORES RELACIONALES

!=

OPERADORES LGICOS

OPERADORES A NIVEL DE BITS

OPERADORES DE INCREMENTO
Y DECREMENTO

OPERADORES DE CORRIMIENTO

VARIABLES
Las

variables se utilizan para nombrar posiciones de


memoria RAM; se deben declarar, obligatoriamente, antes
de utilizarlas; para ello se debe indicar el nombre y el tipo
de dato que se manejar. Se definen de la siguiente forma:
TIPO NOMBRE_VARIABLE[=VALOR INICIAL]

TIPO hace referencia a cualquiera de los tipos de datos


NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es
opcional.
Ejemplos:

byte k = 5;
byte const SEMANAS = 52;
float temp_limit=500.0;
char k, kant=0;
int x,y,z;

VARIABLES
Las

variables pueden ser de tipo LOCAL o


GLOBAL.
Las variables locales slo se utilizan en la
funcin donde se encuentran declaradas;
las variables globales se pueden utilizar en
todas las funciones del programa. Ambas
deben declararse antes de ser utilizadas y
las globales deben declararse antes de
cualquier funcin y fuera de ellas. Las
variables globales son puestas a cero
cuando se inicia la funcin principal main().

EJEMPLO DE VARIABLES
LOCALES Y GLOBALES
int16 counter;
//Variable global
Void FUNCION ( )
{
int dato1, dato2=34; //Variables locales
}
void main()
{
int8 suma;
//Variable local
}
10

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:
Tipo_dato nombre_funcin (tipo param1, tipo param2, )
{
cuerpo de la funcin (sentencias);
}
El tipo de dato devuelto se indica mediante tipo_dato. Si no se
indica nada, se entiende que devuelve un entero. Si no devuelve
nada debe incluirse una especificacin tipo void.
11

La manera que tiene una funcin para devolver un valor es


mediante la sentencia return:
return (expresin); return expresin;
La expresin debe proporcionar el mismo tipo de dato que el
especificado en la funcin. Si no debe devolver nada, se finaliza
con:
return;
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
12
alcanzan la llave de cierre de funcin } tras ejecutar la ltima
sentencia de la misma.

Adems de devolver valores, una funcin tambin puede recibir


parmetros (denominados argumentos) segn se indic en su
definicin.
Por ejemplo:

Parmetros
int suma(int a, int b)
formales
{
return(a+b);
}
main()
Argumentos
{
de llamada
int c;
c= suma(10 , 23);
}
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 y no modifica su valor en la funcin
13
de partida.

DECLARACIONES DE CONTROL
If-else
Cuando la expresin evaluada es verdadera, Las instrucciones
de la sentencia 1 son ejecutadas. Si la expresin es falsa, las
instrucciones de la sentencia 2 son ejecutadas. La expresin debe
ser evaluada a un valor entero. Los parntesis que encierra la
expresin son obligatorios.
La palabra especial else sentencia 2 es opcional.

If else:
if (expresin)
sentencia1;
else
sentencia2;

If else:
if (expresin) {
sentencia1;}
else {
sentencia2;}
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)
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.
NOTA: Se pueden combinar
if (expresin)
varios if - else para establecer
sentencia 1;
mltiples caminos de decisin
else
sentencia 2;
15

A=0?

SI
B=10

NO

C=5

If (A==0)
B=10;
Else C=5;
If (A!=1)
B=10;
Else C=5;

16

NO

If (A>10)
{IF(A>20)
B=5;
Else B=15;}

A>10?

SI

A>20?

NO

B=15

SI
B=5
17

NO

if (A>10)
{IF(A>20)
B=15;}
else B=5;

A>10?

SI
B=5
A>20?

SI

B=15

NO

18

Sentencia switch

Sustituye 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 de sentencias;
break;
case constante 2:
grupo de sentencias;
break;

default:
grupo n de sentencias;
}

Nota: break es opcional.


Si no aparece se sigue con
el case siguiente.
default es opcional y el
bloque asociado se ejecuta
slo si no hay ninguna
coincidencia
con
las
constantes especificadas.
No puede haber dos
constantes iguales en dos
case
de
la
misma
sentencia switch.

19

SI

A=0?

B=1

NO
SI

A=2?

B=2

NO
SI

A=3?
NO

switch (A){
case 0:
B=1;
break;
case 2:
B=2;
break;
case 3:
B=3;
break;
default: break;
}

B=3
20

Sentencia de ciclo for.


Se emplea para repetir una sentencia o bloque de sentencias:
for (inicializacin; condicin; incremento)
{
sentencia(s);
}
En la inicializacin se le asigna un valor inicial a una
variable que se emplea para el control de la repeticin del
bucle.
La condicin se evala antes de ejecutar la sentencia. Si es
cierta, se ejecuta el bucle. Si no, se sale del mismo.
El incremento establece cmo cambia la variable de control
cada vez que se repite el bucle.
Es posible anidar bucles for para modificar dos o ms
variables de control.
21

for(N=1;N<=10;N++)
{
Printf(%u, N);
}

N=1
NO
NO

N<=10?
SI
IMPRIMIR N
N=N+1

SI

NO
22

Sentencia de ciclo 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 ciclo do-while:


do
{
sentencia(s);
}
while (expresin);

23
Las sentencias se ejecutan antes de que se evale la expresin, por
lo que el bucle se ejecuta siempre al menos una vez.

COMENTARIOS
Los comentarios se incluyen en el cdigo fuente para documentar
y orientar al programador sobre el cdigo que se disea.
Son ignorados por el compilador y no afectan a la longitud ni
rapidez de ejecucin del cdigo final.
Un comentario se puede colocar 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 llegan hasta el final de la lnea.
// Esto es un comentario.
Formato 2. Empiezan por /* y finalizan por */. No es posible anidar
comentarios con este formato. Ejemplos:
/*Esto tambin es
un comentario*/
/*Pero esto que /*parece un comentario vlido*/ no lo es*/
24

OTRAS SENTENCIAS
Return: se emplea para devolver datos en las
funciones.
Break: permite salir de un bucle, se utiliza para
While, For, Do y Switch.
Goto: provoca un salto incondicional.

25

DIRECTIVAS

Las directivas de pre-procesado comienzan con el


smbolo # y continan con un comando especfico.
La sintaxis depende del comando. Algunos
comandos
no
permiten
otros
elementos
sintcticos en la misma expresin.

26

DIRECTIVAS DE INTERS
# DEVICE chip: permite definir el PIC con el que se
realizar la compilacin. Ejemplo:
#device

PIC16F877

#FUSES options: permite definir la palabra de


configuracin para programar un PIC. Ejemplo:
#fuses XT,NOWDT,PUT,NOPROTECT, NOLVP
#INCLUDE <archivo>: permite incluir un fichero en el
programa. Ejemplo:
#INCLUDE <16f877.h>
27

DIRECTIVAS DE INTERS
#USE DELAY (CLOCK=SPEED): permite definir las
frecuencias del oscilador del PIC, el compilador lo utiliza
para realizar clculos de tiempo. Se puede utilizar M,
MHZ, K y KHZ para definir la frecuencia. Ejemplo:
#use delay(clock=4000000)
Luego de definida en las declaraciones se pueden utilizar
las funciones:
delay_ms(tiempo en milisegundos)
delay_us(tiempo en microsegundos)
delay_cycles(tiempo en base a los ciclos de mquina)
28

FUNCIONES
El

compilador CCS suministra una serie


de funciones predefinidas para acceder y
utilizar el PIC y sus perifricos. Estas
funciones facilitan la configuracin del
PIC sin entrar en el nivel de los registros
especiales.

29

MANEJO DE LOS PUERTOS


En

lenguaje C se pueden gestionar los


puertos de dos formas:
Se

declaran los registros TRISX y PORTX definiendo


su posicin en la memoria RAM como variables de C.

Utilizando

las directivas especficas del compilador


(#USE FAST_IO,#USE STANDARD_IO)
30

MANEJO DE LOS PUERTOS


A travs de la RAM:
#BYTE variable=constante. Ejemplo:
#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
#BYTE TRISC=0x87 //variable TRISC en 87h
#BYTE PORTC=0x07 //variable PORTC en 07h

31

MANEJO DE LOS PUERTOS

Una vez definidas estas variables se pueden configurar


y controlar los puertos a travs de los comandos de
asignacin.

TRISA= 0xFF;
TRISB= 0x00;
TRISC=0x0F;
Escritura en los puertos:
PORTC=0x0A;
Lectura de puertos:
dato=PORTA;
// Asigna el valor del puerto A a la
// variable dato.

32

MANEJO DE LOS PUERTOS


Existen unas funciones de C que permiten trabajar
bit a bit con los registros o variables definidas
previamente. Estas funciones son las siguientes:
bit_clear(var,bit);
bit_set(var,bit);
Bit_test(var,bit);
Swap(var);
Ejemplos:
bit_set(PORTC,4);
If (bit_test(PORTB,0)==1) bit_clear(PORTB,1);
33

MANEJO DE LOS PUERTOS

Se puede declarar un bit de un registro mediante


la directiva #BIT, lo que permite trabajar
directamente con el terminal:

#BIT nombre = posicin.bit. Ejemplo:


#BIT RB4=0x06.4 //PORTB=0x06
RB4=0;

34

MANEJO DE LOS PUERTOS


#include <16F877.h>
#fuses
XT,NOWDT,NOLVP
#use delay (clock=4000000)
#BYTE TRISB=0x86
#BYTE PORTB=0x06
#BYTE OPTION_REG=0x81
void main ( ) {
bit_clear (OPTION_REG,7);
bit_set (TRISB,0);
bit_clear (TRISB,1);
bit_clear (PORTB,1);
while (1){
if (bit_test(PORTB,0)==1)
bit_clear(PORTB,1);
else
bit_set(PORTB,1);
}
}

35

MANEJO DE PUERTOS

A travs de las directivas

El compilador ofrece funciones predefinidas para trabajar con los


puertos. Estas funciones son:
output_X(valor);
input_X( );
set_tris_X(valor);
port_b_pullups (valor); //True o FALSE
get_tris( );
Ejemplo:
output_A(0xFF);
valor=input_B( );
set_tris_C(0x0F);

36

MANEJO DE PUERTOS
Existen una serie de funciones asociadas a un pin*. El
parmetro pin se define en el fichero include con un formato
del tipo PIN_Xn, donde X es el puerto y n es el nmero de pin.
#define PIN_A0 40
#define PIN_A1 41
Las funciones son:
output_low (pin*);
output_high (pin*);
output_bit (pin*,valor);
output_toggle (pin*);
output_float (pin*); // pin de entrada a tensin flotante
input_state (pin*);
Input (pin*);
37

MANEJO DE PUERTOS
Las funciones output_x() e input_x() dependen de
la directiva tipo #USE_IO que est activa.
Directivas:
#USE FAST_IO(PUERTO)
Con la funcin output_x() se saca el valor al
puerto y con la funcin input_x() se lee el puerto.
La directiva no modifica previamente el registro
TRIS correspondiente.

38

MANEJO DE PUERTOS
#include <16F877.h>
#fuses XT,NOWDT,NOLVP
#use delay (clock=4000000)
#use fast_io(B)
void main ( ) {
port_B_pullups (TRUE);
set_tris_B(0x01);
output_low(PIN_B1);
while (1){
if (input(PIN_B0)==1)
output_low(PIN_B1);
else
output_high (PIN_B1);
}
}

39

MANEJO DE PUERTOS
#USE STANDARD_IO(PUERTO)
Con la funcin output_x() el compilador se
asegura de que el terminal, o terminales
correspondientes sean de salida mediante la
modificacin del TRIS correspondiente. Con la
funcin input_x() ocurre lo mismo pero
asegurando el terminal o terminales como
entrada. Es la directiva por defecto. Entonces, el
ejemplo anterior quedara:
40

MANEJO DE PUERTOS
#include <16F877.h>
#fuses XT,NOWDT,NOLVP
#use delay (clock=4000000)
#use standard_io(B)
void main ( ) {
port_b_pullups (TRUE);
output_low(PIN_B1);
while (1){
if (input(PIN_B0)==1)
output_low(PIN_B1);
else
output_high (PIN_B1);
}
}

41

ESTRUCTURA DE UN PROGRAMA EN C
( CICLO WHILE )
// Definicin de variables globales
// Definicin de funciones
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
while ( 1 )
{
// Programa de usuario
}

42

ESTRUCTURA DE UN PROGRAMA EN C
( CICLO FOR )
// Definicin de variables globales
// Definicin de funciones
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
for ( ; ; )
{
// Programa de usuario
}

43

ESTRUCTURA DE UN PROGRAMA EN C
( CICLO DO - WHILE )

// Definicin de variables globales


// Definicin de funciones

void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
do
{
// Programa de usuario
}

} while ( 1 ) ;

44

Вам также может понравиться