You are on page 1of 29

uControl

Agosto 20, 2014, 04:48:58


Bienvenido
(a),
Visitante.
Por favor,
ingresa o
regstrate.
Perdiste tu
email de
activacin?
Siempre
Ingresar
Ingresar con
nombre de
usuario,
contrasea y
duracin de la
sesin
Buscar
INICIO AYUDA BUSCAR INGRESAR REGISTRARSE
La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entrate de como puedes aprovechar esta oferta haciendo click aqui.
Smate, y ayuda a uControl con tu participacin en esta interesante oportunidad que nos oferece Niple.
uControl > Articulos, circuitos, tutoriales y Revista uControl > Tutoriales, guias y cursos en uControl > Tutorial MPLAB C18 Desde 0.
Pginas: [1] 2 Ir Abajo
anterior prximo
IMPRIMIR
Autor Tema: Tutorial MPLAB C18 Desde 0. (Ledo 126244 veces)
0 Usuarios y 2 Visitantes estn viendo este tema.
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Tutorial MPLAB C18 Desde 0.
: Mayo 03, 2009, 03:13:15
MPLAB C18.
Versin en pdf
Entorno de programacin MPLAB IDE.
Ensamblador, enlazador, gestin de proyectos, depurador y simulador. La interfaz grfica del
usuario MPLAB IDE sirve como un nico entorno para escribir, compilar y depurar cdigo para
aplicaciones embebidas. Permite manejar la mayora de los detalles del compilador,
ensamblador y enlazador, quedando la tarea de escribir y depurar la aplicacin como foco
principal del programador (usuario)
Gratuito, se puede descargar de www.microchip.com
Compilador MPLAB C18
MPLAB C18 es un compilador cruzado que se corre en un PC y produce cdigo que puede ser
ejecutado por la familia de microcontroladores de Microchip PIC18XXXX. Al igual que un
ensamblador, el compilador traduce las declaraciones humanas en unos y ceros para ser
ejecutados por el microcontrolador.
Pgina 1 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Sigue la norma ANSI C, salvo en particularidades de los microcontroladores
Libreras para comunicaciones SPI, I2C, UART, USART, generacin PWM, cadena de caracteres
y funciones matemticas de coma flotante
Maneja nmeros reales de 32 bits (float y double)
Versin demo de 60 das, descargable de www.microchip.com
Indice
Instalacin
Creacin de un proyecto
1 Ejemplo. Control de un led mediante un pulsador. (Definicin de operadores, estructuras, y
control de bits de registros)
2 Ejemplo. Led titilando (Definicin de Variables, librera de Demoras)
3 Ejemplo. Led secuenciales.
4 Ejemplo. Control Display 7 Segmentos (Definicin de Arreglos de variables)
5 Ejemplo. Control de Varios Display de 7 Segmentos por multiplexin (Declaracin y
definicion de funciones)
6 Ejemplo. Control LCD
7 Ejemplo. Conversin analgica/digital.
Manejo de interrupciones.
8 Ejemplo. Comunicacin Serial RS232
Modificacin de una librera, Cambiando el puerto de Control de LCD
Control de Teclado Matricial, Interrupcin por RB4-RB7
Creacin de una librera, DS1302
Reloj/Calendario con DS1302 y LCD, Interrupcin por desbordamiento Timer0
Comunicacin I2C, primer ejemplo Lectura/escritura Aleatorias
Comunicacin I2C, segundo ejemplo Lectura/Escritura secuenciales
Manejo de punteros. Punteros y Arreglos. Punteros y Funciones
Flex_lcd ms utilizacin de printf
Por aqu pueden encontrar un gran aporte de Jukinch, otorgando ejemplos probados de C18
implementados en la Multiboard Pic Trainer 2.
2550gif.gif (4.81 KB - descargado 93546 veces.)
microchip_logo2.gif (2.24 KB - descargado 93825 veces.)
ltima modificacin: Agosto 24, 2012, 06:58:28 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #1 : Mayo 03, 2009, 03:28:27
Instalacin
Se debe bajar directamente desde Microchip, hay disponible una versin gratuita para estudiantes
que es un demo de 60 das. Tambin para poder descargarlo es necesario registrarse.
Una vez descargado ejecutar el instalador MPLAB-C18-Evaluation-v3_30 versin actualmente
Pgina 2 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Con Qt...
disponible.
Para a instalacin seguimos los siguientes pasos:
Pgina 3 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Pgina 4 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #2 : Mayo 03, 2009, 03:29:28
Creacin de un nuevo proyecto.
Project -> New
Nos aparecer una pantalla donde le indicamos el nombre de nuestro proyecto y la carpeta donde
ser guardado.
Pasamos a configurar el dispositivo con el cual trabajaremos: Configure->Select Device
Pgina 5 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Seleccionamos el compilador: Project->Select Lenguaje Toolsuite y nos aseguramos que todas
las direcciones son correctas.
Configuramos los subdirectorios de trabajo: Project->Build options -> Project
Seleccionamos ubicacin de ficheros de declaraciones, bibliotecas y script de enlazado.
Show directories for:
Include Search Path
Library Search Path
Linker-Script Search Path
Pgina 6 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...


