#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 } }