Está en la página 1de 13

TecMikro

Programacin de microcontroladores PIC en mikroC PRO


Email: tecmikro@gmail.com Cel. 098 743 8877 Telf. 243 0352 Quito-Ecuador
Anuncios Google

Libros en PDF

Programador Pic

Pic Timer

Pic Interrupt

Programacin de PIC en C con el compilador mikroC


PRO

A continuacin se presentan los conceptos fundamentales ms importantes, necesarios para


emprender exitosamente el aprendizaje de programacin de microcontroladores PIC en C, utilizando el
conocido compilador mikroC PRO.
La programacin en el compilador mikroC PRO se basa en PROYECTOS. Cada proyecto est
conformado por un conjunto de archivos interrelacionados entre s. Para crear un programa primero se
debe crear un Proyecto (bsicamente se debe seleccionar el microcontrolador, la frecuencia de
operacin y establecer los bits de configuracin); a continuacin se procede a escribir las instrucciones
del programa en lenguaje C (cdigo fuente); y por ltimo se genera el cdigo de mquina .HEX (cdigo
ejecutable) que ser almacenado en la memoria de programa del microcontrolador.
En este artculo se explican los detalles de la programacin de microcontroladores PIC en lenguaje C,
es decir la sintaxis (cmo se deben escribir las instrucciones) y el uso de las instrucciones con ejemplos
prcticos. Se recomienda al lector que estudie y repase estas lneas con paciencia y dedicacin ya que
constituyen la piedra angular sobre la cual descansa la programacin de microcontroladores; el dominio
de estos conceptos le permitirn a usted convertirse en un experto en la programacin de
microcontroladores PIC.

Estructura bsica de un programa en mikroC


PRO (sin funciones)
Todos los programas (cdigo fuente) de microcontroladores PIC en C tienen una estructura bsica, a
partir de la cual se desarrolla cualquier aplicacin del usuario:

//Nombre_de_programa.c
//Descripcin del programa.
//Autor: Ing. Penagos R.
//Declaracin de variables
...
//Funcin principal
void main( ){
//Instrucciones del programa.
...
}

En el cdigo anterior se debe entender lo siguiente:


Las lneas que comienzan con el doble slash // son slo comentarios que no son necesarios
pero s son muy importantes para documentar (informar) acerca del significado de este cdigo.
La declaracin de variables se hace donde aparecen los puntos suspensivos ... (normalmente la
mayora de programas que son de alguna utilidad prctica tienen variables, por lo tanto se debe
hacer la declaracin correspondiente).
Las instrucciones del programa (las instrucciones que va a ejecutar o realizar el microcontrolador)
se colocan donde van los puntos suspensivos ... (dentro de la funcin main)

Los 7 elementos bsicos de la programacin de


PIC en C
La programacin de PIC en C se puede comprender mejor si se estudian sus elementos bsicos; una
vez que se dominen estos elementos se podr dar solucin a la gran mayora de problemas de
programacin. El propsito de la mayora de los programas es resolver un problema. Los programas
resuelven los problemas por medio de la manipulacin de informacin o datos. Normalmente los
programas se caracterizan por permitir el ingreso de informacin, tener uno o varios lugares de
almacenamiento de dicha informacin, contar con las instrucciones para manipular estos datos y
obtener algn resultado del programa que sea til para el usuario. Tambin, las instrucciones se
pueden organizar de tal forma que algunas de ellas se ejecuten slo cuando una condicin especfica
(o conjunto de condiciones) sea verdadera, otras instrucciones se repitan un cierto nmero de veces y
otras pueden ser agrupadas en bloques que se ejecutan en diferentes partes de un programa.
Lo anterior constituye una breve descripcin de los siete elementos bsicos de la programacin:
entrada de datos, tipos de datos, operaciones, salida, ejecucin condicional, lazos y funciones.
Una vez que se dominan estos elementos se puede afirmar que se conocen los fundamentos de la
programacin, con lo cual ya es posible desarrollar una gran cantidad de aplicaciones de diversa ndole.

