Está en la página 1de 11

Guía 1

Tema: PIC C compiler CSS


Duración estimada:

Objetivo: Implementar circuitos de prueba utilizando Proteus


Diseñar soluciones de circuitos sencillos utilizando PIC

Introducción
PIC C Compiler CCS es un software diseñado para la programación de
microcontroladores PIC. El software es compatible con una amplia variedad de
microcontroladores PIC.

Al iniciar el programa pic c compiler vamos a file > new > project wizard y damos click,
como se observa en la siguiente imagen.

Crear un nuevo proyecto

Pedirá darle una ubicación y un nombre al proyecto, este es libre de escoger pero se
sugiere que sea en una ruta fácil de encontrar para buscar después el archivo .hex que
será cargado con el k150

Seleccionar ruta del proyecto


1
En las siguientes imágenes vamos a mencionar la configuración básica que para crear
el proyecto y después compilarlo.
Pantallas configuración
En la pantalla de project wizard nos mostrara varias pestañas, vamos a mencionar las
principales y en el curso veremos las cada una de ellas y su aplicación.
Primero nos mostrara la pestaña device, en esta vamos a encontrar lo siguientes:
 Device: que permitirá seleccionar el microcontrolador pic que utilizaremos en el
proyecto.
 Clock: esta opción permite seleccionar el tipo de cristal para el microcontrolador, si es
interno o externo según el que soporte, adicionalmente la velocidad del cristal que
estamos utilizando.
 WDT: permite habilitar el Watch Dog Timer y realizar la configuración del tiempo para el
reset.
 Funciones adicionales: estas pueden ser getc(), i2c_read, funciones de delay y estas
están dependiendo de la versión del pic c compiler.

Configuración archivo externos


La siguiente pantalla podemos seleccionar los fines que vamos a declarar darles un
nombre y un valor esto nos puede servir para asociar un pin algún modulo, sensor o o
entrada y salida del microcontrolador al nombre que nosotros hayamos seleccionado y
poderlo utilizar en el flujo del programa.

Configuración de pines
2
Una vez que terminemos de seleccionar las características iniciales y la configuración
inicial para el microcontrolador que estemos trabajando le damos en finalizar y lo que va
a hacer es quedarnos un código base como el que estamos viendo la siguiente imagen
donde ya podemos empezar con la programación del microcontrolador. Ese código
base cuenta con las características que nosotros seleccionamos por ejemplo el pick
estamos utilizando la frecuencia y el cristal y nos va a dejar declarados la función
principal Main.

Proyecto creado

Compilar proyecto
Vamos a dar una explicación muy sencilla de cómo es la compilación del código
utilizando este entorno de trabajo una vez que hayamos creado el proyecto que
mencionamos anteriormente, lo que vamos a hacer es dirigirnos hacia pestaña compile
allí vamos a ir a buscar build y lo que le click en el icono, también podemos usar el atajo
de teclado que es f9.
Esta acción lo que va hacer es iniciar la compilación de nuestro código utilizando las
características que hemos el año señalado anteriormente y el código que nosotros
creamos esto nos va a generar como primera pantalla un blog donde nos indica donde
Se generó el proyecto con el archivo hexadecimal que nosotros necesitamos la cantidad
de memoria utilizada y se presentó o no algún error adicionalmente nos va a mostrar en
la parte derecha inferior un estado de la memoria RAM y ROM de cuánto hemos
consumido.

3
Proyecto creado

Proyecto creado

Por último si nos dirigimos a la ubicación del proyecto donde nosotros los dejamos que
es en la ruta que seleccionamos el principio podemos ver todos los archivos de
compilación que se genera en estos momentos Solamente vamos a utilizar el .hex qué
es el que vamos a cargar en el microcontrolador. Un post duro también vamos a hablar
sobre cada uno de estas extensiones y sobre cada archivo para saber qué es lo que
hace y su función.

4
Desarrollo

Proyecto #1: A continuación realice el montaje de la figura 5.1, en base al cual


realizaremos la programación necesaria para encender dos Leds conectados a los
puertos del microcontrolador:

El Led 1 se encuentra conectado en el pin RA0 del puerto A, el cual deberá ser
configurado como “Salida”.
El Led 2 se encuentra conectado en el pin RB0 del puerto B, el cual deberá ser
configurado igualmente como “Salida”.

Como los pines de los puertos pueden ser configurados como “entradas” o como
“salidas”, es importante tomar en cuenta los registros de configuración de puertos, los
cuales para el caso específico del PIC16F84 son dos: TrisA (registro de configuración
I/O del puerto A), es un registro de 8 bits, de los cuales los tres más significativos no se
encuentran implementados en este modelo de microcontrolador, ya que como se puede
observar en el diagrama de pines del dispositivo el puerto A

1 = Entrada (Al configurar un bit del registro TrisA en “1”, éste se comporta como
entrada).
0 = Salida (Al configurar un bit del registro TrisA en “0”, éste se comporta como salida).

En PicC, este paso se realiza de la siguiente manera:

set_tris_a(0b1110);
set_tris_a(0x0a);

TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B, ya sea
como entrada o como salida, por ejemplo:

5
Se configurarán según los requisitos de la misma forma que el puerto A
Sintaxis de las Instrucciones empleadas en el programa:

set_tris_b(0b11111110);
set_tris_b(0xfe);

