Sunteți pe pagina 1din 2

CODIGO 1

#include <16F876A.h> /// Se incluye la libreria del pic a utilizar


#fuses XT,NOWDT /// Directivas permite definer la palabra de configuracin para programar un PIC.
#use delay( clock = 4000000 ) // Se utiliza un Reloj de 4 MHz, en la simulacin real es un cristal de cuarzo en los pines 9 y 10.
#BYTE TRISB = 0x86 // Byte es la directiva que se utiliza y donde se define la variable TRISB en la posicin 86h de la
memoria RAM.
#BYTE PORTB = 0x06 // se define la variable PORTB en la posicin 06h.
#BYTE OPTION_REG = 0x81 //se define OPTION_REG en la posicin 81h.
void main() { // funcion principal de arranque
bit_clear(OPTION_REG,7); // Habilitacin Pull-up, pone el valor de 7 en OPTION_REG
bit_set(TRISB,0); //B0 como entrada, pone el valor 0 en TRIB
bit_clear(TRISB,1); // B1 como salida, pone 1 a TRISB
bit_clear(PORTB,1); // apaga LED, pone 1 al PORTB.
while (1) { // condicion para repetir sentencias, se expresa cuando es verdadera de no ser asi se sale.
if (bit_test(portb,0) == 1 ) //Si RB0 es 1 apaga el LED
bit_clear(portb,1); // asigna a portb el valor de 1
else
bit_set(portb,1); //Si RB0=0 enciende el LED, saca un 1 por la terminal RB0.

}
}
CODIGO 2
#include <16F876A.h> // directivas de pic
#fuses XT,NOWDT
#use delay(clock= 4000000)// Reloj de 4MHz
#include <lcd.c> // incluye la libreria del lcd en el codigo para que C lo respete
#use standard_io(C) // el compilador asejura de que la terminal sean de salida mediante la modificacion del TRIS
correspondiente en este caso aqui es C y abajo es A.
#use standard_io(A)

enum funciones {med,cal,ini}; //Asigna un valor a cada elemento
//med=0, cal=1 e ini=2

void medir(void){ //Funcin de medir
//algoritmo correspondiente
output_toggle(pin_C0);// complementa el valor del pin
}

void calibrar(void){ //Funcin de calibrar
//algoritmo correspondiente
output_toggle(pin_C1);// complementa el valor del pin
}

void inicializar(void){ //Funcin de inicializar
//algoritmo correspondiente
output_toggle(pin_C2);// complementa el valor del pin

}


void run_func(int numfunc){ //Asignacin de la funcin a realizar
//viene dada por la variable "item"
switch(numfunc) { // es un caso particular de decision multiple
case med: // nombre del case
medir(); / / invoca la funcin medir
break; // permite salir del switch
case cal:
calibrar();/ / invoca la funcin calibrar
break; // permite salir del switch
case ini:
inicializar(); / / invoca la funcin inicializar
break; // permite salir del switch
}
}

void main() { // funcin principal
char item; //Variables de funciones
char n_menus = 3; //Nmero de funciones

// bit_set(TRISA,0); // pone el valor 0 en TRISA
lcd_init(); // es la primera funcin del lcd que debe ser llamada. borra el LCD y lo configure en el format de 4 bits.

while (1) {
if (input(PIN_A0) == 1) { //Detecta botn de seleccin
item++; //Si pulsa aumenta la variable
delay_ms(300); //Para evitar rebotes
lcd_putc('\f'); // Escribe la variable en la posicion correspondiente, en este caso se limpia el lcd.
}

if (item > (n_menus-1)) { //Si la variable supera el nmero de...
item = 0; } //funciones la inicializa

switch (item) {
case 0:
lcd_gotoxy(1,1); //indica la posicion de acceso al lcd., en este caso indica la posicion de la pirmera linea.
printf(lcd_putc, "MEDIR");//Escribe en el lcd MEDIR
lcd_gotoxy(1,1);
break; //permite salir del switch, es lo mismo es para los otros casos
case 1:
printf(lcd_putc, "CALIBRAR");
lcd_gotoxy(1,1);
break;
case 2:
printf(lcd_putc, "INICIALIZAR");
lcd_gotoxy(1,1);
break;
}
if (input(PIN_A1) == 1) //Si se pulsa el botn de seleccin
{delay_ms(200); // evita renotes
run_func(item);} //se llama a la funcin correspondiente
}
}

S-ar putea să vă placă și