Instrucciones bsicas de PIC en C


1.- Instruccin de asignacin (=)
Permite asignar a una variable un valor constante, el contenido de otra variable o el resultado de una
expresin matemtica. La asignacin va de derecha a izquierda. Por ejemplo,

suma=0; //El valor 0 se almacena en la variable suma.


x0=x1; //El contenido de la variable x1 se almacena en la variable x0.
dx=(b-a)/n; //El resultado de la expresin matemtica se almacena en la variable dx.

2.- Instruccin de entrada de datos (variable=PORTx)


Permite el ingreso de uno o ms datos a travs de los pines del microcontrolador y almacenarlos en
una o ms variables. Por ejemplo,
variable=PORTA; //Los bits del puerto A se almacenan en la variable.

El siguiente es un caso especial utilizado en la programacin de microcontroladores PIC en C:


PORTB=PORTA; //Los bits del puerto A se envan hacia los pines del puerto B.

Tambin se puede leer el estado individual de cada bit de un puerto:


variable=RB3_bit; //Lee el estado del pin RB3 y lo guarda en la variable.

3.- Instruccin de salida de datos (PORTx=dato)


Permite el envo de datos, el contenido de una variable o el resultado de una expresin matemtica
hacia los pines de un puerto. Por ejemplo,
PORTA=0x00; //Todos los pines del puerto A se ponen en 0.
PORTB=variable; Los bits de la variable son enviados hacia los pines del puerto B.
PORTB=PORTA+65; //El valor del puerto A ms 65 se enva hacia el puerto B.

Como caso especial, se pueden enviar bits individuales a cada uno de los pines de un puerto:
RB0_bit=0; //El pin RB0 se pone en 0.

4.- Instruccin de decisin (if...else)


Permite la ejecucin de las instrucciones1 si la condicin es verdadera, de lo contrario se ejecutan las
instrucciones2. Las llaves { } no son necesarias cuando hay una sola instruccin.
if (condicin){
instrucciones1;
}
else{
instrucciones2;
}

Ejemplo 1:
Si el contenido de la variable codigo es igual al contenido de la variable clave , se ejecutan las
primeras cuatro instrucciones; de lo contrario se ejecutan nicamente los dos ltimas instrucciones.

if (codigo==clave){
intentos=0;
RA7_bit=1;
Delay_1sec( );
RA7_bit=0;
}
else{
intentos++;
Delay_ms(200);
}

Ejemplo 2:
Instruccin de decisin sin else. Esta es una variante muy utilizada cuando se desea condicionar la
ejecucin de un grupo de instrucciones.
Las dos instrucciones se ejecutarn nicamente si la variable contador es igual a 2, de lo contrario la
ejecucin contina a partir de la lnea //Aqu .
if (contador==2){
RB6_bit=~RB6_bit;
contador=0;
}
//Aqu.

Ejemplo 3:
Similar al caso anterior pero con una sola instruccin. Si la variable horas es igual a 24 se reinicia esta
variable con un valor de cero.
if (horas==24) horas=0;

Nota 1: Las condiciones se obtienen por medio de los operadores de relacin y los operadores lgicos.
Nota 2: Operadores de relacin:
>

Mayor que

>=

Mayor o igual que

<

Menor que

<=

Menor o igual que

==

Igual a (ntese la diferencia con el operador de asignacin =)

!=

No es igual a

Nota 3: Operadores lgicos:

&&

||

5.- Instruccin de ciclo controlado por una variable (for)


Permite ejecutar un grupo de instrucciones de manera repetitiva, una determinada cantidad de veces.
for (nmero de veces){
instrucciones;
}

Ejemplo 1:
La variable
tiene un valor inicial de 7 ( i=7 ) y un valor final de 1 ( i>=1 ). Esta variable va
disminuyendo de 1 en 1 ( -- ). Por lo tanto las dos instrucciones se ejecutarn en 7 ocasiones. La
primera vez cuando i=7, la segunda cuando i=6, la tercera cuando i=5 y as sucesivamente hasta la
sptima vez cuando i=1. Luego la ejecucin contina a partir de la lnea //Aqu .
for (i=7; i>=1; i--){
PORTB=PORTB<<1;
Delay_ms(500);
}
//Aqu.

