Guia 1 Pic2024
Guia 1 Pic2024
Guia 1 Pic2024
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.
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
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
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).
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.
6
Funcionamiento
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
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:
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.
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
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
FOR
Sintaxis:
for(int variable = valor inicial; conteo máximo; incremento) {
código
delay_ms(tiempo);
11