Я новичок в микроконтроллерах и dsPIC33 и хочу написать простую программу, прежде чем приступить к чему-то более сложному (хотя это уже кажется мне очень сложным...). Я пытаюсь переключить светодиод на моей плате разработки dsPICDEM MCLV-2, используя мой микроконтроллер dsPIC33EP256MC506. Прямо сейчас мой код просто заставляет светодиод гореть без нажатия кнопки. Может ли кто-нибудь помочь мне найти, что не так с моим кодом?
Если кто-нибудь знает какие-либо примеры программ, которые я могу запускать и играть с ними, это также будет очень полезно!
Компилятор: MPLAB X
Программист/Отладчик: REAL ICE
Микроконтроллер: dsPIC33EP256MC506
Совет разработчиков: dsPICDEM MCLV-2
main.c
int16_t main(void)
{
/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize IO ports and peripherals */
InitApp();
TRISDbits.TRISD6 = 0; //set LED as output
TRISGbits.TRISG6 = 1; //set Button as input, port unknown
while(1)
{
if(S3 == 0) { //start/stop switch
uint32_t N = 21000000;
while(S3) //debounce
while(N--);
LATDbits.LATD6 = 1; //make LED pin high
}
}
}
пользователь.ч
#define S3 !PORTGbits.RG6 //S2 button
#define S2 !PORTGbits.RG7 //S3 button
#define D2 !PORTDbits.RD6 //D2 LED
#define DEBOUNCE_DELAY 30 //push button debounce delay, expressed in millisecond
/******************************************************************************/
/* User Function Prototypes */
/******************************************************************************/
/* TODO User level functions prototypes (i.e. InitApp) go here */
void InitApp(void); /* I/O and Peripheral Initialization */
Попробуйте это. убедитесь, что S3 является правильным определением макроса для кнопки, которую вы нажимаете, похоже, вы неправильно прокомментировали ее в коде.
while(1)
{
uint32_t N = 21000000;
uint32_t T = 21000000;
if(S3 == 1) {
LATDbits.LATD6 = 1; //make LED pin high
while(N--);
}
else { LATDbits.LATD6 = 0; //make LED pin low
while(T--); }
}
Это не будет проверять устранение дребезга кнопок (если это работает, вы можете попробовать устранение дребезга). В некоторых микроконтроллерах есть отдельные биты, связанные с выводами GPIO, которые могут проверять устранение дребезга кнопок. Если он доступен, просто включите его для проверки устранения дребезга.
ккрамбо
LATDbits.LATD6 = 1;
он имеет отступ, не делает его частьюwhile(S3)
цикла. Возможно, у вас должны быть фигурные скобки вокруг этих линий с отступом.Питер Беннет