¡Hola!
¡Que bueno volver a encontrarnos por aquí!
Espero estés bien, y te hayan sido de provecho
cada una de las presentaciones anteriores
Hoyquieroinvitarteaseguirandandounpocomasenlatemática
delosmicrocontroladoresPIC,hoyabordaremoslanavedela
programación,hablaremosunpocodellenguajeC,tambiéndel
entrocompiladorMikroC,ylascaracterísticaspropiasdela
programacióndelosPIC.
1
¿Qué te parece? ¿Te animas?...
¡Vamos a darle!
Wilfran Yaraure
Ing. En Electronica
Facilitador
PROGRAMACIÓN DE
MICROCONTROLADORES PIC
Área Cs. De la Salud
Programa de Ing. Biomédica Dpto. De
Electromedicina
Unidad Curricular: Microcontroladores y
Microprocesadores II
Wilfran Yaraure
Ing. En Electrónica
Facilitador
PROGRAMACIÓN DE MICROCONTROLADORES PIC
EnelPIClamemoriaencargadade
ejecutarelprogramaeslamemoria
flash,lacualalmacenaensupilade
direccioneselcódigoejecutabledel
programa,queestaconstituidoporun
conjuntodenumerobinarios(0y1
lenguajedemaquina)queconforman
unaseriedepalabrasosentenciasqueel
micropuedeejecutar,estarpalabras
puedentenerunaachurade12,14,o16
BITsegúnlaarquitecturaconlaque
cuenteelPIC.
Estaspalabrassonprocesadasporel
CPUdelmicrocomounainstruccióna
ejecutar,latotalidaddelasinstrucciones
queelPICpuedereconoceryejecutar
conformanelconjuntodeinstrucciones
deesePIC.
Anteriormenteeldesarrollodeestoscódigos
ejecutablesserealizabamedianteunproceso
bastantedifícil,loqueoriginoelsurgimiento
delprimerlenguajedeprogramación,un
lenguajedebajonivel,llamadolenguaje
assembler(ASM)oensamblador,conuna
sintaxisbásicadefácilcomprensiónyfácil
escritura,basadoenabreviaturascon
significados,estelenguajeeratraducidoo
compiladoalenguajedemaquina(código
binario)medianteelcompiladorensamblador.
A pesar de esto, assembler presenta dos
grandes desventajas como:
1.El código de programación suele ser muy
extenso y ocupar mucha memoria del PIC.
2.En este lenguaje cada microcontrolador se
programa con un conjunto de
instrucciones especifico para el.
3
Solemos pensar
que la
programación es
un proceso
complicado, pero
esto no es cierto,
ya existen una
serie de lenguajes
y compiladores,
que nos permiten
reducir el numero
de instrucciones,
tiempo, y
complejidad que
generaría la
programación en
tiempos
anteriores, así que
no te asustes, y
dispón tu mente a
ser instruida en
este proceso.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Lenguaje C
Lenguaje de Alto nivel
C
4
PROGRAMACIÓN DE MICROCONTROLADORES PIC
5
Lenguaje C
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Este lenguaje permite
realizar operaciones tanto
en Byte como en Bit, es
decir operaciones lógicas,
desplazamientos entre
otros, además esta
estandarizado en ANSI, en
lenguaje portable, lo que
permite reutilizar el mismo
código en varios proyectos,
El lenguaje C nace
en la década de los
70´s (1972) con el
objetivo de reescribir
los sistemas
operativos UNIX y
optimizar el ASM, en
los laboratorios Bell .
Este fue la evolución
de lenguajes previos
llamados B, y BCPL.
Entre sus características
destacadas esta que
varias instrucciones en
ASM pueden ser
sustituidas por una sola
sentencia en C,
optimizando el uso de
memoria, la escritura y
la comprensión del
código.
PROGRAMACIÓN DE MICROCONTROLADORES PIC
MikroCPROesunpaquetedesoftware
conunaampliavariedaddeayudasy
herramientasquefacilitalacreación
códigosdeprogramaciónenlenguajeC,
paradiferentesfamiliasdePIC.
Presentaalgunasdiferenciasconel
estándarANSI,quelepermitenhacermas
fácillaprogramacióndelosPIC,yotras
debidoalalimitacióndelaarquitectura
delhardwaredelosPIC.
LaletraCHacereferenciaalas
semejanzasentreellenguajesCymikroC
8
Mikro C
Este entorno cuenta con una versión demo o
estudiantil, con características similares a su
versión completa, la única limitación es la
dimensión del código de máquina que no
puede exceder 2K bytes,
se puede descargar de la pagina:
www.mikroe.com.
¿Por qué Mikro C?
Wilfran Yaraure
Ing. En Electrónica
Facilitador
PROGRAMACIÓN DE MICROCONTROLADORES PIC
1)ElarchivofuentecontieneelcódigoenmikroC(Programacióndelmicrocontrolador).
2)Elpreprocesadorseutilizaautomáticamenteporelcompiladoraliniciarseelprocesodela
compilación.
3)Elcompiladorbuscalasdirectivasdelpreprocesador(iniciancon’#’)enelcódigoyloconfigura
segúnestasdirectivas.
4)Elanalizadorsintáctico(parser)eliminatodalainformacióninútildelcódigo(comentarios,
espaciosenblanco).
5)Elcompiladortraduceelcódigoaunarchivobinariodenominadoarchivo.mcl.
6)Elenlazador(linker)recuperatodalainformaciónrequeridaparaejecutarelprogramadelos
archivosexternosylosagrupaenunsoloarchivo(.dbg).
7)Porúltimo,elgenerador.hexproduceunarchivo.hex.Eselarchivoquesevaacargarenel
microcontrolador.
9
Compilación en Mikro C
Pasos de la compilación
Todo este
proceso se
denomina
“building”
Wilfran Yaraure
Ing. En Electrónica
Facilitador
“
¿Cómo vas hasta ahora?...
¿Que te ha parecido la información?
10
Todo esto es un proceso interesante, y bastante fácil de realizar, solo hay que
prestar atención y dedicarle algo de tiempo.
Ahora vamos a la parte mas densa, que es la programación, mantén la calma y el
ánimo, eres capaz e inteligente.
¡Vamos a darle!.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
ESTRUCTURA DE UN PROGRAMA.
11
PROGRAMACIÓN DE MICROCONTROLADORES PIC
1. Cabecera.
2. Declarar las variables globales.
3. Declarar las funciones secundarias
4. Declarar la función principal void main ();
5. Inicialización de los puertos y módulos del
microcontrolador;
6. Crear Ciclo infinito de repeticiones do { … }
While (1);
Lógica del programa
Wilfran Yaraure
Ing. En Electrónica
Facilitador
ESTRUCTURA DE UN PROGRAMA.
Para el desarrollo de un programa en
Mikro C, se debe seguir la siguiente
estructura:
12
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Debes recordar que el micro
lee las líneas de
programación por orden
descendente
Es decir, de arriba hacia
abajo
Por lo que es necesario
cumplir con el orden de
estos pasos
Wilfran Yaraure
Ing. En Electrónica
Facilitador
1
Cabecera; Ayuda a describir los datos e información del
programa empleando un comentario /* Comentario */
Declarar las variables globales (Int j; Char entre otros);
presentar las variables que se utilizaran en todo el código, (son
establecidas por el desarrollador).
2
Declarar las funciones secundarias;
Describir las subrutinas o funciones diseñadas por el
desarrollador para el funcionamiento del programa.
3
Declarar la función principal void main ();
Es la función principal sobre ella se ejecuta la lógica de control
principal que se quiere.
4
Inicialización de los puertos y módulos del microcontrolador;
configurar quien E/S, Conversión A/D, Oscilador, entre otros,
esto se realiza dentro de la función void main.
5
Crear Ciclo infinito de repeticiones do { … } While (0);
Para que mientras este encendido el micro se ejecute el
programa, de lo contrario solo lo ejecutara una sola vez.
6
Lógica del programa
Donde se describen las líneas de programación que ejecutaran
el control principal y visible del programa.
7
Son partes del programa que se
emplean para aclarar operaciones de
programa o para proporcionar mayor
información sobre el mismo, como los
hacemos en la cabecera.
Son de uso exclusivo del programador
y el compilador se encarga de
eliminarlos del código fuente antes del
análisis sintáctico.
En mikroC pueden ser unilineales o
multilíneas.
Los multilíneas están entre /* y */
Los cometarios unilineal inician con ‘//’
¿QUE SON LOS COMENTARIOS?
13
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Una declaración consiste en informar
al compilador los nombres o
etiquetas que se emplearan en un
programa, qué representan, de qué
tipo serán, cuáles operaciones se
permiten, entre otra cosas.
¿QUE SON LAS DECLARACIONES?
¿Qué aspectos deben ser declarados en
un programa?
❑Variables.
❑Constantes.
❑Funciones.
❑Tipos.
❑Estructuras.
❑Uniones.
❑Etiquetas de enumeraciones.
❑Miembros de estructuras.
❑Miembros de uniones.
❑Otros tipos de matrices.
❑Etiquetas de sentencias.
❑Macros de preprocesador..
14
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Declaraciones y declaradores
Unadeclaracióncontieneespecificadores
seguidosporunoomasidentificadores
(declaradores).Iniciaconlosespecificadores
opcionalesdeclasedealmacenamiento,
especificadoresdetipouotrosmodificadores.
Los identificadores se separan por
comas. La declaración termina en un punto y
coma.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
son los nombres arbitrarios utilizados
para identificar : etiquetas, tipos,
símbolos, constantes, variables,
procedimientos y funciones.
Identificadores
Características para su uso:
❑Se puede utilizar cualquier letras del abecedario
mayúsculas y minúsculas desde a hasta z, y A hasta
Z, el guion bajo "_", y los dígitos 0 a 9.
❑MikroC no hace diferencia entre mayúsculas y
minúsculas, entonces Sum, sum y suM serán
equivalentes.
❑Si se emplea el mismos nombre para varios
identificadores en el mismo programa, ocurre un error
❑Al escribir el primer carácter debe ser una letra o el
guion bajo.
15
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Ejemplos de identificadores válidos:
✓temperature_V1
✓Pressure
✓no_hit
✓dat2string
✓SUM3
✓_vtext.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Son palabras o nombres que ya tienen
significado fijo, por lo que no se pueden
usar como identificadores.
Mickro C, presenta un total de 98 palabras
reservadas
Palabras clave o reservadas
Listado de palabras reservadas:
16
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
MikroC Maneja un lenguaje de tipo, cada
variable o constante pertenecen a un tipo
definido.
Este entorno soporta tipos de datos
estándar (predefinidos) como los tipos
enteros con signo o sin signo de varios
tamaños, matrices, punteros, estructuras y
uniones.
También permite definir nuevos tipos de
datos utilizando el especificador typedef.
Tipos
17
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Por ejemplo:
✓typedef char MyType1[10];
✓typedef int MyType2;
✓typedef unsigned int * MyType3;
✓typedef MyType1 * MyType4;
✓MyType2 mynumber;
Tipos aritméticos
Este tipo se refiere a variables con palabras claves:
void, char, int, float y double, precedidas por los
siguientes prefijos: short (corto), long (largo), signed
(con signo) y unsigned (sin signo). Hay dos tipos
aritméticos, el tipo entero y el de punto flotante.
Tipos enteros
Son Los tipos char e int, junto con sus variantes. Se
escriben utilizando los prefijos de los modificadores
short, long, signed y unsigned.
Tipos de punto flotante (fraccionarios)
Son Los tipos de punto flotante float y double junto
con el tipo long double
Tipo Void
Es un tipo especial que indica la ausencia de valor. No
hay objetos de void; este se utiliza para derivar tipos
más complejos.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Como venimos hablando las variables en
mikro C, pueden ser:
✓bit
✓char
✓short
✓int
✓long
✓float
✓double
Tipos de Variables O Datos
18
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Las variables bit almacenan valores lógico,
verdadero o falso, 0 o 1.
Lasvariables char almacenan caracteres
codificados con el código ASCII, se utiliza para
guardar letras o textos.
Lasvariables short almacenan números entero de
8 bits cortos con valores entre : -127 a 127.
Lasvariables tipo int almacenan números enteros
de 16 bits, con valores entre: -32767 a 32767.
Las variables tipo longalmacenan números enteros
largos de 32 bits, con valores entre: -2147483647 a
2147483647.
Las variables tipo float y double permiten guardar
números con punto decimal.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
En estas tablas puedes observar las características de cada variable mencionadas anteriormente:
Tipos de Variables O Datos
19
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
¿Que debemos hacer para declara variables?
Para ello debes hace lo siguiente:
1.Indicar el tipo de variable
2.Nombrar la variable, asignando un
nombre según tu preferencia.
3.Asignar un valor inicial a la variable,
esto es opcional.
4.Culminar con el carácter punto y
coma (;).
20
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Ejemplos de identificadores válidos:
✓bit VARIABLE1_BIT;//Declaración de una variable tipo
bit.
✓charCARACTER; //Declaración de una variable tipo
char.
✓intENTERO; //Declaración de una variable tipo entera
inicializada
✓floatDECIMAL; //Declaración de una variable con punto
decimal
✓doubleDECIMAL2; //Declaración de una variable con
punto decimal
✓longENTERO2//Demacración de una variable de tipo
entero largo
Debes tener en cuenta que:
✓Las variables nodeben tener nombres repetidos.
✓Las variables nodeben empezar por un número.
✓Una variable nopuede utilizar caracteres especiales como: / * „ ; { }-\! · % &.Wilfran Yaraure
Ing. En Electrónica
Facilitador
¿Que son las Funciones?
Son subprogramas o fragmento de
código que ciertas tareas especificas,
cuando es invocada o nombrada en el
flujo del programa principal o Función
principal, esta trabajan o se desarrolla
mediante uno o varios parámetros de
entrada, y generan un parámetro de
salida que se emplea en la
programación.
Existen 2 tipos de funciones, la función
principal de programa Voidmain () {…},
que solo puede existir una en todo el
código, y las funciones secundarias, que
pueden ser varias en el mismo código,
Las funciones son creadas por el
desarrollador, aunque también
existen algunas predefinidas en el
compilador.
la función maino principal como su
nombre lo indica es la principal, es
decir la de mayor importancia.
Debido a que es la encargada de
ejecutar el programa del
microcontrolador automáticamente
cuando este se energiza.
21
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
¿Qué debo hacer para declara las Funciones?
Generalmente deben ser declaradas las
funciones secundarias, que
acompañaran a la función principal del
programa, que son funciones diseñadas
por el desarrollador (es decir, por ti).
estas funciones hechas por el
desarrollador deben ser declaradas
antes de la función main.
Recuerda que el micro lee las líneas de
programación de forma descendiente,
por eso si llega a la función main, y se
invoca alguna función secundaria que no
se haya declarado antes, se presentara
un error en el programa y la
compilación.
Para dar nombre a las funciones se
deben cumplen con las mismas
reglas para nombrar las variables.
22
PROGRAMACIÓN DE MICROCONTROLADORES PIC
tipo_de_resultado nombre_de_funcion name(lista-de-declaradores-deparámetros));
1.nombre_de_función hace referencia a el
nombre de función y debe ser un
identificador válido según las reglas antes
mencionadas.
2.tipo_de_resultado Hace referencia a el tipo
del datos que se procesaran en la función,
estos puede ser cualquier tipo estándar o
definido por el usuario, según los
mencionados anteriormente,
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Ejemplos de declaración de funciones
✓void Función ( void ) {…} //Función con parámetros de entrada y salida vacíos.
✓void Función ( int A ) {…} //Función con un parámetro de entrada y salida vacía
✓intFunción ( void ) {…} //Función con parámetro de entrada vacío y salida entera.
✓intFuncion ( int A ) {…} //Función con un parámetro de entrada y salida enteras.
✓floatProducto ( float A, flota B ) //Función para calcular el producto de A y B.
{ // Apertura de la función con corchete.
float RESULTADO;
RESULTADO = A*B; //Producto de A y B.
return RESULTADO; //La función retorna el resultado guardado en RESULTADO.
} //Cierre de la función con corchete.
23
PROGRAMACIÓN DE MICROCONTROLADORES PIC
voidmain( void ) //Declaración de la función main.
{// Apertura de la función main.
…//Código del programa principal del microcontrolador.
}//Cierre de la función main
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Puntuadores o Separadores
Estos son elementos operadores que
permiten separa las líneas de
programación para organizar la lógica
del código fuente diseñado.
24
PROGRAMACIÓN DE MICROCONTROLADORES PIC
En mikro C se emplean los siguientes
separadores:
o[ ] Corchetes
o( ) Paréntesis
o{ } Llaves
o, Coma
o; Punto Y Coma
o: Dos Puntos
o.Punto
o*Asterisco
o= Signo Igual
o# Almohadilla
[ ]Corchetes:indican índices de matrices uni y multi
dimensionales. Ejemplo:
charch, str[]= "mikro";
intmat[3][4]; /* matriz de 3 x 4 */
ch= str[3]; /* cuarto elemento */
( )Paréntesis: sirven para agrupar expresiones, aislar
expresiones condicionales e indicar llamadas a funciones.
Ejemplo:
d = c * (a + b); /* modifica la precedencia normal */
if(d == z)++x; /* expresión condicional */
func(); /* llamada a función, sin parámetros */
voidfunc2(int n); /* declaración de función, con
parámetros */
{ } Llaves: indican el inicio y el final de una sentencia
compuesta, no requiere el punto y coma después de
corchete de cierre. Ejemplo:
if (d == z)
{
++x;
func();
}
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Puntuadores o Separadores
25
PROGRAMACIÓN DE MICROCONTROLADORES PIC
,Coma: se utiliza para separar los
parámetros en las llamadas a función, los
identificadores en las declaraciones y los
elementos del inicializador. Ejemplo:
Lcd_Out(1,1,txt);
char i,j,k;
const char MONTHS[12] =(31,28,31,30,31);
; Punto y coma: Finalizador de sentencia. Cada
expresión válida en C (incluyendo la vacía)
seguida por un punto y coma se interpreta como
una sentencia. Ejemplo:
a + b;/* evalúa a + b, descarta el resultado */
++a;/* efecto lateral en 'a', se descarta el valor ++a */
;/* expresión vacía, o una sentencia nula */
: Dos puntos: indican una etiqueta. Ejemplo:
start:x = 0;
=Signoigual:seutilizaparaseparar
declaracionesdevariablesdelaslistasde
inicializaciónasícomolosladosizquierdoy
derechoenlasexpresionesdeasignación.
Ejemplo:
inttest[5]={1,2,3,4,5};
intx=5;
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Break
Wow!... Estamos avanzado, ¿Como vas?...
Es un tema interesante y bastante fácil ¿verdad?.
En principio parece tedioso y difícil, pero cuando le
prestas atención y comienzas a unir cada una de
las piezas te das cuenta que es fácil y divertido,
como si jugaras con legos
26
Es hora de continuar, ¿que te parece?
Entonces ¡Vamos a darle!.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
OPERADORES
27
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Son símbolos que indican las operaciones que se realizan
sobre una expresión. Pueden ser operaciones aritméticas,
lógicas u otras en particular. En el lengua C se disponen de
mas de 40 operadores, pero en la puesta en practica se
emplean realmente de 10 a 15.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Operadores Aritméticos
Existen dos
tipos:
Unitarios y
Binarios
(Necesitan 2 variables
o números para la
operación
Nos permiten
realizar
operaciones
matemáticas
Ejemplos:
A++; //Este operador incrementa en una unidad el valor de A.
A --; //Este operador decrementa en una unidad el valor de A.
C = A+B; //Está expresión guarda la suma de A y B en la variable C.
C = (A+B)/C; //Está expresión es equivalente a C = (A+B)÷C.
28
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Operadores Relacionales
Si es cierta
arroja un 1,
Si es falsa
un 0
Comprueba
veracidad
de
expresiones
Ejemplos:
29
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Operadores asignación simple
En este se emplea
el signo =como
un operador, y
permite asignar
valor simple a una
variable, por
ejemplo A=8;
30
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Estos operadores nos permiten
asignar valores a una
determinada variable. Existen 2
tipos:
Operadores
de
asignación
compuesta
Operadores
de
asignación
simple
En este caso, se
emplean dos
operadores, para
simplificar la
sintaxis, y
asignara valores
mas complejos
Como observas en los ejemplos, el valor de a, será
a+8, o a-8, según sea el caso.
Operadores lógicos
31
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Estos operadores nos
permiten realizar
operaciones de lógica
digital, como las realizadas
con las compuertas
lógicas conocidas, arrojan
valores de 0 y 1, según la
tabla de las relaciones
lógicas. :
¿Qué formatos Numéricos puedo usar al programar?
32
CARACTERES ASCII
HEXADECIMALES.
OCTALES
DECIMAL
BINARIOS
Usando el Prefijo 0xo 0X, ejemplo: 0x8F
Números entero base 10, sin prefijos
Enteros que empiezan con 0, ejemplo, 0357.
Usando el prefijo 0bo 0B, ejemplo, 0b10100101.
Usando Caracteres alfanuméricos entre comillas
para mostrar en pantalla, ejemplo: "Hola mundo"
EnellenguajeCseempleandiferentesbasesnuméricas,laprincipalparaelprocesamientoeslabase
numéricabinaria(2),peropuedenserempleados3tiposdebasesnuméricas,comoloson:Losdecimales
queempleanbase10,alosqueestamosacostumbradosnormalmenteenlasmatemáticas,la
Hexadecimalesqueempleanbase16,ylosbinariosqueempleanbase2,comolohemosvistoenlateoría
decircuitosdigítales,ademássepuedenempleartambiénelCódigoASCIIparaformatosalfanuméricos
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Parapoderusarlosedebentenerencuentalosprefijos
correspondientes
¿Que tal vas?
Espero que vayas bien, y
que este viaje sea de
provecho… no te
preocupes, ni te
apresures, tomate tu
tiempo y rumea un poco
la información, ve
asimilando poco a poco,
tu puedes …
33
¿Que te parece si continuamos?...
¡ok, Vamos a darle!
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Sentencia Explicación Sintaxis
Sentencias
de
interacción
(Bucles)
Sonvitaldelcódigo,permitenrepetirunconjuntodesentenciasen
funcióndeconteosycondicionesdevariablescreandobucles
interactivos,quecuentanogobiernantareasyprocesos
desarrolladosenelprograma
❑While () {…}
❑Do {…} while ()
❑For (...) {…}
Sentencias
Condicional
Permiten realizar menús, tomar decisiones entre distintos cursos de
acción en función de valores o condiciones.
❑If (…) {…}
❑if else(…) {…}
❑switch case (…) {…}
Sentencias
de salto
Permiten detener, iniciar o salir de interacciones en medio de bucles
o sentencias de interacción.
❑break;
❑continue;
❑return […];
34
Son líneas de programación que permiten controlar el flujo de la lógica del código diseñado, pueden ser de 6
tipo, como los mostrados en el grafico. Es decir, le indican al microque hacer y que no hacer. Y pueden ser de
estos 3 tipos
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
puedes crear un bucle o ciclo de
repeticiones, según el numero de
repeticiones que necesites.
¿Que puedo hacer con ella?
while(condición o numero de repeticiones ){Porción del código que se repite }
¿Cuál sintaxis debo usar?
La porción del código entre las {…} Se repite tantas
veces como lo indique la condición entre los (…)
¿Que ocurre cuando se esta ejecutando?
while (1)...;
Usando un valor constante dentro de los paréntesis, como se
muestra, no afectado por ninguna condición, el código se repetirá
mientras 1 sea 1, y como no existe un valor que lo afecte 1 siempre
será 1, generando un ciclo infinito de repeticiones.
Esta es la forma más simple de crear un bucle
Infinito, ¿como lo hacemos?.
Sentencia While
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
35
{Sentencias de iteración (Bucles)}
Sentencia Do while
36
1 ¿Que puedo hacer con ella?
Puedes realizar un ciclo de repeticiones
similar al realizado con While, pero en este
caso primero se ejecuta el fragmento de
código a repetir, y luego se evalúa la
condición del While, por lo que el código se
ejecutará por lo menos una vez
2¿Cual sintaxis que debo usar?
do{ Porción
del código
que se repite;
}
while(condición);
3
¿Qué ocurre cuando se esta
ejecutando?
La porción del código entre las {…}
entre do y while Se repite tantas
veces como lo indique la condición
entre los (…) del while
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
{Sentencias de iteración (Bucles)}
for(I=0; I=10; I++ o I--)
{Porción
del código
Que se repite;
}
1.Se le da un valor de inicio a
la variable en este caso I=0,
que indica que inicia en 0
2.Se asigna valor final a la
variable, es decir, cuantas
veces se repetirá, en este
caso I=10.
3.Se expresa la condición del
conteo, si será incremento
I++, o decremento I--.
4.Se repite la porción de
código hasta que se alcance
el valor final de la variable
¿Qué ocurre cuando se esta
ejecutando?
¿Qué sintaxis debo usar?
¿Que puedo hacer con ella?
Con ella puedes crear
ciclos o bucles de
repeticiones con
mayor control de
condiciones, creando
condiciones de inicio,
de final, y cambios
progresivos en la
variable controlada
Sentencia For
37
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
{Sentencias de iteración (Bucles)}
Sentencia If
¿Cual sintaxis debo usar?
¿Que ocurre durante la ejecución?
¿Que puedo hacer con ella?
38
{Sentencias Condicionales } PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Usando la sentencia ifpuedes evaluar el estado lógico (1 o 0)
de alguna variable, puerto o pin, es decir si esta activo o no, y
luego de eso decidir si se ejecuta una porción de código o no,
por ejemplo, si un botón esta presionado o no, si una variable
alcanzó un determinado valor, depende de la condición que
necesites evaluar
if(Valor>100)//evalúa si la variable Valor es mayor que 100.
{
… // Porción de código que se ejecuta si el if es verdadero.
}
Al usar esta sentencia, se evalúa la condición dentro de los (…)si
esta condición se cumple, se ejecuta la porción del condigo dentro
de las {…},si no se cumple, el programa sigue ejecutando las
demás líneas de código que prosiguen
Sentencia if (…) else (…) {…}
¿Cual sintaxis debo usar?
¿Que ocurre durante la ejecución?
¿Que puedo hacer con ella?
39
{Sentencias Condicionales } PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Es similar a if, pero con 2 porciones de código ejecutar, una
para cuando se tenga un estado lógico bajo (0) o falso y otro
para cuando se tenga un estado lógico alto (1) o verdadero,
por ejemplo: si el puerto A es igual a 1, ejecuta este código, si
no ejecuta este otro código.
if(Valor>100)//Este if evalúa si la variable Valor es mayor que
100.
{//Porción de código que se ejecuta si la condición del if se cumple.}
else
{// Porción de código que se ejecuta si la condición del if no se cumple.}
Al usar esta sentencia, primero se evalúa la condición dentro de
los (…)si esta condición se cumple, se ejecuta la porción del
condigo dentro de las primeras {…},si no se cumple, se ejecuta el
código dentro de las {…}que siguen después del else
¿Que puedo hacer con
ella?
Puedesdesarrollarmenús
convariasopciones,de
maneraquesegúnla
opciónseleccionadase
ejecutenunaseriede
sentencias.Consisteenuna
sentenciade control
(selector)yunalistadelos
valoresposiblesdela
expresión,ademásnose
evalúaunacondiciónsino
elvalordeunavariable
¿Que sintaxis debo usar?
Switch(Valor)
{
case Valor 0: //Fragmento de código
correspondiente al valor 0 de la variable
Valor.
break; //Ruptura del caso 0.
case Valor 1: //Fragmento de código
correspondiente al valor 1 de la variable
Valor.
break; //Ruptura del caso 1.
case Valor 10: //Fragmento de código
correspondiente al valor 10 de la variable
Valor.
break; //Ruptura del caso 10.
}
¿Qué ocurre durante su
ejecución?
Primero Evalúa la variable (valor)y
la compara con todas las opciones
disponibles de case valor.
Si hay una coincidencia, se ejecuta
el fragmento de código
correspondiente a ese case valor.
Cada uno de los fragmentos
de código finaliza con la
directriz breakpara romper el
flujo y volver al código general
40
{Sentencias Condicionales } PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Sentencia Switch (…) {…}
SentenciaBreak
Puedeserusadadentro
decualquierbucle,pero
es especialmente
empleada en la
sentenciaSwicht.
Lapuedesemplearpara
interrumpirelflujode
cualquierbucle,esdecir
detenerelprogramaen
esepuntoysalirdel
bucleenelquese
encontraba.
Sintaxis
SolodebescolocarBreak;
dondequieresquese
detengaelbucle
SentenciaContine
Lapuedesemplear
pararealizarsaltode
unainteracciónsin
detenerelbucle,yte
permitira obviar
algunaslíneasde
código,según la
condición que
establezcas.
Sintaxis
Solodebescolocar
contnie;dondequieres
queserealiceelsalto
Sentencia Goto
La puedes usar para saltar
de forma incondicional
cualquier parte del código
que requieras en tu lógica.
Sintaxis
Solodebescolocar
Goto
identificador_de_etiq
ueta;especificandola
etiquetadelpuntoa
dondequieresdarel
salto
41
{Sentencias de Salto} PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Inicialización de Variables, librerías para
pantallas y teclados, entre otros
Lcd_Init(); Glcd_Init(); I2C1_Init(100000);.
En este caso la inicialización hace
referencia a los valores iniciales de las
VARIABLES, PUERTOS, Y REGISTROS a
utilizar en el código.
Es decir, que debes establecer las
condiciones iniciales con las que se va a
trabajar, por ejemplo cuales puertos
serán de entra o salida, cuales serán de
entrada Digital y cuales analógica, que
frecuencia de trabajo se utilizara para el
Oscilados, entre otras cosas.
Para ellos se debe asignar valores a los
registros de función especial SFR
correspondientes, o declarar la librería a
utilizar, según sea el caso.
Esto lo debes hacer al inicio de la
función principal
Void main ()
Registros para inicialización de puertos
PORTA; PORTB; PORTC; PORTD; PORTE.
Registro para inicialización del Oscilador
OSCCON;
Registro para Inicialización A/D
ADCON1;
05
02
03
04
Inicialización
Registros para Configuración inicial de puertos
TRISA; TRISB; TRISC; TRISD; TRISE;
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
01
42
Ejemplo de inicialización
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
43
// inicialización de los puertos Digitales
// inicialización de la comunicación serial
// inicialización del PIN 0 del PUERTO C como entrada
// inicialización del Teclado Matricial
// inicialización de la Pantalla GLCD
// Valor inicial que mostrara la Pantalla GLCD
// Valor inicial de las variables
// Retardo o tiempo de Espera
Generalmente el tiempo de ejecución de
una instrucción en el PIC, es un tiempo que
no puede ser percibido por el ojo humano.
Para poder apreciar las ejecuciones de las
sentencias se hacen necesario los retardos
o tiempos de Espera.
Estas son líneas de programación que
indican al micro un periodo de tiempo en el
que debe esperar sin ejecutar ninguna
sentencia alguna, permitiendo así que se
muestre la ultima sentencia ejecutada.
Mikro C, tiene algunas sintaxis ya definidas
que nos permiten programar retardos en
Micro segundos (us), milisegundos (ms) o
en unidad tiempo de ciclo de reloj (cyc).
Retardos o Tiempo de espera
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Delay_us(Valor) ;
Sintaxis para crea un
retardo en
microsegundo
Delay_ms(Valor) ;
Sintaxis para crea un
retardo en milisegundo
Delay_cyc(Valor) ;
Sintaxis para crea un
retardo en ciclos de
reloj
Enunciado del problema
Diseñaruncódigodeprogramaciónquepermitacontrolarel
encendidoyapagadoautomáticodeunled,conectadoalpin
0delPUERTOA,conuntiempodeesperade1segundoentre
elencendidoyapagado
Dividimos el problema en pedazos y lo atacamos por partes.
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
¿Quien será el puerto de entrada?
ninguno. No se empleara ningún botón, ya que se realizara
un encendido y apagado automático.
¿Quien será puerto de salida? El Puerto A, específicamente
el pin 0, para conectar el led.
¿Se utilizara E/S Analógicas o Digitales? Digitales, se
requieren solo 2 estados , uno alto (1) para el encendido y
bajo (0) para el apagado.
¿Se requiere alguna función secundaria? En este caso no,
debido a que es un código simple, con la función principal
es suficiente.
¿Se requiere declara alguna variable?
No en este caso, debido a que todo se hará desde el
puerto A
Código Ejemplo #1
Luegodeanalizarlosrequerimientosdenuestroprograma,procedemosaescribirnuestrocódigo,
segúnlaestructuradelprogramavistaanteriormente(pg.11y12)
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
1. Cabecera, haciendo uso de la
herramienta /*Comentario*/ describimos
nuestro código.
4. Declarar la función principal void main ();
5. Inicialización de los puertos y
módulos del microcontrolador;
6. Crear Ciclo infinito de
repeticiones do { … } While (1);
Lógica del programa
Código Ejemplo #1 Comotehabrásdadocunetasolo
usamoslospasos1,4,5,yesdela
estructuradeuncódigo,debidoalos
requerimientosqueanalizamosenla
parteanterior
Código Ejemplo #1
AsíseveríalaconexiónyelcomportamientodelEjemplo1anterior.
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Teinvitoaquelointentes,abremikroc,escribeelmismocódigo,compílalo,ysimúlaloenproteus,
paraqueconfirmeselcomportamiento.¡Tupuedeshacerlo!
Enunciado del problema
Diseñaruncódigodeprogramaciónquepermitacontrolarel
encendidoyapagadoautomáticodeunled,conectadoalpin
0delPUERTOA,conuntiempodeesperade1segundoentre
elencendidoyapagado,repitiendoelciclo10veces
Dividimos el problemas en pedazos y lo atacamos por partes.
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
¿Quien será el puerto de entrada?
ninguno. No se empleara ningún botón, ya que se realizara
un encendido y apagado automático.
¿Quien será puerto de salida? El Puerto A, específicamente
le pin 0, para conectar el led.
¿Se utilizara E/S Analógicas o Digitales? Digitales, se
requieren solo 2 estados , uno alto (1) para el encendido y
bajo (0) para el apagado.
¿Se requiere alguna función secundaria? En este caso no,
debido a que es un código simple, con la función principal
es suficiente.
¿Se requiere declara alguna variable?
No en este caso, debido a que todo se hará desde el
puerto A
Código Ejemplo #2
Igualalcódigoanterior,solo
necesitamosahoracontrolar
losciclosderepeticionesylo
haremos empleando la
sentenciadeinteracciónfor
Luegodeanalizarlosrequerimientosdenuestroprograma,procedemosaescribirnuestrocódigo,
segúnlaestructuradelprogramavistaanteriormente(pg.11y12)
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Wilfran Yaraure
Ing. En Electrónica
Facilitador
1. Cabecera, haciendo uso
de la herramienta
/*Comentario*/
describimos nuestro
código.
4. Declarar la función
principal void main ();
5. Inicialización de los
puertos y módulos del
microcontrolador;
6. Creando bucle de
repeticiones infinitas do
while(), para mientras este
encendido el pic ejecute el
programa
Lógica del programa
Código Ejemplo #2
2. Declarar las
variables globales.
Dentro de la lógica,
Utilizamos la sentencia for
para la creación de un
bucle de 10 repeticiones,
según lo pide el enunciado
Aquí te dejo estos ejercicios para que practiques,
usando mikroC y Proteus
Ejercicio #1
DiseñaruncódigodeprogramaciónparaelPIC18F4550,quepermitaejercerelcontroldel
encendidoyapagadode8LEDconectadosalPUERTODdelPIC,elencendidodebeser
secuencialmenteunoauno,desdeelmenossignificativohastaelmassignificativo,yluegolos
apaguedeigualforma,conuntiempodeesperaentrecadaunodelosLEDde½segundo,
tantoenlasecuenciadeencendido,comoenlasecuenciadeapagado.
50
Ejercicio #2
DiseñaruncódigodeprogramaciónparaelPIC18F4550,quefuncionecomoundecodificador
BCDa7segmento,esdecirquepermitaingresaruncódigobinariode4dígitosusando4bit
menossignificativosdelpuertoB,ymuestrelosvaloresdesalidahexadecimalde0aFenun
Display7segmentosconectadoalpuertoD.
Ejercicio #3
DiseñaruncódigodeprogramaciónparaelPIC18F4550,quefuncionecomountemporizadoro
contadordecimal,quevayadesde0a99,cambiandoautomáticamentedevalorcada100ms,y
muestrelosvaloresdesalidaatravésdedosDisplay7segmentos,unoconectadoalpuertoBy
otroalpuertoD,.
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Recuerda que
estoy a un
mensaje de
distancia,
puedes
escribir por la
plataforma
ADI, o al
correo
Electrónico
para aclarar
tus dudas
51
Aunque actualmente todo parece una
locura, realmente “Locura es hacer lo
mismo una y otra vez esperando obtener
resultados diferentes” (anónimo) Por eso
hoy mas que nunca debemos ir más allá, de
lo que hemos ido, a encontrar otro punto de
vista, a buscar nuevas maneras de hacer las
cosas, y seguir avanzando, y no nos
quedemos esperando a que todo sea
diferente si seguimos haciendo lo mismo de
siempre. ¡Que nuestra nueva normalidad
sea lo extraordinario!
Wilfran Yaraure
Ing. En Electrónica
Facilitador
Bibliografía
✓Clavijo (2011), Diseño y simulación de sistemas microcontrolados en lenguaje C,
Programación con MikroC PRO, Simulación en Proteus ISIS.
https://drive.google.com/file/d/0B3Gup-Soes9hbFByRHF0WFpuQk0/view?usp=sharing
✓MikroElectronika (2011) GUÍA DE REFERENCIA RÁPIDA A mikroC www.mikroe.com
52