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