Taller Skybot:Sesión 3:explicación programa hola mundo

De WikiRobotics
Saltar a: navegación, buscar

Introducción

Empezar a familiarizarse con el PIC y con su programación en C.

Descarga

hola-mundo.zip Programa "hola mundo" para encender el led de la tarjeta skypic
hola_mundo.c Fichero hola_mundo.c
hola_mundo.hex Fichero ejecutable para descargar en la Skypic

Programa hola mundo

#include <pic16f876a.h>

void main(void)
{
  //-- Configurar el bit 1 del puerto B para Salida
  TRISB1 = 0;

  //-- Activar el bit 1 del puerto B. El led se enciende
  RB1 = 1;

  //-- Bucle infinito
  while(1);
}

Explicación

Cabecera

Primero indicaremos el modelo de microcontrolador a emplear. En este caso es el PIC16F876A que es el que incorpora la tarjeta Skypic. Esta instrucción siempre la pondremos al comenzar nuestros programas:

#include <pic16f876a.h>

El led de la Skypic

El PIC16f876A tiene 3 puertos de entrada/salidas digitales: el A, B y C. El puerto B es donde está conectado el led de la skypic. Son 8 bits independientes, que se pueden configurar para funcionar como entrada o salida. Por defecto están configurados como entradas.

Los bits del puerto B se denotan como RB0, RB1, RB2, RB3, RB4, RB5, RB6 y RB7. El led está conectado al bit 1 (RB1). Para encender el led hay que poner RB1 a '1'

Comienzo del programa

La instrucción:

void main(void)

indica dónde empieza nuestro programa. El resto de instrucciones están delimitadas por llaves ('{' y '}')

Configurar el puerto B

El puerto B tiene 8 bits de entrada/salida denominados RB0, RB1, RB2... RB7. Estos bits se configuran para que funcionen como entradas o como salidas mediante el registro TRISB. En nuestro ejemplo hola mundo queremos configurar el bit RB1 (donde está conectado el led) para que sea de salida. Para ello será debemos escribir un 0 en el bit TRISB1:

 //-- Configurar el bit 1 del puerto B para Salida
 TRISB1 = 0;

Encender el LED

Para encender el led sólo hay que poner a '1' el bit RB1. Esto hace con la instrucción:

  //-- Activar el bit 1 del puerto B. El led se enciende
  RB1 = 1;

Fin del programa

El microcontrolador nunca para de ejecutar instrucciones mientras esté alimentado. Por eso finalizamos el programa con un bucle infinito. Dejamos al micro eternamente dando vueltas en ese bucle, hasta que alguien pulse el reset o quite la alimentación.

 //-- Bucle infinito
 while(1);

El puerto B

El puerto B es un puerto digital de 8 bits, cada uno de cuyos bits es configurable para entrada o salida. Los bits se denotan RB0, RB1,...,RB7. El sentido de cada uno de los bits de este puerto está determinado por el valor de los bits del registro TRISB. Cada uno de ellos controla el sentido de uno de los bits del puerto B, como se muestra gráficamente en la figura de la izquierda.

En la derecha se muestra un ejemplo de configuración. Se almacena el valor 0x8D hexadecimal en el registro TRISB, que se corresponde con el valor en binario 10001101. Los bits de TRISB que están a '1' configura el bit correspondiente del puerto B para que sea de entrada. Los bits que están a '0' lo configuran para salida.

Los registros PORTB y TRISB (click para ampliar)
Ejemplo de configuración del puerto B (click para ampliar)

El puerto B en la Skypic

El puerto B en la Skypic. El led está conectado al bit RB1, y el pulsador de pruebas al RB0 (click para ampliar)

En la tarjeta Skypic hay un pulsador de pruebas (el que está al lado del reset) y un led, conectados a los bits RB0 y RB1 respectivamente. Por ello, si se quiere acceder al led, habrá que configurar el bit RB1 de salida. Si se quiere leer del pulsador, habrá que configurar el RB0 como entrada.

Para recordar

  • A través del puerto B podemos enviar y recibir información digital.
  • Para sacar información al exterior escribiremos en el registro PORTB, o bien daremos valores a los bits de manera individual (ej. RB3=1)
  • Para obtener información del exterior leeremos el registro PORTB, o bien sus bits individuales
  • Para configurar los bits como entradas o salidas utilizaremos el registro TRISB

Información adicional

Enlaces

Noticias

  • 23/Junio/2010: Comenzada esta página. Migración de las páginas en HTML