Sintaxis
delay_ms
Permite hacer una espera en ms en el programa.
set_tris_b
Determina los pines del puerto b como estrada si es 1 y salida si es 0 pasando
como valor un hexadecimal, ejemplo 0xff.
output_high
Pone en estado alto el pin que le pasemos.
output_low
Pone en estado bajo el pin que le pasemos.

Veamos el código a emplear

Veamos una versión alternativa

6
Funcionamiento

1. El primer paso es incluir el microcontrolador que vamos a utilizar en este caso es


el pic16F628a.
2. Luego vamos a declarar los fusibles que va a utilizar este microcontrolador, el
más importante es el XT ya que estamos utilizando un cristal externo de baja
frecuencia que es de 4MHz.
3. Ahora vamos a indicarle el reloj con qué va a trabajar el programa, como
mencionamos anteriormente estamos trabajando con un cristal de 4MHz, así que
dejamos el reloj de la misma frecuencia.
4. Para llevar un poco de orden en el código vamos a declarar el pin b0 y lo vamos
a nombrar como LED.
5. Inicializamos en el main donde se baje contar todo nuestro programa principal.
6. Ahora le indicamos con set_tris_b que todos los pines del puerto b van a ser de
salidas.
7. Con la instrucción output_high vamos a encender el led y luego le vamos a dar
un tiempo de espera de un segundo.
8. Ahora con la instrucción output_low lo que vamos a hacer es apagar el LED y dar
un tiempo de espera de un segundo.

Y ya por último dentro del mail declaramos un While dónde va a quedar el programa
ejecutándose indefinidamente.

Proyecto #2: En este ejemplo conectaremos un Led en cada pin del puerto B, el cual a
su vez deberá ser configurado como salida para garantizar el correcto funcionamiento
del mismo

En el proyecto #1 se pudo observar cómo es posible encender un led conectado a un


pin del puerto A o B en un PIC16F84A, utilizando las instrucciones. También existen
otras formas de poner un “1” o un “0” lógico en un pin configurado como salida; esto se
puede lograr de varias maneras:

7
output_high(porta,0) ' RA0 = 1 -> bit_set(porta,0);
output_low(porta,0) ' RA0 = 0 -> bit_clear(porta,0);
Cuando deseamos poner varios pines de un mismo puerto en “1”, podemos utilizar las
siguientes opciones:

port_b= 0b10101010 ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1


' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0
Este mismo ejemplo de configuración en hexadecimal:
port_b = 0xAA ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1
' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0

Recordemos que el símbolo “0b” expresa la notación en binario, por lo cual se deben
expresar los ocho bits a ser cargados en el registro “PortB”. Otra forma de expresar este
ejemplo sería colocando la notación en hexadecimal con el símbolo “0x”, seguido del
valor calculado.

¿Que función realiza el programa anterior?


______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________

Proyecto #3: Los pines en los puertos de un microcontrolador pueden ser configurados
también como entradas, como se detalla en el contenido del proyecto #1, donde se
explica claramente que al poner un “1” en un bit de un registro de configuración de
puerto, ya sea TRISA o TRISB, para el caso del
PIC16F84A, éste se comportará como entrada.

8
IF – ELSE
Sintaxis: If expresión 1 {AND / OR expresión 2}
Accion si verdadero
Else
Accion si falso
Ejemplo:
if(input(SW1)) //chequeamos si SW1=1
output_high(LED1); //encendemos LED1
else //sino
output_low(LED1); //apagamos LED1

Con la instrucción If – Them podemos tomar decisiones a lo largo de un programa,


basadas en condiciones específicas definidas por el programador.

Que función realiza el programa

Proyecto #4: En este ejemplo empleamos un microcontrolador PIC16F877A, con el


cual nos hemos planteado la lectura de ocho pulsadores conectados al puerto B, de tal
manera que al activar uno de ellos podemos mostrar un dígito decimal en un Display de
siete segmentos.

9
Tabla de codificación

La siguiente tabla muestra cual es el valor hexadecimal que se le tiene que pasar para
poder visualizar cada dígito, este valor hexadecimal se calcula por medio del byte que le
vamos a pasar al puerto directamente, también podemos pasarle bit por bit a cada uno
de los pines pero ya que tenemos la facilidad de pasarle el hexadecimal completo
entonces utilizamos este formato.

Number H A B C D E F G PORT_X(Hex)
0 0 1 0 0 0 0 0 0 0x40
1 0 1 1 1 1 0 0 1 0x79
2 0 0 1 0 0 1 0 0 0x24
3 0 0 1 1 0 0 0 0 0x30
4 0 0 0 1 1 0 0 1 0x19
5 0 0 0 1 0 0 1 0 0x12
6 0 0 0 0 0 0 1 0 0x02
7 0 1 1 1 1 0 0 0 0x78
8 0 0 0 0 0 0 0 0 0x00
9 0 0 0 1 1 0 0 0 0x18

10
Complementario: haga los cambios necesarios para mostrar los números de 0 a F
en el display sin utilizar más puertos de entrada

Proyecto #5: En el ejemplo a continuación se realiza un conteo ascendente desde cero


hasta nueve en un display de 7 segmentos conectado al puerto “D” de un PIC16F877A.

FOR
Sintaxis:
for(int variable = valor inicial; conteo máximo; incremento) {
código
delay_ms(tiempo);

11

También podría gustarte