Ejemplo 2:
El valor inicial de la variable es 1 y su valor final es 3. La variable
se va incrementando de 1 en 1
( i++ ). Por lo tanto la instruccin se ejecuta tres veces, lo que da como resultado un retardo de 3
segundos. Luego la ejecucin contina a partir de la lnea //Aqu .
for (i=1; i<=3; i++)
Delay_1sec( );
//Aqu.

6.- Instruccin iterativa condicional (while)


Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras una condicin sea verdadera.
Primero se revisa la condicin para determinar su valor de verdad (verdadero o falso) y luego se
ejecutan las instrucciones.
while (condicin){
instrucciones;
}

Ejemplo 1:
La ejecucin del programa permanece indefinidamente en esta lnea mientras el bit IOFS del registro
OSCCON sea igual a cero. Como caso particular no se ejecuta ninguna instruccin (la cual debera
estar antes del punto y coma).
while (OSSCON.IOFS==0) ;

Ejemplo 2:
Ejemplo de un lazo infinito. En mikroC PRO, cualquier valor numrico diferente a cero se
considera VERDADERO, y un valor numrico igual a cero se considera FALSO.
Al valor numrico del puerto A se le suma el valor 65, el resultado se enva hacia los pines del puerto B.
Este proceso se repite continua e indefinidamente, debido a que la condicin siempre es verdadera (1).
while (1)
PORTB=PORTA+65;

Ejemplo 3:
Las cuatro instrucciones encerradas por { } se ejecutarn indefinidamente mientras el valor del bit
RB0 sea igual a 0.
while (RB0_bit==0){
RB1_bit=1;
Delay_ms(500);
RB1_bit=0;
Delay_ms(200);
}

7.- Instruccin hacer-mientras (do...while)


Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras una condicin sea verdadera.
Es similar a la instruccin while, con la diferencia de que primero se ejecutan las instrucciones y luego
se revisa la condicin.
do{
instrucciones;
}
while (condicin);

Ejemplo 1:
La variable kp tiene un valor inicial de cero. La instruccin kp=Keypad_Key_Click( ); se ejecuta y
luego se revisa la condicin ( !kp ).Mientras kp sea igual a cero (FALSO) la condicin ser
VERDADERA ( !kp ), debido al operador de negacin ! que cambia el valor de verdad a su estado
contrario. Como resultado se tendr un lazo infinito mientras la variable kp siga en cero. Cuando la
variable kp cambie de valor como consecuencia de la pulsacin de una tecla, la condicin ser FALSA
y la ejecucin continuar en la lnea //Aqu .
kp=0;
do
kp=Keypad_Key_Click( );
while (!kp);
//Aqu.

Ejemplo 2:
Las cuatro instrucciones dentro de { } se ejecutarn indefinidamente mientras la variable tecla sea
diferente a 1.

do{
ingreso( );
raiz( );
pn_1( );
seg_grado( );
}
while (tecla != 1);

Nota: A diferencia de la instruccin while , en la instruccin do...while las instrucciones se ejecutan


por lo menos una vez.
8.- Instruccin de seleccin mltiple (switch)
Permite la ejecucin de un grupo de instrucciones de varios grupos posibles, dependiendo del valor de
una variable.
switch (variable){
case 1: instrucciones1;
break;
case 2: instrucciones2;
break;
case 3: instrucciones3;
break;

default: instrucciones;
}

Si la variable es igual a 1 se ejecutan nicamente las instrucciones1, si es igual a 2 se ejecutan


