Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Lenguaje
g j normalizado:
ANSI C
Ventajas:
Inconvenientes:
2
ESCRITURA DE UN PROGRAMA
3
PALABRAS CLAVE
PIC18F45K20:
MPLAB X IDE is a software program that runs on a PC to develop
applications for Microchip microcontrollers
MPLAB XC Compiler, provides a comprehensive solution for your
projects development software needs and replaces all MPLAB C and
HI-TECH compilers.
p
4
OPERADORES
Aritmticos:
+, -, *, /, %, ++, --, -
De comparacin:
>, >=, <, <=, ==, !!=
Lgicos:
&&, ||, !
Bit a bit:
&, |, ^, >>, <<, ~
5
TIPOS DE DATOS
Bsicos:
char, int, float, double, void
Modificadores:
unsigned signed
unsigned, signed, short
short, long
6
TIPOS DE DATOS
7
INSTRUCCIONES
ENSAMBLADOR
Cuando se quiere poner cdigo
ensamblador en un p
programa
g en C:
#asm
/* User assembly code */
MOVLW 10 // Move decimal 10 to count
MOVWF count, 0
/* Loop until count is 0 */
start:
DECFSZ count, 1, 0
GOTO done
BRA start
done:
#endasm
8
DIRECTIVAS
E
Especificadas
ifi d con # #pragma nombre
b
#pragma tipo de memoria
program memory: code, romdata
data
d t memory: udata,
d t idata
id t
#pragma config
LVP=OFF, WDTEN=OFF, FOSC=INTIO67,
PBADEN = ON, DEBUG = OFF
9
FUNCIONES DE BIBLIOTECA
NOMBRE FUNCIN BIBLIOTECA
NOP(); It does nothing. xc.h
CLRWDT(); Clear the devices internal watchdog timer. xc.h
pow(f p);
pow(f,p); It raises its first argument,
argument ff, to the power p
p. math.h
math h
Round(x); It rounds the argument to the nearest math.h
integer value
rand (void); It is a pseudo-random number generator. stdlib.h
#include <pic18f45k20
<pic18f45k20.h>
h>
#pragma config LVP=OFF, WDTEN=OFF, FOSC=INTIO67
void main(void)
{
int a,b,c; //Declaracin de variables locales
a=3; //Asignacin de valores
b=2;
c=a+b; //Operacin y asignacin
}
11
Ejemplo:
j p Uso de funciones p
p2.c
/*Programa que suma dos nmeros enteros
mediante una funcin*/
int suma(int x, int y) //Funcin suma
{
int z; //Declaracin de variable local
z=x+y; //Suma de las variables
return (z); //La funcin retorna con el valor de z
}
void
id main()
i () //P
//Programa principal
i i l
{
int a,b,c; //Declaracin de variables locales
a=3;
3 //A i
//Asignacin
i de
d valores
l
b=2;
c=suma(a,b); //Llamada a la funcin
a=7;
b=5;
c=suma(b,a);
}
12
Ejemplo: Variables globales p3.c
/*Ejemplo de utilizacin de
variables globales*/
globales /
int a,b,c; //Declaracin de variables globales
void suma() //Funcin suma
{
c=a+b;
}
void main() //Programa principal
{
a=3; //Asignacin de valores
b=2;
suma(); //Llamada a la funcin
a=7;
b=5;
suma();
} 13
Estructuras de control de flujo
if (condicin) no
condicin
sentencia;; sii
sentencia
if (condicin)
(co d c )
no
sentencia1; condicin
else sentencia2
sentencia2; si
sentencia2
sentencia1
14
Estructuras de control de flujo
switch(expresin)
case cte_1:
t 1
sentencia_1;
break
case cte_2: expresin
sentencia_2; ct_1
ct_n
break
ct_2
...... default
. sent_1
.
case cte_n:
cte n: sent 2
sent_2
sentencia_n;
break sent_n
default:
sentencia_d;
sent_d
15
Estructuras de control de flujo
while
hil ((condicin)
di i ) condicin
no
sentencia;; si
sentencia
Do sentencia
sentencia; si
while (condicin) condicin
no
16
Estructuras de control de flujo
for (inicio; condicin; incremento)
sentencia;
inicio
no
condicin
si
sentencia
incremento
17
Ejemplo: Suma de los n primeros enteros
p
p4.c
int sumatorio_1(int x) //Funcin sumatorio con for
{
int suma=0,n;, ;
x++;
for (n=0;n<x;n++) suma=suma+n;
return (suma);
}
int sumatorio_2(int y) //Funcin sumatorio con do..while
{
int suma=0
suma=0, n=0;
do {
n++;
suma=suma+n;;
}while(n<y);
return (suma);
}
void main() //Programa principal
{
int a=3,b=4,c,d; //Asignacin de valores
c=sumatorio 1(a);
c=sumatorio_1(a); //Llamadas a las funciones
d=sumatorio_2(b);
18
}
Ejemplo: copiar un puerto en otro
p5.c
#include <pic18f45k20.h>
5
#pragma config LVP=OFF,
LVP=OFF WDTEN=OFF,
WDTEN=OFF
FOSC=INTIO67, PBADEN = ON
/*Programa que copia constantemente el contenido del puerto B en el D
Registros de configuracin:
PBADEN en ON habilita RB0 al RB5 como entradas analgicas por defecto
WDTEN en OFF deshabilita el WDT
FOSC a inti067 programa el micro a 1 MHz
LVP es para la programacin*/
void main()
{
ANSELH=0x0; //RB0 como entrada digital
TRISB=0XFF; //Puerto B como entrada
TRISD=0; //Puerto D como salida
while(1) PORTD=PORTB;
PORTD PORTB; //Bucle infinito
19
INTERRUPCIONES
#include <pic18fxxx.h>
20
Ejemplo: Puerto incrementado cada
#i l d <pic18f45k20.h>
#include < i 18f45k20 h>
g
segundo p
p6.c
#pragma config LVP=OFF, WDTEN=OFF, FOSC=INTIO67, PBADEN = ON
static unsigned
g desbordamientos;;
while(1);
//Bucle infinito
}
22
Vectores
Lista de elementos de un mismo tipo que
se p
pueden recorrer con ndices.
i t tabla[8]:
int t bl [8] //Lista
//Li t de
d 8 enteros
t
23
Ejemplo: Media, mximo y mnimo de una tabla
p7 c
p7.c
#include <pic18f45k20.h>
#include <xc.h> //biblioteca con recursos extra, consultar en gua usuario
#pragma config LVP=OFF,
LVP OFF, WDTENWDTEN=OFF,
OFF, FOSC
FOSC=INTIO67,
INTIO67, PBADEN = ON
#include "math.h" //biblioteca matemtica
void main() //Programa principal
{
unsigned int tabla[4],i,mayor, menor; // Declaracin de variables
float media=0;
tabla[0]=15; //Asignacin de valores a la tabla
tabla[1]=12;
tabla[2]=18;
tabla[3]=16;
mayor=menor=tabla[0];
for (i=0;i<4;i++) {
media=media+tabla[i];
if (tabla[i]>mayor)
(t bl [i] ) mayor=tabla[i];
t bl [i]
if (tabla[i]<menor) menor=tabla[i];
}
media=media/4;
Nop();//slo est para poner un punto de ruptura 24
}
Punteros
25
Punteros (operadores)
26
Ejemplo: Uso de punteros p8.c
/*Calcular la media, mximo y mnimo de los valores de una tabla*/
#include <pic18f45k20.h>
#include <xc.h>
#
#pragma config
fi LVP
LVP=OFF, OFF WDTEN=OFF,
WDTEN OFF FOSC=INTIO67,
FOSC INTIO67 PBADEN = ON
#include "math.h" //biblioteca matemtica
void main() //Programa principal
{ unsigned int tabla[4]
tabla[4],i,mayor,
i mayor menor;
unsigned int *punt1=&tabla[0];
float media=0;
tabla[0]=15;tabla[1]=12; //Asignacin de valores a la tabla
tabla[2]=18;tabla[3]=16;
mayor=menor=*punt1; //Inicializacin de mayor y menor
for (i=0;i<4;i++)
(i 0;i<4;i++) {
temp=*punt1;
media=media+*punt1;
if ((*punt1>mayor)
punt1 mayor) mayor=*punt1;
mayor punt1;
if (*punt1<menor) menor=*punt1;
punt1++;
}
media=media/4;
Nop();//slo est para poner un punto de ruptura 27
}
Punteros. Paso de parmetros a funciones
28
Ejemplo: Paso de parmetros por referencia
p9 c
p9.c
/*Calcular suma y diferencia de dos nmeros
Uso de punteros para pasar parmetros por referencia*/
#include <pic18f45k20.h>
#pragma config LVP=OFF, WDTEN=OFF, FOSC=INTIO67, PBADEN = ON
#include "math.h" //Libreria matemtica
#include <xc.h>
void sum_dif(int x, int y, int *dsum, int *ddif)
{ *dsum=x+y;
dsum=x+y;
*ddif=x-y;
}
void main() //Programa principal
{ int a, b, suma, diferencia;
a=5;
b 3
b=3;
sum_dif(a, b, &suma, & diferencia);
Nop();
/*a y b se pasan por valor, suma y diferencia
se pasan por referencia*/ 29
}
Declaracin Caracteres en
ROM
rom const char table[10] = { hola mundo };
30