b. 임베디드/dsPIC33CK128MP506

[dsPIC33CK] Button 사용 예제

로봇쟁이 2021. 9. 30. 15:44

이번에는 버튼을 사용합니다. 

뭐 간단하게 GPIO를 이용하는거라 간단합니다 ^^

 

다음은 샘플 코드입니다.

 

#include <xc.h>
#include <libpic30.h>

void OSC_Init(void) {
/*
    FRC = 8MHz (Internal Clock)
//  FVCO  = Fin X (M / N1)
    FPLLO = Fin X (M / (N1 X N2 X N3))
    FOSC  = FPLLO / 2
    FCY   = (FPLLO / 2) / 2 (DOZE disabled)
 */
    CLKDIVbits.FRCDIV = 0;          // FRC divided by 1 (Default)
    CLKDIVbits.PLLPRE = 1;          // N1 = 1
    PLLFBDbits.PLLFBDIV = 100;      // M = 100
    PLLDIVbits.POST1DIV = 2;        // N2 = 2
    PLLDIVbits.POST2DIV = 1;        // N3 = 1
    
    // Init Clock Switch to FRC with PLL (NOSC = 0b001)
    __builtin_write_OSCCONH(0x01);
    __builtin_write_OSCCONL(OSCCON | 0x01);
    while(OSCCONbits.OSWEN != 0);
}


void PORT_Init(void) {
    ANSELAbits.ANSELA0 = 0;
    ANSELAbits.ANSELA1 = 0;
    ANSELAbits.ANSELA2 = 0;
    TRISAbits.TRISA0  = INPUT;
    TRISAbits.TRISA1  = INPUT;
    TRISAbits.TRISA2  = INPUT;
    
    TRISDbits.TRISD4  = OUTPUT;
    TRISCbits.TRISC11 = OUTPUT;
}

void App_Init(void) {
    OSC_Init();
    PORT_Init();
}

void App_Run(void) {
    App_Init();
    
    while(1) {
        if(!PORTAbits.RA0) {
            LATDbits.LATD4 = ~LATDbits.LATD4;
            __delay_ms(100);
        }
        else if(!PORTAbits.RA1) {
            LATCbits.LATC11 = ~LATCbits.LATC11;
            __delay_ms(100);
        }
        else if(!PORTAbits.RA2) {
            LATDbits.LATD4 = ~LATDbits.LATD4;
            LATCbits.LATC11 = ~LATCbits.LATC11;
            __delay_ms(100);
        }
    }
}

 

간단한 예제지만 당연하게도 데이터시트와 사용된 레지스터를 비교하시면서 스터디하면 됩니다. 

 

반응형