Nota: Segn la versin tambin se debe agregar al proyecto el archivo (PIC18F utilizado).lkr
ubicado en MCC18/lkr, sino produce error de compilacin.
Luego vamos a New File y lo guardamos en nuestra carpeta eligiendo extensin .c agregndolo a
nuestro proyecto.
Pgina 7 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Con todo esto configurado ya podemos empezar a desarrollar nuestro cdigo.
ltima modificacin: Agosto 18, 2009, 11:48:55 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #3 : Mayo 03, 2009, 03:30:36
Introduccin al C18:
La idea es ir adquiriendo conceptos a medida que los utilicemos en el desarrollo de los ejemplos, de
esta manera lo que se presenta tericamente lo asociamos inmediatamente con la prctica. Aunque
claro est que el lenguaje es muy amplio y no se pueden hacer ejemplos de cada concepto.
En el desarrollo de este tutorial se utilizar el microcontrolador PIC18F2550, y como en todo
proyecto siempre se debe tener a mano el datasheet de los dispositivos utilizados, para la correcta
interpretacin y aplicacin de las configuraciones realizadas.
Creando el cdigo:
Lo que se presenta aqu es la estructura general de un archivo fuente de C, en donde como primera
medida se incluyen las libreras, coleccin de rutinas, que se van a utilizar en el proyecto. Tenemos
las libreras estndar de Ansi C que incluye rutinas para manejo de cadenas de texto y operaciones
con datos comunes como funciones matemticas, libreras especificas del microcontrolador a utilizar
(p18Fxxxx.h) la cual tiene estructuras de los registros del microcontrolador para control de sus
bits, libreras para control de perifricos del microcontrolador (UART, I2C, SPI, ect) y las libreras
propias creadas por el usuario dedicadas al control de un dispositivo externo o una tarea en comn.
La librera que siempre incluiremos en el archivo principal ser la del PIC a usar:
Cdigo: (c)
#include <p18F2550.h>
Luego viene la configuracin de los fuses del microcontrolador. sea configuracin de oscilador,
watch-dog, Brown-out reset, power-on reset, proteccin del cdigo, etc. Esto depende del
microcontrolador que se utilice:
La sintaxis seria: #pragma config Nombre del fuse=estado.
Para esto es muy til la ayuda que trae C18, recomiendo mirarla:
C:\MCC18\doc\ hlpPIC18ConfigSet
Definicin de variables globales, son las que se utilizaran en el programa principal y funciones del
proyecto.
Cdigo: (c)
int variableA, variableB
Ahora viene el cdigo de nuestro programa:
Cdigo: (c)
main{
}
Pgina 8 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
El proceso de compilacin
El texto fuente es compilado en bloques de cdigo de programa y datos que luego son enlazados
(linked) con otros bloques de cdigo y datos, y colocados en las regiones de memoria del
microcontrolador PIC18XXXX seleccionado. Este proceso se llama generacin (build) y se suele
llevar a cabo muchas veces en el desarrollo de programas en el proceso de probado y depurado.
Tambin tenemos la posibilidad de utilizar make que solo compila los archivos fuentes que han sido
modificados desde la ltima vez agilizando el proceso.
Flujo de la generacin del hex
En la siguiente imagen se tiene un ejemplo de los pasos que lleva un determinado proyecto, donde
tenemos 2 archivos fuentes en c (*.c), 1 archivo en assembler (*.asm) y un archivo precompilado
(*.o).
Los archivos fuentes *.c son compilados por MPLAB C y el archivo *.asm es ensamblado por MPASM
generando los archivos intermedios llamados archivos objetos. Estos archivos junto al *.lkr del
microcontrolador son tomados por el enlazador para generar el *.hex que ser utilizado para la
grabacin en la memoria de programa del microcontrolador. Cabe la posibilidad de agrupar archivos
objetos para crear bibliotecas (*.lib)
El archivo *lkr contiene informacin de la estructura y capacidades del microcontrolador con el cual
se est trabajando, sirve como plantilla para el enlazador para organizar el cdigo de programa y
datos generados en el proceso de compilacin.
Ahora ya tenemos una idea general de como es la estructura de un programa desarrollado en C y
cual es el proceso que sigue en la generacin del *.hex necesario para embeber a nuestro
microcontrolador. Seguiremos con el estudio de las directivas utilizadas en C para el desarrollo de
Pgina 9 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
programas simples y ms adelante encararemos el tema de las librerias, su modificacin, creacin,
ect.
Primer ejemplo, control de leds con un pulsador.
Para este sencillo ejemplo vamos a necesitar definir operadores y estructuras de control:
Operadores:
Aqu definiremos todos los operadores utilizados por C18.-
Operadores de Comparacin:
Estos operadores se encargan de comparar dos condiciones de una expresin:
Operadores aritmticos:
Se utilizan para realizar clculos matemticos:
Operadores lgicos:
Son los encargados de producir resultados lgicos del tipo TRUE o FALSE
Operadores bitwise:
Son para modificar los bits de una variable:
Jukinch, usuario del foro y amigo ha realizado la siguiente contribucin para mayor entendimiento
de los operados bitwise:
El operador AND "&" compara dos bits; si los dos son 1 el resultado es 1, en otro caso el resultado
ser 0.
Ejemplo:
c1 = 0x45 --> 01000101
c2 = 0x71 --> 01110001
---------------------------
c1 & c2 = 0x41 --> 01000001
---------------------------------------------------------------------------------------------------------------
--------------
El operador OR "|" compara dos bits; si cualquiera de los dos bits es 1, entonces el resultado es 1;
en otro caso ser 0. Ejemplo:
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
Pgina 10 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
i1 | i2 = 0x57 --> 01010111
---------------------------------------------------------------------------------------------------------------
--------------
El operador exclusivo (XOR) "^", da por resultado uno cuando los dos operandos tienen distinto
valor.
Cuando los dos operandos son distintos da 1.-
ej: 1 y 0 =1
0 y 1 =1
Cuando los dos operandos son iguales da 0.-
0 y 0 =0
1 y 1 =0
Ejemplo:
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
i1 ^ i2 = 0x14 --> 00010100
---------------------------------------------------------------------------------------------------------------
--------------
El operador de complemento a 1 "~" cambia cada dgito del operando por su opuesto:
Si el bit es 1 se cambia por 0 y viceversa
c = 0x45 --> 01000101
----------------------
~c = 0xBA --> 10111010
---------------------------------------------------------------------------------------------------------------
--------------
Los operadores de desplazamiento a nivel de bit "<<" y ">>" Desplazan a la izquierda o a la
derecha un nmero especificado de bits.
En un desplazamiento a la izquierda los bits que sobran por el lado izquierdo se descartan y se
rellenan los nuevos espacios con ceros. De manera anloga pasa con los desplazamientos a la
derecha. Veamos un ejemplo:
c = 0x1C 00011100
c << 1 c = 0x38 00111000
c >> 2 c = 0x07 00000111
Como en binario se trabaja en base dos cada posicin de desplazamiento implica dividir o
multiplicar por 2
>> divide por 2.
<< multiplica por 2
c = 0x1C 00011100
c << 1 c = 0x38 00111000 multiplica por 2
c >> 2 c = 0x07 00000111 divide 2 veces por 2 (divide por 4)
---------------------------------------------------------------------------------------------------------------
--------------
Ejemplos de precedencia de los operandos:
puerto &= ~(1<<6) primero se desplaza un 1 hacia la izquierda 6 posiciones y luego el operando ~
lo convierte en cero. Es resultado se combina mediante el operando & con el contenido del byte del
puerto. Aplicndose as una mscara que pone en cero el bit 6 dejando pasar los dems bits. De
esta manera se logra un equivalente en assembler de bitclr en la posicin del bit 6.
#define bit_set(bit,puerto) (puerto |= 1<<bit)
#define bit_clr(bit,puerto) (puerto &= ~(1<<bit))
// ejemplo en cdigo
bit_set(0,PORTB); // pone a 1 el bit 0 del puerto B.
Pgina 11 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
bit_clr(0,PORTB); // pone a 0 el bit 0 del puerto B.
---------------------------------------------------------------------------------------------------------------
--------------
Cdigo binario en complemento a dos:
En este sistema, los nmeros positivos se representan reservando el bit ms significativo (que debe
ser cero) para el signo. Para los nmeros negativos, se utiliza un sistema distinto, denominado
complemento a dos, en el que se cambian los bits que seran 0 por 1 y viceversa, y al resultado se
le suma uno.
Este sistema sigue reservando el bit ms significativo para el signo, que sigue siendo 1 en los
negativos. Por ejemplo, la representacin de 33 y -33 sera:
+33 0010 0001
se invierte todo
-33 1101 1110
se le suma 1
+ 0000 0001
resultado
1101 1111 numero -33 en complemento a dos
El hardware necesario para implementar operaciones aritmticas con nmeros representados de
este modo es mucho ms sencillo que el del complemento a uno, por lo que es el sistema ms
ampliamente utilizado.
---------------------------------------------------------------------------------------------------------------
--------------
Muchsimas gracias! Y esto queda abierto a que si tienen ejemplos que ayudan a entender otros
operadores, o estructuras de control, etc., estamos abierto a sus recomendaciones
Estructuras:
Estructura if:
Esta estructura se utiliza para ejecutar instrucciones en forma condicional, de acuerdo con la
evaluacin de la expresin. Seria si una condicin es dada entonces accin.
Cdigo: (c)
if(condicion){
//Accion
}
Estructura if-else
En este caso se agrega la instruccin else. Ahora se evala una condicin original, si es verdadera,
se ejecuta y sino no lo es, se ejecuta el bloque debajo de else.
Cdigo: (c)
if(condicion){
//Accin
else{
//Accion
}
}
Estructura while
Ejecuta un conjunto de instrucciones mientras una condicin sea verdadera. La principal
caracterstica de esta estructura es que, antes de comenzar el bucle, verifica la condicin, por lo
que es posible que el bucle no llegue a ejecutarse.
Cdigo: (c)
while(condicion){
// Sentencias
}
Estructura do-while
Es parecida a un while solo que la condicin se evala al final, por lo que el bucle se ejecutara por lo
menos una vez.
Cdigo: (c)
do {
// Sentencias
} while (condicion);
Estructura For:
Esta estructura se usa para ejecutar un bloque de cdigo cierto nmero de veces. Posee un valor de
inicio, un valor final y un valor de incremento.
Cdigo: (c)
Pgina 12 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

