Translate

viernes, 19 de diciembre de 2008

Analicemos el programa "hola mundo"

Bien,ya que hicimos nuestro primer programa vamos a describirlo linea a linea para que sea mas claro lo que hace cada comando.

Primero tenemos esta sentencia #include < p18f4520.h > Estamos haciendo uso de el operador de preprocesado (#) seguido de la palabra reservada include, con esto estamos indicando al compilador que durante la compilación incluya el archivo p18f4520.h, este archivo contiene las direcciones de todos los registros del PIC, así como sus bits individuales y su configuración. Es por esta razón que podemos usar directamente los nombres de los registros como PORTB, TRISB, ADCON0, etc. En dado caso que no insertaramos la librería del PIC, tendriamos que definir cada registro del PIC con el operador de preprocesado (#) y la palabra reservada define seguida del nombre y dirección del registro a usar.

Posteriormente tenemos las siguientes sentencias:

#pragma config OSC = HS, FCMEN = OFF, IESO = OFF 
#pragma config PWRT = OFF,BOREN = OFF,BORV = 0 
#pragma config WDT = OFF, WDTPS = 32768 
#pragma config MCLRE = ON, LPT1OSC = OFF,PBADEN = OFF, CCP2MX = PORTC

Como veran hacemos uso del operador  de preprocesado(#) seguido de la palabra reservada pragma y config  estas sentencias las usamos para configurar parte de configH y configL que es el registro del PIC donde declaramos el tipo de oscilador y otras funciones especiales, estos regisrtros varian dependiendo cada PIC, para este ejemplo configuramos un Oscilador externo en High Speed, con la sentecia OSC=HS, en las funciones especiales como Power on reset, brown out reset Bor, FCMEN IESO LPT, etc. Las declaramos como off,  es decir, que no las vamnos a usar. La función de Memory clear la activamos para poder hacer un reset fisico, MCLRE=ON.

Posteriormente tenemos la sentencia: unsigned int i; Con la cual estamos declarando una variable global, que pdemos usar entodo nuestro programa, de tipo entero sin signo que va de 0 a 65535.

Seguido de la declaracion de la variable i tenemos la siguiente sentecia:

void main(void)

Con la cual estamos dando inicio al programa, seguido del inicio del programa tenemos:

  TRISB = 0;          //  declaramos el puerto B como salida
 ADCON0 = 0;       //   sin AD canal 0 por defecto
 ADCON1 = 15;     //   Todas las salidas digitales sin Vrefs
 ADCON2 = 0;      //   8 bits no importa TAD ni FOSC
 PORTB = 0;        //  PORTB apagado

Estas sentencias fueron explicadas anteriormente y su comentario es muy claro, solo que hay que resaltar algo, PORTB en realidad es un alias de LATB en los PIC18F's los puertos son conocidos como LATx y escribir PORTx es una alias, asi que es igual escribir PORTB=0; que LATB=0;

Finalmente construimos el programa con:

    while(1)                                     // creamos un ciclo infinito
   {                                                    // abrimos el cilco infinito
     PORTB=255;                        // encendemos el Todo el PORTB
    for(i=0; i==500; i++);      // creamos una especie de pausa
    PORTB=0;                            // apagamos el puerto para hacer blink
   }                                                 // cerramos el ciclo infinito
 }                                                  // cerramos la funcion main
  

De igual manera es muy transparante esa porcion de código,  solo que me gustaria hacer énfasis en la parte del for, en este caso se uso la variable i dentro del for para ir de 0 a 500 como no tiene sentencias internas la estructuta for se le pone al final la terminación (;), ahora bien esta función lo que hace es un pausa muy arcaica es decir no es propiamente una pausa, si no un intervalo de ejecucion entre lo que termina de llegar i a 500 y la siguiente instrucción. Para usar una pausa formalmente necesitamos añadir una libreria adicional.

No hay comentarios:

Publicar un comentario