Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROCONTROLADORES
Ing. Adriana Ramírez Mora
UMB
Aunque el microcontrolador tiene la posibilidad de
realizar muchas funciones, solo realizará lo que
nosotros le digamos que haga.
Para esto se debe cargar en su memoria de
programa las instrucciones que debe seguir. Estas
instrucciones son unos y ceros que el micro
interpretará y realizará de manera secuencial.
Al conjunto de instrucciones que se cargan en el
microcontrolador se le llama programa.
PASOS PARA DAR SOLUCIÓN A UN
PROBLEMA
1. Analizar la situación problema, determinar las entradas y
salidas, describir de manera general el proceso
2. Elaborar diagrama de flujo
3. Escribir el programa en el lenguaje escogido
4. Compilar
5. Corregir errores
6. Si es posible simular
7. Cargar el código en el microcontrolador
8. Prueba en Protoboard
DIAGRAMA DE FLUJO
El diagrama de flujo es una representación gráfica que
muestra detalladamente el algoritmo de un programa,
consiste en una serie de símbolos gráficos que representan
por si solos acciones o decisiones unidos por flechas que
determinan el flujo del programa, los símbolos de acciones o
decisiones contienen en su interior un paso de la secuencia
generada por el pseudocódigo.
El análisis del problema puede conducir inmediatamente al
desarrollo de un diagrama de flujo que integra en un solo
paso el pseudocódigo y el diagrama mismo, aunque los
diagramas de flujo contienen símbolos diversos para
representar las acciones, se utilizaran básicamente cuatro
de ellos
SIMBOLOS
Recomendaciones al realizar diagrama
de flujo
Desarrollar primero el algoritmo ojala en pseudocódigo, definiendo las
entradas (variables y constantes), el proceso (acciones, decisiones o
bifurcaciones) y el resultado (almacenado en memoria, acción sobre
periféricos (visualizar, actuar, activar).
Utilizar adecuadamente la simbología grafica acorde con la acción
determinada en la secuencia del pseudocódigo.
Representar el diagrama de arriba hacia abajo y/o de izquierda a
derecha.
Los símbolos se conectan por flechas que indican la dirección del flujo
del programa, es recomendable utilizar solo líneas horizontales y
verticales., no diagonales.
Los símbolos pueden tener más de una línea de entrada.
Recomendaciones al realizar diagrama
de flujo
Los símbolos de decisión deben contener dos líneas de salida
(si/no; falso/verdadero; cumple/no cumple).
Los textos deben estar escritos de forma clara y legible evitando
usar muchas palabras.
Se recomienda no cruzar líneas de flujo pues se confunde con un
nodo.
No dejar líneas de flujo sin conectar.
En caso que el diagrama de flujo haga un llamado a otro
programa representarlo como una acción que se dirija a esa
subrutina seguida de otra que retorne el resultado de la misma.
Se recomienda nombrar cada programa y subprograma
(subrutina) de manera que al convertirlo en lenguaje
ensamblador, es acorde con el diagrama de flujo.
EJEMPLOS
DIAGRAMAS DE FLUJO
LENGUAJES DE PROGRAMACIÓN
PARA MICROCONTROLADORES PIC
LENGUAJES DE PROGRAMACIÓN
• Lenguaje de máquina
• Lenguaje ensamblador
• C para pic (XC8, PICC, MicroC)
• Basic para pic
• Niple
Es el lenguaje de bajo nivel natural de la línea PIC tanto para gama baja, media o
alta.
Con el se tiene un aprovechamiento eficiente de los recursos del PIC.
Se pueden crear macros con este lenguaje, para después simplificar el código en
diferentes desarrollos.
Con el se pueden controlar los tiempos y los registros bit a bit.
Excelente para manejar interrupciones simultáneas.
Cuando se genera el archivo .hex éste es completamente optimizado.
Desventajas:
Se requiere experiencia en programación, puede ser más complicado que los otros
lenguajes de programación
C PARA PIC
Ventajas:
Desventajas:
Ventajas:
Desventajas:
www.letbasic.com
www.melabs.com
www.basicmicro.com
Limitaciones:
• Directivas de Pre-procesamiento
• Declaración de constantes
• Declaración de variables globales
• Funciones definidas por el usuario
• Función MAIN
• Comentarios para entender el
funcionamiento del programa
Entre otros.
Ing. Adriana Ramírez
COMENTARIOS
Para entender siempre el programa hecho, sea por otra persona o
por nosotros mismos cuando lo retomemos después de algún tiempo,
es importante realizar comentarios de todo lo realizado.
En XC8 al final de cada instrucción se debe poner punto y coma (;)
para indicar que ahí termina la instrucción.
Para realizar comentarios se utiliza // cuando se desea que el
comentario quede en la misma línea.
Si el comentario utiliza más de una línea se utiliza /* y cuando se
termine el comentario se usa */ para indicar que terminó el
comentario
Tipo Variable
Ejemplo:
Int cont
Ej. Char conta1 // define conta1 como variable entero 8 bits sin
signo
• Decimal: 123
• Octal se antepone un cero: 0452
• Hexadecimal se antepone 0X: 0x3F
• Binario se antepone 0b: 0b10001110
• Carácter se escribe entre comilla sencilla: ‘a’
Para definir con valores iniciales se ingresan los valores entre corchetes
separados por coma
Existen otras funciones que trae el compilador para hacer más fácil
la programación y otras que pueden ser creadas por el
programador (como subrutinas), que tendrán el nombre que le
asigne el programador según la función que cumpla.
Toda función devuelve un valor, aunque este sea nulo, Para indicar el inicio
de la función principal se debe escribir:
void main()
{
aquí van las líneas del programa principal
}
Funciones definidas por el programador
Se pueden definir funciones que realicen alguna tarea en particular y que sea
invocada desde el programa principal (como llamado a una subrutina),
Para esto se debe crear la función con sus instrucciones antes del programa
principal, por ejemplo:
Void sieteseg()
{
se escriben las líneas de programa de la función
}
Cuando se desee llamar la función desde la función principal solo se debe escribir:
sieteseg();
// prototipos
Void funcion1();
//función principal
Void main(void)
{
……….
}
//funciOnes
Void funcion1()
{
…instrucciones de la función
}
OPERACIONES
Operación Simbolo
Suma +
Resta -
Multiplicación *
OPERACIONES
ARITMÉTICAS División /
Módulo (Resto de la división) %
Incremento ++
Decremento --
Operación Simbolo
Menor que <
Mayor que >
OPERACIONES Menor o igual <=
RELACIONALES que
(Se usan especialmente Mayor o igual >=
para preguntar) que
Igual ==
Distinto !=
Ing. Adriana Ramírez
Operaciones
Operación Símbolo
Asignación de suma (a+=b equivale a a=a+b) +=
Asignación de resta (a-=b equivale a a=a-b) -=
Asignación de multiplicación (a*=b equivale a *=
a=a*b)
OPERACIONES Asignación de división (a/=b equivale a a=a/b) /=
DE
Asignación de módulo (a%=b equivale a a=a%b) %=
ASIGNACIÓN
Asignación de desplazamiento a la izquierda <<=
Asignación de desplazamiento a la derecha >>=
Asignación AND (a&=b equivale a a = a&b) &=
Asignación OR (a|=b equivale a a = a|b) |=
Asignación XOR (a^=b equivale a a=a^b) ^=
E = B – 2; //E sería 1
F = A - B; // F sería 4
C = 5*A; // C sería 35
D = A*B // D sería 21
C = A/3; // C sería 3
D = 10/B; // D sería 5
E = A/B; // como E se definió como entero, sería 4
F = A%B // F sería el resto de la división: 1
G = A/B; // Como G es de tipo float sería 4,5
Para usar estas debe incluirse la librería delays.h que viene de C18 y definir la frecuencia
de reloj:
#define _XTAL_FREQ 4000000
#include <delays.h>
El parámetro i está definido como unsinged char (8 bits) por lo cual el máximo valor es 255
Estructuras de decisión
if – else
Switch, case
While
For
If(pregunta)
{
instrucciones a realizar si se
cumple la pregunta
}
Else
{
Instrucciones a realizar si no
}
Ejemplos:
• Si quiero saber si dos variables son iguales: If (a==b)
• Si quiero saber si una variables es igual a un valor específico if
(a==20)
• Si quiero saber si dos variables son diferentes se usa != así:
If (a!=b)
Switch (Cont)
{
case 0:
portc=0X0F;
break;
case 1:
portc=0X06;
break;
case 2:
portc=0x5B;
break;
case 3:
portc=0x4F;
break;
}
Porta=1;
While(condicion)
{
instrucciones a repetir
mientras se cumpla la
condición
}
While (pulso=0)
{
}
While(RC2 == 0)
{
visualizacion();
}
LATD5=1;
Cont=0;
While(cont<9)
{
__delay_ms(100);
cont++;
visualiza();
}
For( ; ; )
{
Instrucciones a repetir de manera infinita
}
Ing. Adriana Ramírez
Ejemplo
while (i < 4)
{
i++;
if (i == 2) continue;
printf(“Iteración%d\n", i);
}
En pantalla se vería:
Iteración 1
Iteración 3
Iteración 4
break;