for(valor inicial; valor final; valor de incremento ){


//Sentencias
}
Mas adelante explicaremos la estructura switch.
Accediendo a los bits de un registro:
Para acceder individualmente a los bits de un registro se escribe la siguiente sentencia:
Registrobits.bit
Ejemplo:
Cdigo: (c)
PORTBbits.RB0
Objetivo:Encender 4 leds del puerto B mientras se mantenga accionado el pulsador.
Hardware
Cdigo:
Cdigo: (c)
#include <p18f2550.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
void main(void){
ADCON1=0x0F;//Todos entrada/salida digitales.-
TRISA=0xFF; //Todos como entrada.-
TRISB=0X00; //Todos como salida.-
ltima modificacin: Agosto 24, 2012, 06:49:33 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #4 : Mayo 03, 2009, 03:31:02
Pgina 13 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Sexo:
Mensajes: 5434
Con Qt...
Variables
Una variable es la asignacin de un nombre a un espacio determinado en la memoria, en donde el
espacio depender del tipo de variable. C18 define los siguientes tipos:
Segn donde estn declaradas, las variables pueden ser globales (declaradas fuera de todo
procedimiento o funcin) o locales (declaradas dentro de un procedimiento o funcin). Las primeras
sern accesibles desde todo el cdigo fuente y las segundas slo en la funcin donde estn
definidas.
Modificadores de las variables:
Mplab C18 utiliza los modificadores establecidos por ANSI:
Auto: las variables declaradas fuera de las funciones son globales y las declaradas en la funcin son
locales. Si no se inicializan toman un valor indefinido.
Static: variables locales a una funcin, y sirven para retener el valor de la variable en llamadas
sucesivas a dicha funcin. El espacio de memoria es reservado nicamente para dicha funcin.
Extern: La variable declarada pertenece a otro mdulo, por lo que no es necesario reservar
memoria para ella.
Const: El contenido de la variable es fijo.
Volatile: el contenido de la variable puede cambiar. En interrupciones se debe utilizar este tipo de
datos. En la siguiente pgina pueden encontrar una explicacin muy acertada de sus uso.
(Informacin otorgado por Jukinch)
Register: La variable declarada debe guardarse en un registro del microcontrolador.
Overlay: Se aplica a variables locales, hace un almacenamiento esttico y las inicializa en cada
llamada.
Ram: La variable se sita en la memoria de datos.
Rom: la variable se sita en la memoria del programa. Por lo general se usa para cadena de
caracteres contantes.
Especificacin de banco de memoria de datos:
Far: La variable puede ir en cualquier banco.
Near: la variable tiene que estar en el banco de acceso.
Para las variables guardadas en la memoria de programa el acceso no es tan inmediato, sino que se
realiza mediante las operaciones Table Reads o Table Writes, los cuales mueven los datos entre el
espacio de memoria RAM y de Programa. Cuando se trabaja una variable NEAR solo se necesita 16-
bits para su direccionamiento, en cambio para una variable FAR (Que puede estar en cualquier
banco) se necesitan 24-bits para su direcionamiento. Esto ltimo se podr observas ms claro
cuando se trate punteros.
Demoras:
Para utilizar demoras en nuestro cdigo debemos incluir la librera delays.h. En ella tenemos 4
funciones:
Delay10TCYx(i) -> 10.Tcy.i
Delay100TCYx(i) -> 100.Tcy.i
Delay1KTCYx(i) -> 1000.Tcy.i
Delay10KTCYx(i) -> 10000.Tcy.i
Donde i puede tomar valores entre 0 y 255.
Ejemplo: Leds titilando.
Pgina 14 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

Objetivo: Hacer titilar 10 veces los leds del puerto B al accionar el pulsador.
Hardware: Idem anterior.
Cdigo:
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
unsigned char i; //Para contar 0 titilaciones.-
void main(void){
ADCON1=0x0F;//Todos entrada/salida digitales.-
ltima modificacin: Agosto 24, 2012, 06:51:51 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #5 : Mayo 03, 2009, 03:31:20
Ejemplo:Leds secuenciales:
Objetivo: Al accionar el pulsador se realiza una secuencia de leds como se muestra en la figura:
Hardware: Idem anterior.
Cdigo:
Cdigo: (c)
/* ** Archivo con definicion de registros y bits del microcontrolador elegido */
#include <p18f2550.h>
/* ** Configuracion de los Fuses del microcontrolador ** */
#pragma config FOSC = XT_XT, FCMEN = OFF, IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON, BOR = OFF, BORV = 0, WDT = OFF, WDTPS = 32768
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = OFF
#pragma config STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTRB = OFF
unsigned char k; /* Variable utilizada para realizar efecto */
void main(void){
ADCON1=0x0F; /* Todos entradas/salidas digitales */
TRISA=0xFF; /* Todos como entradas */
TRISB=0xF0; /* Nible bajo como salida */
LATB=0x00; /* Todos los leds apagados */
ltima modificacin: Septiembre 12, 2010, 05:18:03 por Suky
En lnea
Micros-Designs[/ur]
Suky
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #6 : Mayo 03, 2009, 03:31:45
Pgina 15 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Operaciones con variables de distintos tipos.
Cuando se evala una expresin donde las variables implicadas son de distinto tipos ocurre una
conversin, ya sea implcita o explicita, para llevar ambos operando a un tipo comn de datos con el
que se pueda operar.
En la asignacin de una expresin de un tipo dado a una variable de un tipo menor, la conversin se
hace en forma automtica. Por ejemplo:
Cdigo:
unsigned char k,
float p =30.56;
k=p; // k= 30, p = 30.56. -
Aqu tenemos miembros de diferentes tamaos, por lo que habra un truncamiento del valor entero
a la cantidad de bit que lo permita k. Si la parte entera excede el rango establecido por la variable
k, el resultado no tendra lgica aparente.
Reglas de promocin automtica de expresiones
Estas reglas dicen que el compilador hara estrictamente las conversiones necesarias para llevar
todos los operandos al tipo del mayor. El resultado de evaluar una operacin aritmtica seria del
tipo del mayor de sus operandos, en el sentido del tamao en bits de cada objeto de datos. Por
ejemplo:
Cdigo:
unsigned char k;
float p;
k =5;
p=k /2; // p = 2
Por ms que indiquemos que el resultado es float el truncamiento se produce en la evaluacin del
miembro derecho de la asignacin.
Para resolver este problema existen dos formas, una es escribir cualquiera de las contantes en
Punto flotante o utilizar el operador cast.
Cdigo:
p= k /2.0; // p = 2.5
p =(( float )k /2); // p = 2.5
No es til implementar el cast de la siguiente forma:
Cdigo:
p= ( float )(k /2); // p = 2
Dado que primero se realiza la operacin, y al resultado se aplica el cast, lo que no soluciona el
problema.-
Arreglos de Variables
Nos permite trabajar con un conjunto de variables y acceder a cada una mediante un ndice nico
que lo identifica. Todos los valores que contienen deben ser del mismo tipo.
Cdigo: (c)
unsigned char Vector[5];
unsigned char Matriz[3][3];
.
.
.
//Cargamos vector y matriz:
Vector[0]=156;
Matriz[1][1]=85;
//Leemos vector y matriz:
PORTB=Vector[4];
PORTB=Matriz[0][0];
En la declaracin se pueden pre cargar los valores de la siguiente forma:
Cdigo: (c)
unsigned char Vector[3]={1,0x10,0b000101}
unsigned char Matriz[3][3]={1,2,3,4,5,6,7,8,9,10};
Ejemplo: Control de display 7 segmentos
Objetivo: utilizaremos dos pulsadores para incrementar, decrementar o resetear un conteo de 0 a
9 que mostraremos en un display de 7 segmentos de ctodo comn. El reseteo ser el caso en el
que se presiona los dos pulsadores a la vez.
Pgina 16 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

Hardware:
Cdigo:
Cdigo: (c)
/* ** Archivo con definicion de registros y bits del microcontrolador elegido */
# include <p18f2550 .h>
/* ** Include para realizacion de demoras ** */
# include <delays .h>
/* ** Configuracion de los Fuses del microcontrolador ** */
# pragma config FOSC =XT_XT , FCMEN =OFF , IESO =OFF , CPUDIV = OSC1_PLL2
# pragma config PWRT =ON , BOR =OFF , BORV =0, WDT =OFF , WDTPS =32768
# pragma config MCLRE =ON , LPT1OSC =OFF , PBADEN =OFF , CCP2MX = OFF
# pragma config STVREN =OFF , LVP =OFF , XINST =OFF , DEBUG = OFF
# pragma config CP0 =OFF , CP1 =OFF , CP2 =OFF , CPB =OFF , CPD = OFF
# pragma config WRT0 =OFF , WRT1 =OFF , WRT2 = OFF
# pragma config WRTB =OFF , WRTC =OFF , WRTD = OFF
# pragma config EBTR0 =OFF , EBTR1 =OFF , EBTR2 =OFF , EBTRB = OFF
unsigned char i; // Para controlar vizualizacion del Display .-
const rom unsigned char Display7Seg [10]={0 x3F , 0x06 , 0x5B , 0x4F , 0x66 ,
0x6D , 0x7D , 0x07 , 0xFF , 0 x6F };
void main ( void ){
ADCON1 =0 x0F ;// Todos entrada / salida digitales .-
TRISA =0 xFF ; // Todos como entrada .-
ltima modificacin: Septiembre 12, 2010, 05:22:12 por Suky
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #7 : Mayo 03, 2009, 03:32:02
La manera ms elegante de construir nuestro programa es dividir la tarea a ejecutar en varias
tareas ms simples, de modo de facilitar el desarrollo y el entendimiento de la estructura del
mismo. Otra ventaja que conlleva este proceder es la reutilizacin de estos mdulos creados con
anterioridad, adems de facilitar el trabajo en equipo.
Declaracin y definicin de funciones.
La declaracin da a conocer la funcin al compilador, a partir de su declaracin ya se pueden
realizar invocaciones a las mismas. La declaracin de una funcin se conoce tambin como prototipo
de la funcin. En el prototipo de una funcin se tienen que especificar los parmetros de la funcin,
as como el tipo de dato que devuelve.
La definicin estar en algn otro punto del programa, aqu se especifican las instrucciones que
forman parte de la misma y que se utilizan para llevar a cabo la tarea especfica de la funcin.
Sintaxis:
Cdigo: (c)
Pgina 17 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Tipo de retorno Nombre(Lista de parmetros)
Tipo de retorno : Representa el tipo del valor que devuelve la funcin. Si no devuelve ninguno de
debe colocar void.
Nombre: indica el nombre que se le da a la funcin, se recomienda que este relacionado con la
tarea que llevar a cabo.
Lista de parmetros : se enlista el tipo de dato y el nombre de cada parmetro. En caso de utilizar
parmetros se deja el parntesis vacio o se incluye la palabra void.
Ejemplos:
Cdigo: (c)
unsigned int Suma(unsigned char A, unsigned char B){
unsigned int C;
C=A+B;
return(C);
}
Cdigo: (c)
void Envio_Data(unsigned char A){
//Sentencia.-
}
Cdigo: (c)
void Muestras(void){
//Sentencias.-
}
Dos formas de incluir una funcin en nuestro cdigo:
Realizando la declaracin en el encabezado y despus la definicin en cualquier sector del
programa.
Ejemplo:
Cdigo: (c)
// Declaracion de la funcion
void Funcion(void);
.
.
.
void main(void){
.
.
.
// Llamo a la funcin.
Funcion();
}
//Defincion de la funcion. (Puede estar en cualquier lugar del programa)
void Funcion(void){
// Sentencias
}
Otra forma es no realizar la declaracin de la funcin y realizar directamente la definicin, pero esta
tiene que estar si o si antes de su invocacin.
Ejemplo:
Cdigo: (c)
.
.
.
//Defincion de la funcion
void Funcion(void){
// Sentencias
}
void main(void){
.
.
.
// Llamo a la funcin.
Funcion();
}
Preprocesador y Directivas del preprocesador
El preprocesador es el primer programa que se llama en la etapa de compilacin de un programa. El
preprocesador tiene su propio lenguaje y sus directivas inician con un #.
Las ventajas que tiene usar el preprocesador son:
*los programas son ms fciles de desarrollar,
*son ms fciles de leer,
*son ms fciles de modificar
*se pueden generalizar para varias arquitecturas o compiladores.
Pgina 18 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Directivas
#include
Esta directiva ya la hemos utilizado, se emplea para incluir archivos y suele darse al principio de los
programas, porque en general se desea que su efecto alcance a todo el archivo fuente. Por esta
razon los archivos preparados para ser incluidos se denominan headers o archivos de cabecera. En
ellos se declaran las funciones que se implementan y definiciones para su implementacion.
#define
La directiva define tiene dos tipos de uso, como si fuera un objecto o como si fuera una funcion. Las
que se asemejan a funciones toman parametros mientras que las que se asemejan a objetos no.
Su formato es el siguiente:
# define <identificador > <lista de tokens a reemplazar >
# define <identificador >(< lista de parametros>)<lista de tokens a reemplazar >
Ejemplos:
Cdigo:
# define e 2.718258
# define LED LATBbits . LATB5
# define Suma_10 (x) {x +=10;}
# define Suma_Divide_10 (x) {(x +=10);( x /=10);}
Nota: Se debe tener cuidado en la implementacion de esta directiva. Las que se asemejan a
funciones, pueden tomar parametros pero no se comportan como una funcion, ya que el
preprocesador reemplaza un texto por otro, lo cual conlleva al mayor uso de la memoria de
programa.
#ifdef, #ifndef, #else, #elif y #endif
Estas directivas son utilizadas para realizar compilaciones condicionadas, por ejemplo para hacer
una libreria generalizada para varias arquitecturas, para ser utilizada por varios compiladores o
simplemente para seleccionar el nivel de uso de cierto proyecto.
Ejemplos:
Cdigo:
#if defined ( __18CXX )
# include <p18cxxx .h>
# elif defined ( __dsPIC30F__ )
# include <p30fxxxx .h>
# elif defined ( __dsPIC33F__ )
# include <p33Fxxxx .h>
# elif defined ( __PIC24H__ )
# include <p24Hxxxx .h>
# elif defined ( __PIC24F__ )
# include <p24Fxxxx .h>
# endif
Cdigo:
// Para no utilizar pin RW sacar comentario a la siguiente linea .-
//# define __LCD_DONT_WAIT
# define LCD_PIN_E LATCbits . LATC4
# define LCD_PIN_RS LATCbits . LATC2
# ifndef __LCD_DONT_WAIT
# define LCD_PIN_RW LATCbits . LATC3
# endif
Cdigo:
// CCS
#if defined ( __PCH__ )
char Buffer [512];
# endif
// C18
# ifdef __18CXX
# pragma udata =0 x100
unsigned char Buffer [512];
# pragma udata
# endif
// C30 y C32
#if defined ( __C30__ ) || defined ( __PIC32MX__ )
unsigned char __attribute__ (( aligned (4))) Buffer [512];
# endif
Ejemplo:Control de varios display, multiplexin de la seal.
Pgina 19 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

Objetivo: Controlar 3 display de 7 segmentos visualizando el conteo automtico de 0 a 999.


Hardware:
Cdigo:
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
#define UnidadBit LATAbits.RA0
#define DecenaBit LATAbits.RA1
#define CentenaBit LATAbits.RA2
ltima modificacin: Septiembre 12, 2010, 05:27:13 por Suky
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #8 : Mayo 03, 2009, 08:56:32
Control de un LCD.
Para realizar el control de un LCD necesitamos usar la librera xlcd.h ubicada en C:\MCC18\h\. Esta
librera es para un LCD con controlador Hitachi HD44780 o compatible, de 8 o 4 bits. El usuario
debe proveer 3 delay para el correcto funcionamiento, DelayPORXLCD() de 15ms, DelayXLCD() de
5ms y DelayFor18TCY() de 18 Tcy.
En este caso no vamos a modificar la librera, pues lo vamos a controlar con el puerto B, pero en el
caso de que se modifique sugiero siempre respaldarla con una copia de seguridad.
Ejemplo: Control de un LCD.
Objetivo: Vamos a escribir un simple mensaje en un LCD. Se crearon 2 funciones adicionales para
un mejor el control, la primeria seria el envo de comandos, con una previa espera de disponibilidad
del LCD y la segunda es para controlar la posicin del cursor en el LCD.
Pgina 20 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

Hardware:
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#include <xlcd.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
void DelayFor18TCY(void){
Delay10TCYx(2);
ltima modificacin: Septiembre 06, 2009, 05:11:30 por Suky
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #9 : Mayo 09, 2009, 11:08:08
Conversin analgica digital.
Para realizar una conversin analgica digital usaremos la librera adc.h, esta tiene las funciones
necesarias para las configuraciones y lectura de dicho mdulo. En el caso de las configuraciones,
este posee varias y depende del microcontrolador que se use. Para saber en que grupo cae nuestro
microcontrolador abrimos pconfig.h, y por ejemplo para el PIC18F2550 es ADC_V5.
NOTA: Para ms informacin respecto al mdulo y sus configuraciones ver tema, Mdulo de
conversin ADC
Funciones (para ADC_V5) :
OpenADC (PARAM_SCLASS unsigned char , PARAM_SCLASS unsigned char , PARAM_SCLASS
Pgina 21 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
unsigned char );
Con ella se configure el reloj, el formato, tensin de referencia, puerto y canal de la conversin.
Para saber que colocar en cada parmetro abrir AD Converter ubicado en C:\MCC18
\doc\periph-lib.
Ejemplos:
Cdigo: (c)
OpenADC(ADC_FOSC_32 & ADC_8_TAD & ADC_RIGHT_JUST, ADC_REF_VDD_VSS & ADC_INT_OFF, ADC_5ANA);
#define USE_OR_MASKS
OpenADC(ADC_FOSC_RC | ADC_20_TAD| ADC_LEFT_JUST, ADC_REF_VREFPLUS_VREFMINUS | ADC_INT_OFF, ADC_15ANA);
CloseADC(); Desactiva el conversor y la interrupcin.
SetChanADC(Unsigned char); Selecciona el canal que se va a utilizar.
ConvertADC(); Comienza la conversin.
SelChanConvADC(Unsigned char); Selecciona canal y comienza conversin.
BusyADC(); Comprueba si la conversin a finalizado.
Int ReadADC(); devuelve la lectura del canal analgico seleccionado.
Ejemplo: Uso del mdulo de conversin analgico/digital.
Objetivo: Tomar lectura de 2 valores analgicos y mostrarlo en un LCD. Al accionar un pulsador,
leeremos los 2 canales analgicos y los mostraremos en el LCD durante 1 segundo.
Hardware:
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#include <xlcd.h>
#include <stdlib.h> //Libreria para conversiones.
#include <adc.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
Pgina 22 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

ltima modificacin: Noviembre 01, 2009, 01:05:32 por Suky
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #10 : Mayo 09, 2009, 11:08:32
Interrupciones:
Los dispositivos PIC18 tienen mltiples fuentes de interrupcin y una caracterstica de prioridad de
interrupcin, que permite a cada fuente de interrupcin asignarle un nivel de prioridad bajo o alto.
Cuando ocurre un evento de alta prioridad interrumpir cualquier interrupcin de baja prioridad que
pueda estar en progreso. El vector de alta prioridad esta en 0x08 y el vector de baja prioridad en
0x18.
Cada fuente de interrupcin tiene tres bits para controlar su operacin. Las funciones de estos bits
son:
Bit bandera, que indica si un evento de interrupcin ha ocurrido
Bit Enable, que admiten la ejecucin de la interrupcin, permitiendo la bifurcacin del
programa a la direccin del vector de interrupcin
Bit de prioridad, para seleccionar prioridad baja o alta
La caracterstica de prioridad de interrupciones de activa seteando el bit IPEN. Si este no esta
seteado, no existen prioridades y las interrupciones se comportan como en los dispositivos de
gama media (PIC16) y todas las interrupciones se bifurcan al vector 0x08.
Rutinas de atencin a interrupciones:
La directiva #pragma interruplow nombre define rutina de servicio de interrupcin (ISR) de baja
prioridad y #pragma interrup nombre se alta prioridad.
Las ISR son funciones como cualquier otra, pero con las restricciones de que:
No devuelven ni aceptan parmetros
No se puede invocar desde otros puntos del programa
Las variables globales que utilice se den declarar como volatile
El C18 no sita automticamente las ISR en las posiciones de los vectores de interrupcin, por lo
que el usuario debe ubicarlas. Ejemplos:
Cdigo: (c)
#pragma interruplow ISRBajaPrioridad
Void ISRBajaPrioridad(void){
// Tratamiento de interrupcin.-
}
// Creamos una nueva seccin de cdigo a partir de la direccin 0x18.-
#pragma code PrioridadBaja = 0x18
Void VectorBajaPrioridad(void){
// Instruccion insertada en la direccin 0x18.-
_asm goto ISRBajaPrioridad _endasm
}
#pragma code // Cerramos seccin.-
Cdigo: (c)
#pragma interruplow ISRAltaPrioridad
Void ISRAltaPrioridad(void){
// Tratamiento de interrupcin.-
}
// Creamos una nueva seccin de cdigo a partir de la direccin 0x08.-
#pragma code PrioridadAlta = 0x08
Void VectorAltaPrioridad(void){
// Instruccion insertada en la direccin 0x08.-
_asm goto ISRAltaPrioridad _endasm
}
#pragma code // Cerramos seccin.-
Pgina 23 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
ltima modificacin: Mayo 10, 2009, 10:12:43 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #11 : Mayo 10, 2009, 10:15:27
Mdulo USART.
Para la comunicacin serial es necesario agregar la librera usart.h. Con esta librera se configura el
modo de transmisin y recepcin serie de nuestro microcontrolador.
Funciones:
OpenUSART( unsigned char config, unsigned int spbrg);
Esta funcin corresponde a la configuracin del mdulo USART, asincrnica o sincrnica, 8 bits o 9
bits, velocidad de comunicacin, etc.
Para saber que colocar en cada parmetro abrir USART ubicado en C:\MCC18\doc\periph-lib.
CloseUSART(); Deshabilita mdulo USART.
putcUSART(char data); Enva un byte.
putsUSART(char *buffer); Envia un string desde la memoria de datos.
putrsUSART(const rom char *data); Envia un string desde la memoria de programa.
BusyUSART(); Determina si se ha transmitido el dato.
DataRdyUSART(); Indica si ha llegado un dato para ser ledo.
getcUSART(); Lee un byte.
getsUSART(char *buffer, Unsigned char len); Lee un string.
Estructura switch.
Esta estructura permite ejecutar un bloque de cdigo de acuerdo con el valor de una variable o
expresin:
Cdigo: (c)
switch(Variable){
Case 0x01:
//Sentencias.-
Break;
Case 0x02:
//Sentencias.-
Break;
Default:
//Sentencias.-
Break;
}
Default: ejecuta esa sentencia si no es ninguna de las anteriores.
Ejemplo: Comunicacin Serial RS232.
Objetivo: La PC enviara comando de lectura de los canales analgicos. Si se recibe un 0x61 ('a'),
enviar canal 0, si se recibe un 0x62 ('b') enviar canal 1 y si se recibe un 0x63 ('c') enviar los 2
canales analgicos.
Hardware:
Pgina 24 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

La adaptacin de tensiones se puede hacer con el MAX232 o con transistores, como se desee.-
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#include <stdlib.h> //Libreria para conversiones.
#include <adc.h>
#include <usart.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
ltima modificacin: Octubre 11, 2009, 05:08:17 por Suky En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0.
Respuesta #12 : Mayo 10, 2009, 10:20:27
Otra manera de enviar los datos, usando printf:
Para utilizar esta funcin debemos agregar la librera stdio.h.
printf (const rom char *fmt, ...);
Nos permite especificar el formato en que queremos mostrar datos por pantalla
Parmetros: Cadena de formato (cmo se visualizan los datos) y Lista de valores (datos que se
visualizan)
Formatos:
%d Entero con signo.
%u Entero sin signo.
%x Hexadecimal minscula.
%X Hexadecimal mayscula.
Ejemplo:
Cdigo: (c)
printf(Hola);
Data=10;
printf(El valor es : %u,Data);
Ejemplo de formatos:
Especificacin Valor=0x12 Valor=0xFE
%03u 018 254
%u 18 254
%2u 18 *
%d 18 -2
%x 12 fe
Pgina 25 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
%X 12 FE
Entonces se puede reemplazar:
Cdigo: (c)
Canal0=ReadADC();
putrsUSART("Canal 0 = ");
itoa(Canal0, String);
putsUSART(String);
putrsUSART("\r");
Por:
Cdigo: (c)
#include <stdio.h>
.
.
.
Canal0=ReadADC();
printf("Canal 0 = %u \r", Canal0);
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0. Modificar Librerias
Respuesta #13 : Mayo 10, 2009, 10:21:07
Modificar las libreras.
Se explicar como realizar cambios en las libreras de C18, para que estas se hagan efectivas a la
hora de compilar. En este caso cambiaremos el Puerto para el control del LCD.
Primero que nada se debe realizar una copia de seguridad, en este caso de xlcd.h. Luego en nuestro
programa debemos incluir a xlcd.h (MCC18\h) en Header Files, y los archivos fuentes de esta
librera (MCC18\src\pmc_common\XLCD), excepto putrxlcd, quedando de la siguiente manera:
De esta manera se recompilan los archivos, creando sus respectivos archivos objetos (*.o)
necesarios para el linkeo (MPLink) y as efectivizar los cambios realizados en las rutinas.
Vamos a modificar xlcd.h para que utilizar el Puerto C para controlar el LCD y los 4 bits ms
significativos del mismo (UPPER) para enviar los datos al LCD de la siguiente manera:
Cdigo: (c)
#define UPPER
/* DATA_PORT defines the port to which the LCD data lines are connected */
#define DATA_PORT PORTC
#define TRIS_DATA_PORT TRISC
/* CTRL_PORT defines the port where the control lines are connected.
* These are just samples, change to match your application.
*/
#define RW_PIN LATCbits.LATC1 /* PORT for RW */
#define TRIS_RW TRISCbits.TRISC1 /* TRIS for RW */
#define RS_PIN LATCbits.LATC0 /* PORT for RS */
#define TRIS_RS TRISCbits.TRISC0 /* TRIS for RS */
#define E_PIN LATCbits.LATC2 /* PORT for D */
#define TRIS_E TRISCbits.TRISC2 /* TRIS for E */
Cualquier cambio, por mnimo que sea se debe hacer de esta manera para que se efectivicen los
Pgina 26 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

cambios.
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#include <xlcd.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
void DelayFor18TCY(void){
ltima modificacin: Septiembre 06, 2009, 05:12:47 por Suky
En lnea
Micros-Designs[/ur]
Suky
**----- ^^ ------**
Moderador
dsPIC
Desconectado
Sexo:
Mensajes: 5434
Con Qt...
Re: Tutorial MPLAB C18 Desde 0. Teclado Matricial
Respuesta #14 : Junio 26, 2009, 01:18:15
Interrupcin por cambio de estado RB4-RB7. Control de Teclado Matricial.
Objetivo: Al accionar una tecla del Teclado Matricial, esta se mostrar en la pantalla LCD.
Aprovecharemos la interrupcin por cambio de estado RB4-RB7 para detectar que se ha presionado
una tecla. Dentro de la interrupcin se realiza el rastreo fino para determinar cual ha sido.
Hardware:
Pgina 27 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

Nota: En Proteus se deben agregar las resistencias pull-up a RB4-RB7 para simular correctamente.
Adems se usa el puerto C para el control del LCD, y para que la compilacin sea correcta se deben
seguir los pasos del mensaje anterior.
Cdigo: (c)
#include <p18f2550.h>
#include <delays.h>
#include <xlcd.h>
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON
unsigned char Tecla;
unsigned char Teclas[17]={'7','8','9','/',
'4','5','6','x',
ltima modificacin: Septiembre 06, 2009, 05:13:17 por Suky
En lnea
Micros-Designs[/ur]
La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entrate de como puedes aprovechar esta oferta haciendo click aqui.
Smate, y ayuda a uControl con tu participacin en esta interesante oportunidad que nos oferece Niple.
Pginas: [1] 2 Ir Arriba
IMPRIMIR
anterior prximo
Pgina 28 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...
Ir a: => Tutoriales, guias y cursos en uControl ir
Powered by SMF 1.1.19 | SMF 2011, Simple Machines
SMFAds for Free Forums
Pgina creada en 0.094 segundos con 26 consultas. (Pretty URLs adds 0.016s, 3q)
Pgina 29 de 29 Tutorial MPLAB C18 Desde 0.
20/08/2014 http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...