Академический Документы
Профессиональный Документы
Культура Документы
PIC 18F4550
Significado
Tamao
Rango
char
carcter
8 bits
Int
entero
8 bits
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
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
Significado
Tamao
Rango
Signed char
-128 a 128
Signed int
8 bits
-128 a 128
Signed long
Coma flotante
16 bits
-32768 a 32768
LENGUAJE C. CONSTANTES
OPERADORES ARITMTICOS
OPERADORES RELACIONALES
!=
OPERADORES LGICOS
OPERADORES DE INCREMENTO
Y DECREMENTO
OPERADORES DE CORRIMIENTO
VARIABLES
Las
byte k = 5;
byte const SEMANAS = 52;
float temp_limit=500.0;
char k, kant=0;
int x,y,z;
VARIABLES
Las
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
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
switch (expresin)
{
case constante 1:
grupo de sentencias;
break;
case constante 2:
grupo de sentencias;
break;
default:
grupo n de sentencias;
}
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
for(N=1;N<=10;N++)
{
Printf(%u, N);
}
N=1
NO
NO
N<=10?
SI
IMPRIMIR N
N=N+1
SI
NO
22
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.
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
26
DIRECTIVAS DE INTERS
# DEVICE chip: permite definir el PIC con el que se
realizar la compilacin. Ejemplo:
#device
PIC16F877
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
29
Utilizando
31
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
34
35
MANEJO DE PUERTOS
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 )
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
do
{
// Programa de usuario
}
} while ( 1 ) ;
44