Naja,
1) bei dir wird der gesamte code nur einmal durchlaufen, dann erst wieder nach µC-reset.
Das übliche Muster für µC-Programme ist sowas wie:
Code:
int main()
{
init, setup etc.
//-----------------------------------------------------------------------
// (der folgende Code wird dauernd durchlaufen, bis dass der Tod eintritt)
//-----------------------------------------------------------------------
while (1)
{
// check GPIO
// mach dieses oder jenes
}
return 0; // reiner formalismus, denn da kommt er eh nie hin
}
2)
da ich deine C-Library nicht kenne, muss ich vermuten, dass diese funktion
Code:
read_A0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
ausschliesslich Pin_0 aus dem register liest, also steht danach drin (vermutlich)
1= nicht gedrückt
0=gedrückt
und das kannst du abfragen entweder mit
Code:
if (read_A0 == 0x01) // Pin0=Bit0=1 --> nicht gedrückt
if (read_A0 == 0x00) // Pin0=Bit0=0 --> gedrückt
bei nur einem Bit ist das gleichbedeutend mit
if (read_A0) // nicht gedrückt ( read_A0 <> 0 )
if (!read_A0) // gedrückt ( read_A0 == 0 )
würde bei deinem Code dann insgesamt heissen:
Code:
int main (void)
{
uint8_t read_A0 = 0;
SystemInit();
GPIO_Setup();
while (1)
{
read_A0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if (!read_A0) // = 0 => gedrückt
{
GPIOC->BSRR = GPIO_Pin_8; // LED On
delayLoop();
GPIOC->BRR = GPIO_Pin_8; // LED Off
delayLoop();
GPIOC->BSRR = GPIO_Pin_9; // LED On
delayLoop();
GPIOC->BRR = GPIO_Pin_9; // LED Off
delayLoop();
}
} // while() schleife wiederholen
return 0;
}
verwirrt ?
Lesezeichen