nicamente las instrucciones2 y as sucesivamente. Si la variable no es igual a ninguno de los casos
(case) se ejecutan las instrucciones por defecto (default).
Ejemplo 1:
Esta es una funcin numrica que da como resultado un nmero hexadecimal dependiendo del valor
que tenga la variable digit . Si digit es igual a 0 la funcin devuelve (return) el valor 0x3F. Si
digit es igual a 1, la funcin devuelve el valor 0x06, y as sucesivamente. Este ejemplo es una
variante de la instruccin switch , donde no aparece el elemento default .
char Bin2_7seg(char digit){
switch (digit){
case 0: return 0x3F;
case 1: return 0x06;
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
}
}

Funciones
Una funcin es una agrupacin de instrucciones para formar una nueva instruccin creada por el
programador (usuario). Empleando funciones, la solucin total de un determinado problema se divide
en varios subproblemas, cada uno de los cuales es resuelto por medio de una funcin particular,
aplicando de esta manera la conocida mxima Divide y vencers.
Las funciones constituyen una de las caractersticas fundamentales de mikroC PRO, pues todo
programa bien escrito hace uso de ellas. Para poder utilizar una funcin se deben cumplir los dos
siguientes pasos:
1.-Declaracin de la funcin.- Consiste en indicar el tipo, nombre y parmetros de la funcin:
tipo nombre ( parmetro1, parmetro2, ...);

2.-Definicin de la funcin.- Consiste en indicar las instrucciones que forman parte de dicha funcin:
tipo nombre ( parmetro1, parmetro2, ...){
instrucciones;
}

Estructura bsica de un programa en mikroC PRO (con funciones)


Todos los programas (cdigo fuente) en mikroC PRO tienen una estructura bsica, a partir de la cual se
desarrolla cualquier aplicacin del usuario:

//Nombre_de_programa.c
//Descripcin del programa.
//Autor: Ing. Penagos R.
//***************************Declaracin de funciones (prototipos)*********************
*****
...
//******************************Fin de declaracin de funciones************************
*****
//==================================Declaracin de variables===========================
=====
...
//===============================Fin de declaracin de variables=======================
=====
//**********************************Funcin principal********************************
void main( ){
//Instrucciones del programa.
...
}
//********************************Fin de funcin principal***************************
//================================Definicin de funciones============================
funcin1{
instrucciones1;
}
funcin2{
instrucciones2;
}
//============================Fin de definicin de funciones==========================

Nota 1: Los tipos de funciones ms empleadas son numricas char y nulas void . Las primeras
retornan return o devuelven como resultado un nmero, mientras que las segundas simplemente
ejecutan un grupo de instrucciones.
Ejemplo 1:
Este ejemplo se puede encontrar en el captulo II, Puertos Digitales, del libro. La funcin es numrica
char , su nombre es Bin2_7seg y tiene un parmetro digit de tipo char .
La funcin se utiliza como si fuera una instruccin cualquiera, tomando en cuenta el tipo de funcin y su
(s) parmetro(s). En este ejemplo se tiene PORTB=Bin2_7seg(PORTA) . Esto significa que la variable
PORTA remplaza a la variable digit . Por lo tanto si PORTA es igual a 0, la funcin devuelve el valor
0x3F que ser enviado al puerto B. Si PORTA es igual a 1, la funcin devuelve 0x06 que ser
enviado al puerto B, y as sucesivamente.

//7seg1.c
//Se utiliza la funcin Bin2_7seg que transforma un nmero binario a su
//equivalente en 7 segmentos.
char Bin2_7seg(char digit); //Prototipo de la funcin.
void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador est inestable.
PORTA=0x00; //Inicializacin.
PORTB=0x00;
ANSEL=0x00; //Pines AN<6:0> como E/S digital.
TRISB=0x00; //Puerto B como salida.
while (1) PORTB=Bin2_7seg(PORTA);
}
char Bin2_7seg(char digit){ //Definicin de la funcin.
switch (digit){
case 0: return 0x3F; //0x3F es el cdigo 7-segmentos del 0.
case 1: return 0x06; //0x06 es el cdigo 7-segmentos del 1.
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
case 5: return 0x6D;
case 6: return 0x7D;
case 7: return 0x07;
case 8: return 0x7F;
case 9: return 0x67;
}
}

Ejemplo 2: Trabajo simplificado con funciones.


