Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Integrantes:
Enero de 2018
Objetivo:
Se desea comprobar el funcionamiento del PIC 18f4550 para el accionamiento de 3 leds por
medio de 3 pulsadores definiendo puertos y activando variables o fuses para configurar
determinados aspectos del PIC por medio del lenguaje de programación C CCS.
Definiciones principales:
Include:
Define el archivo header del microcontrolador empleado. Para el caso del presente proyecto el
microcontrolador a emplear es el PIC 18f4550.
Fuses:
Son "variables" que alojan determinadas funciones del PIC, sirven para configurar ciertos
aspectos del microcontrolador. Cada FUSE activa o desactiva una opción de funcionamiento.
Este código lo hemos escrito en lo que se conoce en la jerga técnica como “codigo en C nativo”
ya que usamos las funciones de control de entrada / salida de CCS El código inicia siempre en
lo que se conoce como “cabecera”, es decir el principio. En esta cabecera encontraremos
instrucciones dirigidas al compilador y no al microcontrolador, dichas instrucciones se
denominan “directivas”.
#include <18f4550.h>
La directiva #include, nos permite decirle al compilador para que microcontrolador hemos
escrito el código. Seguidamente con la directiva #use delay(crystal=20000000) le indicamos a
que frecuencia esta funcionando nuestro oscilador. El orden de las directivas es crucial ya que
siempre primero debemos indicarle al compilador cual es el PIC que estamos usando y luego
cual es la frecuencia del oscilador. Posteriormente podemos agregar el resto de directivas. Si
esto no se respeta podemos tener errores en el proceso de compilación sobre todo cuando
usamos alguna función propia del compilador (llamadas funciones embebidas) para manejar
algún periférico, y que la misma necesita saber la frecuencia del oscilador. La directiva puede
tener distintas formas ya que amolda la configuración interna a la frecuencia que le indicamos.
Anteponiendo la palabra NO al fusible de configuración (así se llama al seteo de las
propiedades), se le informa al compilador que el fusible en cuestión está desactivado, mientras
que colocando solo el nombre activamos la propiedad. Por otra parte para activar o desactivar
los distintos fusibles se puede realizar en varias líneas (como en el ejemplo) o se pueden activar
y desactivar en una sola línea separando cada fusible con comas
void main(void)
port_b_pullups (true); // activamos las resistencias pullups en las entradas del puerto B
{ //abrimos el bucle
while(!input(PIN_B3)) // creamos un bucle para el pin 3 y 0
{ // Si se presiona RB3
while(!input(PIN_B3));
{ // Si se presiona RB4
while(!input(PIN_B4));
{ // Si se presiona RB6
while(!input(PIN_B6));
} // Cerramos bucle
} //cerramos el bucle
Todo programa siempre inicia en una rutina principal. En el lenguaje C las rutinas se denominan
funciones. Las funciones son un conjunto de sentencias u ordenes que realizan una operación
determinada, como lo hacen las rutinas, sin embargo las funciones tiene una característica extra;
a ellas se les puede pasar valores de variables para que las procesen, y son capaces de
devolvernos los resultados de dichos procesos.
Todo programa C siempre inicia en la función principal, la cual se denomina main. Dicho
nombre no puede ser distinto, todo programa debe tener una función main, de lo contrario el
compilador nos indicará un error. La función encierra una serie de sentencias, las cuales forman
el bloque de dicha función. Dicho bloque inicia con una llave { y finaliza con otra llave }. Entre
estas dos llaves se encuentran las sentencias y las estructuras lógicas.
La función main es una función especial ya que no puede recibir ningún valor, ni tampoco
puede devolver uno. Por lo tanto va acompañada por la palabra void lo cual en el lenguaje C
significa vacío; es decir que no devuelve ningún valor.
La primera línea o sentencia le indica al compilador que debe activar las resistencias en
configuración pullup del puerto B.
Es importante resaltar que las etiquetas siempre van en mayusculas, mientras que las
instrucciones se escriben en minúscula. Es muy importante que se respete el orden mayúscula-
minúscula pues el compilador es sensible a ello. Si escribimos una instrucción con mayúscula,
NO LA IDENTIFICARÁ. Debe observarse también que las sentencias siempre terminan con un
punto y coma. La siguiente sentencia de nuestro código es una instrucción estructural:
While; El while es una instrucción condicional la cual determina la ejecución de una o mas
instrucciones en tanto y en cuanto se cumpla una condición, la cual se encierra entre paréntesis.
En programación, si una condición se cumple, se dice que es verdadera, y esto se simboliza con
el número 1; por el contrario, si la condición no se cumple, es falsa y se simboliza con el
número 0. En un while, lo que este dentro del bloque del mismo, se ejecutará, siempre que la
condición de verdadera, caso contrario no se ejecutará ninguna sentencia que se encuentre
dentro del while. Es decir que las sentencias encerradas dentro del bloque while (limitado por
las llaves{}), se ejecutaran por siempre. Observe que dentro del while usamos también
funciones embebidas: output_toggle, Estas son funciones de salida de datos, se encargan de
poner en uno o en cero un puerto. Entre paréntesis le indicamos el PIN a encender o apagar
Encender 3 leds por medio de 3 pulsadores utilzando el PIC 18f4550. Cada led debe cambiar su
estado y mantenerlo al accionar el pulsador y cambiarlo al accionar de nuevo el pulsador
correspondiente.
#include <18f4550.h>
void main(void)
port_b_pullups(true);
while(true)
{
while(!input(PIN_B3))
{ // Si se presiona RB3
while(!input(PIN_B3));
while(!input(PIN_B4))
{ // Si se presiona RB4
while(!input(PIN_B4));
while(!input(PIN_B6))
{ // Si se presiona RB6
while(!input(PIN_B6));