domingo, 15 de diciembre de 2013

MICROCONTROLADORES PIC 27: SWITCH EN EL XC8

           En este caso se comenta como se utiliza la instrucción switch para trabajar con sentencias múltiples en el PIC, con la ayuda del programa XC8; lo que se quiere es realizar diferentes efectos en los leds conectados al puerto b del PIC16F84A.

           El vídeo es el siguiente:



       El esquema del circuito utilizado es el que sigue:


         A continuación el diagrama de flujo utilizado para realizar el programa:


      Aquí el programa codificado en el XC8:

#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void) {

    int cuenta=0;
    int efecto=0;
    TRISB=0;
    PORTB=0;

    __delay_ms(200);

    while(1){
        cuenta=cuenta+1;

        switch(cuenta){                              //Aquí el programa empieza a verificar los valores que
            case 10:                                     //va tomando la variable cuenta
                efecto=1;          
                PORTB=0b00000001;
                break;
            case 80:
                efecto=2;
                PORTB=0b01010101;
                break;
            case 160:
                efecto=3;
                PORTB=0b10000000;
                break;
            case 240:
                efecto=4;
                break;
        }

        switch(efecto){                            //Aquí el programa verifica los valores de la variable 
            case 1:                                    //efecto para que de acuerdo a ello el pic nos de diferentes
                __delay_ms(100);                //salidas por el puerto b, lo cual veremos a traves de leds
                PORTB<<=1;
                if(PORTB==0)
                    PORTB=0b00000001;
                break;
            case 2:
                __delay_ms(100);
                PORTB=~PORTB;
                break;
            case 3:
                __delay_ms(100);
                PORTB>>=1;
                if(PORTB==0)
                    PORTB=0b10000000;
                break;
            default:
                PORTB=0b10000001;
                __delay_ms(100);
                PORTB=0b01000010;
                __delay_ms(100);
                PORTB=0b00100100;
                __delay_ms(100);
                PORTB=0b00011000;
                __delay_ms(100);
                PORTB=0b00100100;
                __delay_ms(100);
                PORTB=0b01000010;
                __delay_ms(100);
        }

        if(cuenta==255)                                 //el programa está siempre verificando el valor de la
            cuenta=0;                                       //variable cuenta.
    }

    return;
}


         He aquí una imagen del circuito en plena operación:

Atte Benny.

No hay comentarios:

Publicar un comentario