- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Integervariable Bitweise abfragen und Ergebnis "durchscrollen"

  1. #1
    Neuer Benutzer Öfters hier Avatar von sunshine
    Registriert seit
    12.06.2006
    Beiträge
    14

    Frage Integervariable Bitweise abfragen und Ergebnis "durchscrollen"

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe eine Integervariable Alarm_high. Jedes Bit dieser Variablen steht für einen Alarm. Wenn mehrere Alarme aktiv sind, möcht ich bei jedem Funktionsaufruf eine andere Alarmnummer zurückbekommen. Im Grunde möchte ich die Alarmvariable "durchscrollen".
    Nur wie mache ich das programmiertechnisch am besten?

    Code:
    static int Alarmstelle = 0
     
     for(i=Alarmstelle; i<16; i++)
     {
         if (Alarm_high & (1 <<  i)) 
         {
          //Ausgabe der Alarmnummer
          Alarmstelle = i+1;
          break;
          }
          if(i=15)
          {
           Alarmstelle = 0;
           }
     }
    So habe ich es mir gedacht, funktioniert aber leider nicht.
    Habt ihr einen anderen Vorschlag?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    wenn das mit dem 1<<i nicht läuft, hätte ich das so in etwa gelöst:
    Code:
    unsigned int maske=1; //das 0.Bit setzen
    for(...)
    {
        if(Alarm_high & maske)
        {
            //Ausgabe der Alarmnummer usw
        }
        maske=maske*2; //links schieben
    }
    Grüße, Bernhard

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
    unsigned int Alarm_high;
    unsigned char alarm(void)
    {
    	static char Alarmstelle = 0;
    	unsigned char temp = 0;
    	
    	temp = Alarmstelle;	// Alarmstelle in Lownipple laden (0 - 15)
    	if(Alarm_high & (1 << Alarmstelle))
    		temp |= 128;		// Bit 7 setzen bedeutet Alarmbit in Alarm_high war gesetzt
    
    	if(Alarmstelle < 15) Alarmstelle++; else Alarmstelle = 0;
    	return(temp);
    }
    Rückgabewert von alarm():
    Bit0-3 = Alarmnummer
    Bit7 = Alarmbit ist gesetzt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    funktioniert aber leider nicht.
    Weil du hiermit "if(i=15)" i den Wert 15 zuweist, und nicht mit 15 vergleichst.
    MfG
    Stefan

  5. #5
    Neuer Benutzer Öfters hier Avatar von sunshine
    Registriert seit
    12.06.2006
    Beiträge
    14
    Dankeschön! (Dummer Fehler) Werd ich heute abend gleich testen!

Ähnliche Themen

  1. Drehzahl abfragen "Dreht", "Dreht nicht"
    Von maker7 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 09.07.2010, 16:05
  2. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 10.06.2008, 23:02
  3. I/O Ports abfragen und mit "Timestamp" versehen
    Von frank-wob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 27.06.2007, 07:22
  4. Bedingung abfragen "von bis dann ...."
    Von sachse im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 01.10.2005, 16:29
  5. "richtiges" abfragen von sensoren
    Von madcyborg im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 31.03.2005, 19:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad