Professional Documents
Culture Documents
Es un compilador creado por la compaa Mikroelectronika, que utiliza una variante del lenguaje C, razn por la cual
comparte su sintaxis y buena parte de las construcciones y conceptos empleados por dicho lenguaje. Por defecto, en los
nombres de variable, funcin, etiquetas, etc no se diferencian las maysculas de las minsculas, por lo que Cant y cant
son la misma variable; sin embargo, esta configuracin se puede cambiar (men Tools / Options, pestaa Output,
opcin Output Settings).
Tipos de Datos:
Cada uno de los tipos indicados posee una jerarqua superior al tipo que le antecede en la tabla, as, por ejemplo, en una
expresin que contenga variables int y float, el resultado ser float.
A cada tipo se le puede agregar uno de los siguientes prefijos: signed (con signo), unsigned (sin signo), short (corto),
long (largo); al utilizarlos, se puede cambiar el rango de valores y la cantidad de bits utilizados. Por ejemplo:
Sentencias y Comentarios
Los comentarios de una sola lnea inician con los caracteres //. Para colocar comentarios de varias lneas, los mismos
debern estar encerrados entre los caracteres /* y */.
Variables:
Para asignar un valor a una variable se utiliza la sentencia nom_variable1 = valor1 , aunque tambin se puede utilizar
nom_variable1 = expresion1 , estando en cursiva el texto que el programador deber sustituir a su conveniencia.
Toda variable deber declararse, para ello, se utiliza la sentencia tipo_datos1 nom_variable1 , aunque tambin se puede
utilizar tipo_datos2 nom_variable2 = expresion1 , esta ltima, adems de declarar la variable, le asigna un valor inicial.
El nombre de la variable slo puede contener letras del alfabeto, nmeros y guin bajo ( _ ), y no deben comenzar con
un nmero.
En caso que no se declare una variable, el compilador la tratar como signed int.
Palabras Reservadas:
Las siguientes palabras no se pueden utilizar como nombres de variable o etiquetas, debido a que ya poseen un
significado particular en MikroC.
Las palabras reservadas siempre deben escribirse en minsculas, no importa la configuracin establecida (diferenciar o
no las maysculas de las minsculas).
Constantes:
Son similares a las variables, slo que su valor no cambiar dentro del programa, por lo cual no se almacenan en la
memoria de datos del PIC. La sintaxis para su declaracin es: const nom_constante1 = valor1. En los siguientes
ejemplos se aprovechar para indicar cmo especificar valores hexadecimales, caracter, punto flotante, etc; dichos
valores se pueden usar en asignacin de variables.
Ejemplo:
const MENOR = 255; // definicin de contante tipo entero
const factor1 = 5.86; // definicin de constante tipo punto flotante
const tope = 0x2E; // valor hexadecimal 2E
const total = 024; // valor octal 24
const masc = 0b00111100; // valor binario 00111100
const elem = 3.7E-2; // valor 0.037
const orden = 'A'; // definicin de constante tipo caracter
const msg = Debe soltar el pulsador; // definicin de contante tipo cadena de caracteres
Representan una variante del tipo entero, se utilizan para hacer ms legible el cdigo, ya que se utilizarn los nombres
definidos en lugar de usar nmeros. Su sintaxis es: enum nom_tipoenum {valor1, valor2, valor3, valor4, valor5};
donde valor1 equivale a 0, valor2 equivale a 1, valor3 equivale a 2 y as sucesivamente.
Ejemplo:
enum motors {up, down, left, right}; // up equivale a 0, down equivale a 1, etc
Prof. Luis Llave
enum colors {black, red, green=4, blue, white=8}; /* black equivale a 0, red equivale 1,
green equivale 4, blue equivale 5 */
enum dias {lun=1, mar, mie, jue, vie, sab, dom} dia_a; // declaracin de variable dia_a, de tipo dias
Ejemplos:
res = a+b // almacenar en res la suma de a con b
res = a-b // almacenar en res la resta de a menos b
res = a*b // almacenar en res la multiplicacin de a con b
res = a/b // almacenar en res la divisin de a entre b
res = a%b // almacenar en res el residuo de la divisin de a entre b
res += 3 // equivale a res = res+3
res -= 3 // equivale a res = res-3
res *= 3 // equivale a res = res*3
res /= 3 // equivale a res = res/3
res %= 3 // equivale a res = res%3
res++ // equivale a res = res+1, se efecta de ltimo, si hay otras expresiones en la instruccin
++res // equivale a res = res+1, se efecta de primero, si hay otras expresiones en la instruccin
res-- // equivale a res = res-1, se efecta de ltimo, si hay otras expresiones en la instruccin
--res // equivale a res = res-1, se efecta de primero, si hay otras expresiones en la instruccin
res = a & b // almacenar en res el resultado de efectuar la operacin and (bit a bit) con a y b
res = a | b // almacenar en res el resultado de efectuar la operacin or (bit a bit) con a y b
res = a ^ b // almacenar en res el resultado de efectuar la operacin xor (bit a bit) con a y b
res = ~a // almacenar en res el resultado de efectuar la operacin not (bit a bit) con a
res = a << 5 // almacenar en res el resultado de efectuar shift left de 5 bits sobre a
res = a << 5 // almacenar en res el resultado de efectuar shift right de 5 bits sobre a
Se utilizan para construir expresiones lgicas (aquellas que generan un valor True o False).
Estructuras de programacin:
if (expresion1)
instruccion1
else
instruccion2
En caso que se deban colocar ms de una instruccin donde dice instruccion1 instruccion2, se deben encerrar las
instrucciones necesarias entre llaves, de la siguiente forma:
La seccin default: se puede omitir. Si se omite la instruccin break, despus de ejecutar las instrucciones asociadas a
un caso, se ejecutarn las instrucciones del siguiente caso que aparece en el cdigo, sin importar que al evaluar
expresion1 no se obtenga el valor correspondiente a ese caso.
while (expresion1)
{
instruccion1;
instruccion2;
...
}
inicio, condicion y modificacion son expresiones utilizadas para indicar la inicializacin de la variable de control del
ciclo, la condicin para ejecutar el ciclo, y cmo se modificar la variable de control del ciclo.
do
{
instruccion1;
instruccion2;
...
} while (expresion1)
Ejemplos:
int v_num[20]; // declaracin de un arreglo de enteros, de 20 elementos
int m_num[10][30]; // declaracin de un arreglo de enteros, de 10 filas y 30 columnas
int v2[5] = {12,66,8,91,17}; // declaracin de array de 5 elementos, con inicializacin
int m1[3][2] = {{5,19},{8,41},{10,3}}; // declaracin de array de 3x2, con inicializacin
Manejo de Bits:
Para algunos casos, como el bit GIE del registro INTCON, puede utilizarse: GIE_bit = 1;
extern sfr sbit sw_inicio; // esto se puede colocar al principio del programa
sbit sw_inicio at PORTA.B3; // esto se puede colocar en el programa principal
// para vincular sw_inicio con RA3
extern sbit paridad; // en caso de usar una variable y no un registro ya definido en el pic, no se coloca sfr
int cantidad; // declaracin de la variable cantidad
sbit paridad at cantidad.B0; // se vincula paridad con el bit 0 de cantidad
Las variables bit tienen las siguientes restricciones: no se pueden inicializar en su declaracin, no pueden formar parte
de estructuras o uniones.
Punteros:
Son variables que contienen la direccin de otra variable, se utiliza principalmente con variables de tipo caracter. Para
referirse al contenido de la variable apuntada por el puntero, se utiliza la sintaxis: *nombre_puntero; para referirse a la
direccin de una variable, se utiliza la sintaxis: &nombre_variable.
Ejemplos:
unsigned int *resultado; // se define el puntero, como uno que apunta a una variable tipo entero sin signo
resultado = № // se le asigna al puntero la direccin de la variable numero
*resultado = 8; /* se cambia a 8 el valor de la variable apuntada por el puntero
si se coloca: resultado = 8; se estara asignado el 8 como la direccin de la variable
a la cual apunta el puntero */
Funciones:
Ejemplo:
int mayor_de_dos(int num1, int num2)
{
int mayor; // declaracin de la variable mayor
if (num1>num2)
mayor = num1;
else
mayor = num2;
return mayor; // indica el valor que retornar la funcin
}
En un programa, se podra utilizar esta funcin mediante la siguiente instruccin: t = mayor_de_dos(15, 20);
Durante todo el cdigo del programa, se encuentran disponibles los nombres de los registros del PIC utilizado, como si
fuesen variables ya definidas.
Cuando se ejecuta la funcin interrupt, el MikroC automticamente agrega las instrucciones necesarias para preservar
los valores de los registros W, STATUS, FSR y PCLATH; esto es vlido solamente en PIC12 y PIC16 (en PIC18 el
comportamiento es distinto).
Una variable o constante tiene validez desde el momento en que se declara y hasta que finaliza el bloque de
instrucciones (funcin) que contiene dicha declaracin. En ese sentido, se habla de variables globales, cuando las
mismas se han declarado fuera de cualquier funcin, por lo cual estn disponibles para cualquiera de ellas; y se habla
de variables locales, cuando las mismas se declaran dentro de una funcin, por lo cual slo tendrn validez dentro de
tal funcin.
Adicionalmente, si una variable local se declara como static, el ltimo valor que se le ha asignado se mantiene hacia la
siguiente ejecucin de la funcin en cuestin, es decir, los valores se preservan entre sucesivas ejecuciones de la
Prof. Luis Llave
funcin.
En MikroC se dispone de algunas rutinas interesantes, como las necesarias para implementar un retardo de K ms K
microseg, las cuales son: Delay_ms(K) y Delay_us(K), respectivamente. Este par de rutinas se pueden colocar en
cualquier parte, sin necesidad de alguna declaracin previa. Por otra parte, existen diferentes rutinas que facilitan al
gunas operaciones y el manejo de los recursos del PIC, como conversiones entre distintos tipos de datos, el uso del
convertidor ADC, el uso del mdulo para PWM, el uso del mdulo de comunicacin serial, etc. Cada tipo de rutina
pertenece a una librera, las cuales pueden habilitarse mediante el Library Manager de MikroC (men View).
// definiciones globales
const masc = 0b00001111;
extern sfr sbit sw_leer;
extern sfr sbit sw_fin;
sbit sw_leer at PORTA.B5; // asociar al pin RA5
sbit sw_limpiar at PORTA.B6; // asociar al pin RA6