Forum: Mikrocontroller und Digitale Elektronik IO-Port abfragen


von paul (Gast)


Lesenswert?

morgen,
ich bin Einsteiger in der Programmierung vom AVR-Mikrocontroller mit 
C-Sprache.
Ist es möglich die verschiedene Pin eines Port in einer for-Schleife 
abzufragen? Ich will die Zustände des Portpins wissen und dann mit neue 
Werte setzen.
for(int i= 0; i <8; i++){
    if ( PINC & (1<<PINC[i]) ) {
     /* tu was */
    }

   }
Auf alle Hilfe wäre ich dankbar

von Karl H. (kbuchegg)


Lesenswert?

paul schrieb:

> abzufragen? Ich will die Zustände des Portpins wissen und dann mit neue
> Werte setzen.
> for(int i= 0; i <8; i++){
>     if ( PINC & (1<<PINC[i]) ) {

Fast.
Mittels PINC kriegst du alle 8 Bit des Ports.
Aus diesen 8 Bit klamüserst du dir mit dem & das dich interessierende 
heruas. Dazu brauchst du eine Maske in der alle Bits 0 sind, bis auf das 
eine Bit, das dich interessiert. Das muss 1 sein


   uint8_t Value = PINC;
   for( uint8_t i = 0; i < 8; ++i )
     if( Value & ( 1 << i ) ) {
       /* tu was */

http://www.mikrocontroller.net/articles/Bitmanipulation

von Peter (Gast)


Lesenswert?

> ( 1 << i )

Das ist aber auf den Atmels sehr langsam, weil der µC dafür kein 
passeneden Befehlt kennt.


uint8_t Value = PINC;
for( uint8_t i = 0; i < 8; ++i )
   if( Value & 1 ) ) {
     /* tu was */
   }
   Value =>>1;
}

von Sumynona (Gast)


Lesenswert?

Ich hätt noch im Angebot:
for(i = 1; i; i << 1)
if(value & i)
/* tu was */

von Sumynona (Gast)


Lesenswert?

Edit:
for(i = 1; i ; i <<= 1)

muss es natürlich heißen

von Georg (Gast)


Lesenswert?

Hi,

kann mir jemand sagen wie ich diese Abfrage für einen 8051 machen kann?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.