Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programando PICs CCS 02
Programando PICs CCS 02
Microcontroladores PIC en
Lenguaje C con CCS
Entrega N 2.
En nuestra entrega anterior aprendimos a crear un proyecto dentro del MPLAB
para escribir nuestro primer cdigo en lenguaje C, hoy crearemos nuestro primer
cdigo y aprenderemos la funcin que cumplen sus elementos principales .
while(1)
//creamos un bucle infinito
{
//abrimos el bucle
output_high(PIN_B0);
//prendemos RB0
delay_ms(500);
//esperamos 500 ms
output_low(PIN_B0);
//borramos RB0
delay_ms(500);
//esperamos 500 ms
}
//cerramos el bucle
//cerramos la funcin principal
Este cdigo lo hemos escrito en lo que se conoce en la jerga tcnica como codigo en C
nativo ya que usamos las funciones de control de entrada / salida de CCS
El cdigo 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. Las directivas se
diferencian de las instrucciones en que:
Sin embargo esta directiva debe usarse con precaucin ya que el clock que definimos
nunca debe sobrepasar la mxima velocidad de procesamiento del PIC que se est
usando. Este parmetro se denomina MIPS (Millones de Instrucciones por Segundo) y
se obtiene dividiendo la frecuencia de entrada por cuatro.
MIPS = fosc/4
La directiva #fuse xx nos permite activar o desactivar las caractersticas del nucleo,
como ser el circuito de Watch Dog Timer, que reseta al microcontrolador ante un
cuelgue del mismo, el Brown Out Detect, que resetea el microcontrolador ante un fallo
de la alimentacin, el tipo de oscilador, etc.
Las etiquetas usadas para activar o desactivar la propiedad, estn incluidas en el archivo
de cabecera y deben ser consultadas siempre, ya que las mismas suelen cambiar entre
versiones del compilador o tipos de microcontroladores.
En lneas generales podemos decir que anteponiendo la palabra NO al fusible de
configuracin (as se llama al seteo de las propiedades), se le informa al compilador que
el fusible en cuestin 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
lneas (como en el ejemplo) o se pueden activar y desactivar en una sola lnea separando
cada fusible con comas:
#fuse NOWDT,HS,NOPUT,NOLVP,NOMCLR,NOPROTECT,NOBROWNOUT
while(1)
//creamos un bucle infinito
{
//abrimos el bucle
output_high(PIN_B0);
//prendemos RB0
delay_ms(500);
//esperamos 500 ms
output_low(PIN_B0);
//borramos RB0
delay_ms(500);
//esperamos 500 ms
}
//cerramos el bucle
//cerramos la funcin principal
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 operacin determinada, como lo hacen las rutinas, sin embargo las
funciones tiene una caracterstica extra; a ellas se les puede pasar valores de variables
para que las procesen, y son capaces de devolvernos los resultados de dichos procesos.
Bsicamente actan como las funciones matemticas.
Todo programa C siempre inicia en la funcin principal, la cual se denomina main.
Dicho nombre no puede ser distinto, todo programa debe tener una funcin main, de lo
contrario el compilador nos indicar un error.
La funcin encierra una serie de sentencias, las cuales forman el bloque de dicha
funcin. Dicho bloque inicia con una llave { y finaliza con otra llave } .
Entre estas dos llaves se encuentran las sentencias y las estructuras lgicas.
La funcin main es una funcin especial ya que no puede recibir ningn valor, ni
tampoco puede devolver uno. Por lo tanto observe que va acompaada por dos palabras
void lo cual en el lenguaje C significa vaco; es decir que no devuelve ningn valor
(primer void) ni puede recibir ningn valor, (segundo void, el cual esta encerrado entre
parntesis).
void main(void)
{
Nuestro cdigo
}
Nuestro cdigo lo hemos escrito en formato CCS nativo. Esto significa que hemos
usado todas las funciones embebidas (incluidas dentro) del compilador para simplificar
la escritura del cdigo y que nos ahorran mucho tiempo.
Debe observarse que cada lnea la hemos decalado (separado del origen) por medio del
TABULADOR; esto es una buena prctica para poder advertir a simple vista cuales
sentencias son las que estas anidadas dentro de cada bloque del programa principal.
La primera lnea o sentencia le indica al compilador que debe desactivar todos los
puertos analgicos del PIC y que debe configurarlos como puertos digitales:
setup_adc_ports(NO_ANALOGS);
Estas son funciones de salida de datos, se encargan de poner en uno o en cero un puerto,
el cual la misma funcin se encarga de configurar como salida, no debe hacerlo el
programador. Entre parntesis le indicamos el PIN a encender o apagar. En nuestro caso
es el RB0, al cual CCS lo denomina dentro del archivo de cabecera del
microcontrolador como PIN_B0.
Este formato si bien parece en principio raro porque no se adapta al usado en el data
sheet, es prctico para los programadores NO ELECTRNICOS, y es el que ha
adoptado CCS.
Por ejemplo el RA0 CCS lo llama PIN_A0, y al RC6, PIN_C6, y as sucesivamente.
Otra de las sentencias usadas es
delay_ms(500);
La cual es una funcin de tiempo que nos permite crear un tiempo de espera en
milisegundos. Tambin existe el delay_us que nos permite crear un delay de
microsegundos.
La exactitud de la funcin delay depende de que hayamos definido correctamente la
frecuencia de clock.
De esta forma hemos hecho falshear un LED en nuestro primer cdigo.
Bueno, esto es todo por ahora , en las prximas entregas iremos descubriendo paso a
paso las utilidades de la programacin en lenguaje C y del entorno CCS.
Continuar ......