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);
}
}
}
간단한 예제지만 당연하게도 데이터시트와 사용된 레지스터를 비교하시면서 스터디하면 됩니다.
반응형