UControl Tutorial C18 Desde 0

download UControl Tutorial C18 Desde 0

of 29

Transcript of UControl Tutorial C18 Desde 0

  • 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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • Pgina 4 de 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • En lnea

    Micros-Designs[/ur]

    Suky**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 -> ProjectSeleccionamos 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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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**----- ^^ ------**ModeradordsPIC

    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

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 "" 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 > 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.

    2 c = 0x07 00000111 divide 2 veces por 2 (divide por 4)

    ---------------------------------------------------------------------------------------------------------------

    --------------

    Ejemplos de precedencia de los operandos:

    puerto &= ~(1

  • 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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #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**----- ^^ ------**ModeradordsPIC

    Desconectado

    Re: Tutorial MPLAB C18 Desde 0. Respuesta #4 : Mayo 03, 2009, 03:31:02

    Pgina 13 de 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • Sexo: Mensajes: 5434

    Con Qt...

    VariablesUna 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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #include

    #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**----- ^^ ------**ModeradordsPIC

    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

    /* ** 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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • **----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    /* ** Include para realizacion de demoras ** */

    # include

    /* ** 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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    # define (< lista de parametros>)

    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

    # elif defined ( __dsPIC30F__ )

    # include

    # elif defined ( __dsPIC33F__ )

    # include

    # elif defined ( __PIC24H__ )

    # include

    # elif defined ( __PIC24F__ )

    # include

    # 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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #include

    #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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • Hardware:

    Cdigo: (c)

    #include

    #include

    #include

    #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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #include

    #include

    #include //Libreria para conversiones.

    #include

    #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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #include

    #include //Libreria para conversiones.

    #include

    #include

    #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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    .

    .

    .

    Canal0=ReadADC();

    printf("Canal 0 = %u \r", Canal0);

    En lnea

    Micros-Designs[/ur]

    Suky**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...

  • cambios.

    Cdigo: (c)

    #include

    #include

    #include

    #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**----- ^^ ------**ModeradordsPIC

    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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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

    #include

    #include

    #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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://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 29Tutorial MPLAB C18 Desde 0.

    20/08/2014http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-...