introduccion a la programacion en c_1

Upload: fitomaster

Post on 04-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/30/2019 Introduccion a La Programacion en C_1

    1/16

    1.-Introduccion

    El Hi-Tech para PIC es un compiladorprofesional estndar que fue por una compaamuy bien establecida como un proveedor dedesarrollo de sistemas de herramientas. Hi techsuministra compiladores en C para un granrango de microcontroladores en el Mercado:PIC16,18,24,32 y dsPIC(Procesadores de sealdigital) como tambin los microcontroladoresde Motorola (freescale) 68000,ARM,derivadosdel 8051, Textas Instruments, DispositivosMSP430, y otros productos.

    Las caractersticas notables son las siguientes:

    1.-ANSI C Completa caracterstica y portable.2.-Fiable3.-Multiple niveles de optimizaciones en C4.-Un optimizacin por ensamblador5.-Relocaliza las variables locales para disminuirel uso de la RAM.6.-Una buena librera en C.

    La optimizacin lleva a la reduccin del tamaodel cdigo final para remover cdigosredundantes y modifica la versin delensamblador para reducir el nmero deinstrucciones para la mnima.

    La ms obvia desventaja de este compilador esque solo las funciones de la librera estndarpara conversin de datos, manejo de lamemoria, operaciones matemticas y bsicasE/S estn proporcionadas.

    Esto asume que el usuario fabricara las librerasde manejo de los perifricos del

    microcontrolador.

    Diagrama de secuencia de inicializacin de compilacin

    1.1.- Estructura de un Programa

    Los procesadores PIC18 tienen algunas

    localidades que contienen la configuracin de

    los bits llamadosfuses estos bits pueden ser

    establecidos usando el macro de configuracin.

    El macro tiene el formato:

    __CONFIG(n,X);

    Donde n es el nmero de registro de

    configuracin yXes el valor que es para

    establecer la configuracin de palabra. El macro

    Hi-Tech Compiler forIntroduccin a la

    programacin en C

    PIC18

  • 7/30/2019 Introduccion a La Programacion en C_1

    2/16

    Introduccion a la programacion en HI-TECH 2011

    2 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    es definido en hay que asegurar incluir

    esta librera cada vez que iniciemos un proyecto

    con un micro.

    Ejemplo

    Despus podemos definir la velocidad de reloj:

    1.2 Tipo de Datos

    El compilador Hi tech C PRO para la familia

    PIC18 soporta tipo de datos bsicos con 1, 2,3 y

    4 byte.

    1.3 Constantes

    El formato de constantes especifica su radix. Hi

    tech C PRO para la familia PIC18 soporta el

    Radiz estndar ANSI especifica cual establece

    constantes binarios en cdigo C.

    En la tabla siguiente se observa como son

    definidas las constantes.

    Formato radix para Constantes

    1.4 Tipos de Variables

    Las variables pueden ser localizadas como uso

    interno en cada funcin o si se desea ser una

    variable visible en todas las funciones.

    Por ejemplo:

    La funcin puede usar la variable value ya que

    es una variable global, mientras:

    La funcin puede usar la variable value ya que

    es una variable interna y solo ella puede usarla,

    mientras si existiera otra funcin no puede

    tomar el valor de la variable porque no existira

    en ella.

    #include __CONFIG(1, RC);__CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN);__CONFIG(4, STVRDIS);

    #define _XTAL_FREQ 4000000

    //Oscilador Interno de 4MHZ

    int value;

    Void funcin(void){

    Value=100;

    }

    Void funcin(void){

    Int value;

    Value=100;

    }

  • 7/30/2019 Introduccion a La Programacion en C_1

    3/16

    Introduccion a la programacion en HI-TECH 2011

    3 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    1.5 Operadores

    Las asignaciones son de gran ayuda para reducir memoria de programa del microcontrolador ya que

    simplifica la manera de ser una operacin. Por ejemplo:

    var=var+3000;

    07DB 0870 MOVF 0x70, W

    07DC 3EB8 ADDLW 0xb8

    07DD 00F0 MOVWF 0x70

    07DE 0871 MOVF 0x71, W

    07DF 1803 BTFSC 0x3, 0

    07E0 3E01 ADDLW 0x1

    07E1 3E0B ADDLW 0xb

    07E2 00F1 MOVWF 0x71

    var+=3000;

    07DD 30B8 MOVLW 0xb8

    07DE 07F0 ADDWF 0x70, F

    07DF 1803 BTFSC 0x3, 0

    07E0 0AF1 INCF 0x71, F

    07E1 300B MOVLW 0xb

    07E2 07F1 ADDWF 0x71, F

  • 7/30/2019 Introduccion a La Programacion en C_1

    4/16

    Introduccion a la programacion en HI-TECH 2011

    4 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Las operaciones aritmticas son las que estn en la tabla siguiente:

    + Suma- Resta

    * Multiplicacin/ Divisin

    % Modulo, Resto de una divisin entera

    -- Decremento

    ++ Incremento

    sizeof Determina el tamao en bytes de unoperando

    Ejemplo:Var=var2+var3; //suma

    Unsigned char var[8];

    Var2=sizeof(var); //var2=8 ya que es el tamao del arreglo

    Las relaciones sirven para hacer la comparacin de una variable con otro donde al cumplir cierta

    relacin conlleve a una accin.

    < Menor que

    > Mayor que>= Mayor o igual que

  • 7/30/2019 Introduccion a La Programacion en C_1

    5/16

    Introduccion a la programacion en HI-TECH 2011

    5 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Las operaciones lgicas son usadas para realizar operaciones de comparacin entre varios elementos:

    ! NOT&& AND

    || OR

    Ejemplo:

    If(var==100 && var2==2000);

    Las operaciones de bits sirven para separar ciertos bits donde se desean solo tener como comparacin.

    ~ Complemento en 1

    & AND

    ^ OR exclusiva

    | OR>> Desplaza a Derecha

  • 7/30/2019 Introduccion a La Programacion en C_1

    6/16

    Introduccion a la programacion en HI-TECH 2011

    6 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Ejemplo:

    2.- Declaraciones de Control

    Las declaraciones son usadas para controlar el proceso de ejecucin del programa.

    Hi tech admite las siguientes:

    If-else

    While

    do-while

    for

    switch-case

    return break,continue y goto

    2.1 if-else

    Primero entra a la comparacin de la exprsi es cierta entra a ejecutar la sentencia sent_1 sino entra a la

    sentencia sent_2.

    Nota

    Los elementos que estn encerrados en corchetes [] son opcionales

    void main(void){

    Var=suma(10,20);

    }

    int suma(int x,int y){

    int z;

    z=x+y;

    return z;

    }

    if (expr){

    sent_1;

    }[else

    sent_2;]

  • 7/30/2019 Introduccion a La Programacion en C_1

    7/16

    Introduccion a la programacion en HI-TECH 2011

    7 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Si al evaluar la expresin exprresulta falsa entonces entrara a la comparacin expr2 pero si ninguno de

    los dos son ciertas entonce entrara a ejecutar a sent_3.

    2.2.- switch-case

    Una manera rpida de acceder a una decisin mltiple es usar la sentencia switch-case:

    Var=1;

    Switch(Var){

    case 0://

    if (expr){

    sent_1;

    }[else if(expr2){

    sent_2;

    } else

    sent_3;

    ]

    If(A==10) B=0;

    Else b=1;

    If(A==0){

    If(B==3) A=0;

    }else

    B=0;

  • 7/30/2019 Introduccion a La Programacion en C_1

    8/16

    Introduccion a la programacion en HI-TECH 2011

    8 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    case 1: B=0; break;

    default: //

    }

    Cuando entra a la sentencia switch realiza la bsqueda de valor deseado, en este caso cuando la variable

    Vares igual a 1, entra en el case 1 ya que este caso contiene el valor correspondiente a la variable Var

    pero si no existe ninguna igualdad en los case simplemente entrara a default.

    Nota

    No puede haber dos CASE con la misma constante

    2.3.- for

    En las expresiones delforla inicializacin es una variable a la cual se le asigna un valor inicial con el

    controlar el bucle. La condicin de finalizacin sirve para evaluar ANTES de ejecutar las sentencias si es

    cierta o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale delfor. Por

    ltimo, la expresin de incremento o decremento modifica la variable de control DESPUS de ejecutar el

    bucle.

    switch(A){

    case 0: B=10; break;

    case 1: B=20; break;

    case 2: B=40; break;

    default: break;

    }

  • 7/30/2019 Introduccion a La Programacion en C_1

    9/16

    Introduccion a la programacion en HI-TECH 2011

    9 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    2.4 while/do-while

    While se usa para repetir sentencias.

    while(expresin){

    Sentencias;

    }

    Primero evalua la expresin si es cierta sigue ejecutando la sentencia hasta que la expresin sea

    totalmente falsa.

    Do-While es diferente de while yforya que tiene que entrar por lo menos una vez para ejecutar la

    sentencia y despus evala la expresin.

    do{

    Sentencias;

    }while(expresin);

    for(n=0;n

  • 7/30/2019 Introduccion a La Programacion en C_1

    10/16

    Introduccion a la programacion en HI-TECH 2011

    10 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    return: sirve para devolver datos.

    break: Sirve para salir de bucles como sonfor,while,do-while

    goto: Provoca un salto incondicional

    while(n10){

    b=100;

    a=10;

    }

    do{

    b++;

    printf(b);

    }while(b

  • 7/30/2019 Introduccion a La Programacion en C_1

    11/16

    Introduccion a la programacion en HI-TECH 2011

    11 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    3. Comentarios

    Los comentarios sirven para facilitar la comprensin del programa, y permite que otros usuarios puedanentender el programa fcilmente.

    Utilizamos // para poner comentarios a una lnea especifica

    Usamos /* y*/ para envolver a dentro de ellos un texto que puede ser por default la explicacin

    del programa en general.

    Ejemplo:

    PORTB=0x00; //Apagamos puerto b

    */ Inicializamos el puerto b para que no exista

    El efecto rebote o picos cuando incie el micro*/

    PORTB=0x00;

    Para iniciar en la programacin de microcontroladores de PIC18 se debe de tener el software que nos

    proporciona gratis la compaa Microchip en su web,www.microchip.com, el programa es MPLAB IDE, al

    descargarlo e instalarlo, debemos ahora de descargar el software HI TECH for PIC18 en su pgina

    www.htsoft.comy lo instalamos.

    Al tener todo bien instalado, procedemos abrir el software MPLAB IDE.

    En HITECH compiler forPIC18

  • 7/30/2019 Introduccion a La Programacion en C_1

    12/16

    Introduccion a la programacion en HI-TECH 2011

    12 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Software MPLAB

    Como ya tenemos abierto el software vallamos a crear un proyecto en C, daremos click en nos abrir una venta donde nos saluda, daremos click en aparecer en seguida el paso

    uno a realizar que es seleccionar el

    microcontrolador a programar, en

    este caso vallamos a elegir el

    PIC18F2550, y damos click en

    el paso dos es elegir el

    compilador a usar, buscaremos el

    compilador HI TECH en , y despus el paso tres es buscar lugar donde se debe

    de guardar nuestro proyecto, entonces buscamos donde queramos archivar nuestro proyecto, y damos

    click en , despus nos mencionara que si queremos adherir proyectos existentes al nuestro, y

    finalizaremos.

    Ahora como nuestro lugar del proyecto no contiene ningn archivo, solo

    vallamos a agregar una hoja en blanco en , despus grabamos

    la hoja en blanco en el lugar del proyecto y lo agregamos al espacio de

    trabajo solo dar click derecho en y agregamos la hoja en

    blanco que fue antes guardada, y listo hemos hecho una hoja de trabajo,

    estamos listo para empezar a programar.

    Lo primero que vamos a realizar es el parpadeo de un led, como se va

    utilizar un oscilador interno se debe de configurar correctamente los fuses

    del micro, para que este pueda ser calibrado con el Oscilador Interno.

    El PIC18F2550 contiene un modulo de USB que utiliza algunos bits de

    configuracin para usarlo, en este caso se deben de configurar de una

    forma donde no se utilice estos bits o desactivarlos.

  • 7/30/2019 Introduccion a La Programacion en C_1

    13/16

    Introduccion a la programacion en HI-TECH 2011

    13 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Para la utilizacin de los fueses y de los registros del Micro, se debe de agregar la librera estndar para

    uso de todos los mdulos PIC18.

    #include

    Despus definiremos la frecuencia de trabajo para la utilizacin de__delay_ms para ellos se usa la lnea:

    //////////////////////////////

    //Frecuencia FOSC 8Mhz

    //////////////////////////////

    #define _XTAL_FREQ 8000000

    Ahora ya podemos agregar la funcin principal, void main (void) como vimos en la configuracin de bits

    (fuses) en__CONFIG(1,INTIO) se utilizado un oscilador interno, para el uso de una frecuencia de 8Mhzse debe de inicializar el registro OSCCON.

    /////////////////////////////////////////////////////////////

    //Configuracion para trabajar Con oscilador interno de 8Mhz

    __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);/////////////////////////////////////////////////////////////

    __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);

    __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);

    __CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);

    __CONFIG(5,UNPROTECT);

    __CONFIG(6,UNPROTECT);

    __CONFIG(7,UNPROTECT);

  • 7/30/2019 Introduccion a La Programacion en C_1

    14/16

    Introduccion a la programacion en HI-TECH 2011

    14 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    Solo basta de cargar el valor de los 3 bits IRCF2:IRCF0.

    OSCCON=0x70; //Oscilador a 8MhzNOP();NOP();NOP();NOP();

    Se utiliza los parmetros NOP() para que pueda establecerse la frecuencia, para hacer el parpadeo de un

    led, se debe de configurar correctamente los registros TRIS, como vamos a hacer el parpadeo de un led

    en un solo pin del puerto B, los bits que representa al registro de puerto o cualquier registro solo, es

    poner el nombre del bit en este caso RB0.

    NOTA

    Siempre tenga a la mano la hoja de datos del microcontrolador que se vaya a trabajar para estar

    siempre informado de los registros y de los bits de cada uno de ellos.

    Para un ciclo perpetuo se usa la sentencia while.

    ////////////////////////////////////////////////

    //Configuracin del Puerto B ////

    ////////////////////////////////////////////////

    TRISB=0x00;

    PORTB=0x00;

    /*************************************************/

    while(1){

    RB0=0;

    DELAY1S();

    RB0=1;

    DELAY1S();

    }

    Como se ve se usa una funcin de temporizacin de 1 segundo como el compilador no ofrece libreras

    de retardos tan altos, nosotros debemos de fabricar los, para ellos haremos la funcin DELAY1S().

    Solo basta usar una variable y una sentenciaforpara repetir tiempos.

    //////////////////////////////

    //FUNCION DE 1 SEGUNDO

    //////////////////////////////

    void DELAY1S(void){

    unsigned char time;

    for(time=0;time

  • 7/30/2019 Introduccion a La Programacion en C_1

    15/16

    Introduccion a la programacion en HI-TECH 2011

    15 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    El programa completo se muestra a continuacin:

    ////////////////////////////////////////////////////////

    // BLINK EN PIN PB0

    //Autor: george.manson.69

    //Lugar: Mexico

    //Compilador: HI TECH PIC18 (LITE MODE)

    ////////////////////////////////////////////////////////

    #include

    /////////////////////////////////////////////////////////////

    //Configuracion para trabajar Con oscilador interno de 8Mhz

    __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);

    /////////////////////////////////////////////////////////////

    __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);

    __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);__CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);

    __CONFIG(5,UNPROTECT);

    __CONFIG(6,UNPROTECT);

    __CONFIG(7,UNPROTECT);

    //////////////////////////////

    //Frecuencia FOSC 8Mhz

    //////////////////////////////

    #define _XTAL_FREQ 8000000

    float value;

    //////////////////////////////

    //FUNCION DE 1 SEGUNDO

    //////////////////////////////void DELAY1S(void){

    unsigned char time;

    for(time=0;time

  • 7/30/2019 Introduccion a La Programacion en C_1

    16/16

    Introduccion a la programacion en HI-TECH 2011

    16 Introduccin a la programacin en C en Hi tech Compiler for PIC18

    /////////////////////////////////////////////////

    /*************************************************/

    ////////////////////////////////////////////////

    //Configuracion del Puerto B ////

    ////////////////////////////////////////////////

    TRISB=0x00;

    PORTB=0x00;

    /*************************************************/

    while(1){

    RB0=0;

    DELAY1S();

    RB0=1;

    DELAY1S();

    }

    }