Variante del ejemplo anterior, en el que se hace nicamente la definicin de la funcin (sin declaracin).
Se debe hacer antes de la funcin principal, de lo contrario se producirn errores de compilacin por
tratar de usar una funcin desconocida. Este mtodo de uso de funciones es muy popular ya que
simplifica notablemente la escritura de los programas asi como su mantenimiento.

//7seg1.c
//Se utiliza la funcin Bin2_7seg que transforma un nmero binario a su
//equivalente en 7 segmentos.
char Bin2_7seg(char digit){ //Definicin de la funcin.
switch (digit){
case 0: return 0x3F; //0x3F es el cdigo 7-segmentos del 0.
case 1: return 0x06; //0x06 es el cdigo 7-segmentos del 1.
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
case 5: return 0x6D;
case 6: return 0x7D;
case 7: return 0x07;
case 8: return 0x7F;
case 9: return 0x67;
}
}
void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador est inestable.
PORTA=0x00; //Inicializacin.
PORTB=0x00;
ANSEL=0x00; //Pines AN<6:0> como E/S digital.
TRISB=0x00; //Puerto B como salida.
while (1) PORTB=Bin2_7seg(PORTA);
}

Detalles importantes de mikroC PRO para tener en cuenta


En la programacin de PIC en C existen pequeos detalles que se deben tener muy en cuenta y que
permitirn que los programas realizados cumplan las tareas para los cuales fueron diseados. Con
respecto a los comentarios, se puede decir que son importantes aunque no son necesarios. Su
importancia radica en que ofrecen una mayor facilidad para entender el cdigo y realizar su
mantenimiento (esto es especialmente cierto cuando ha pasado el tiempo y necesitamos realizar alguna
modificacin).
Los comentarios se inician con la doble barra diagonal // .
Los signos de agrupacin siempre deben estar en pareja, es decir si hay tres llaves de apertura
{{{ , deben haber tres llaves de cierre correspondientes }}} . Lo mismo con los parntesis
( ).
Los nmeros hexadecimales se escriben comenzando siempre con 0x, por ejemplo 0x0A ,
0x16 , 0xFD , etc.
Los nmeros binarios se escriben comenzando siempre con 0b, por ejemplo 0b001110 ,
0b11101111 , etc.
Los nmeros decimales se escriben de la forma comn y corriente, por ejemplo 64, 126, 12.75,
etc.

No se debe confundir el operador de asignacin = con el operador de comparacin


== igual a.
El punto y coma ; indica el final de una instruccin, por lo tanto hay que tener mucho cuidado
para colocarlo en el lugar apropiado.
Las llaves { } no son necesarias en aquellos casos en los que nicamente se va a ejecutar una
instruccin (ver los ejemplos a lo largo de este apartado).
Todo programa en mikroC PRO debe tener una funcin principal main , y su nombre no debe ser
cambiado.
Los tipos de datos ms utilizados se muestran en la tabla 1.5.

Tabla 1.5 Tipos de datos ms comunes en mikroC PRO


El tipo float es para nmeros con punto decimal, mientras que los dems tipos son para nmeros
enteros.
La EJECUCIN DE UNA INSTRUCCIN consiste en la realizacin de las operaciones especificadas
en esa instruccin. De la ejecucin se encarga la CPU (unidad central de proceso) del microcontrolador
PIC.

Allied Electronics
Piense en Allied para ms de tres millones de piezas lnea.

Anuncios Google

Microcontroladores Pic
ASM Pic
Pic PDF

Cmo programar microcontroladores PIC


Gua bsica para programar microcontroladores PIC en mikroC PRO. Disponible en edicin impresa y
en formato PDF. A la venta para toda Amrica y Espaa.

Cmpralo ya! (http://programarpicenc.com/libro-ebook-de-mikroc-profor-pic-en-espanol/)


TecMikro 2009-2015 Direccin: Av. 10 de Agosto N34-130 y Atahualpa. Frente a la parada norte El
Florn del Trolebs. Quito-Ecuador

También podría gustarte