-         

Ergebnis 1 bis 5 von 5

Thema: for Schleife unterbrechen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.08.2007
    Beiträge
    5

    for Schleife unterbrechen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Leute,

    ich bin Anfänger auf dem Mokricontrollergebiet. Ich habe ein STK500 Board und einen ATMega8 Controller drauf. Ich habe schon einiges hier und in anderen Foren gestöbert und mich bis hier durchgebissen. Jetzt wollte ich mal fragen ob man eine for Schleife unterbrechen kann, oder ob es eine bessere Lösung für mein Problem gibt. Wenn ich nämlich. Wenn ich PD3 drücke, gelange ich ja in die for-Schleife und die LEDs blinken. Jetzt muss ich ja warten bis diese durchlaufen ist, damit ich einen anderen Leuchtzustand hinbekomme.

    Code:
    #include <avr/io.h>
    
    
    #define TAKT 2000000
    
    int main (void)
    
    {
    
          // init Ports...
    	int i,j;
    	
        DDRD = 0xff;		//alle 8 Portpins sind Input
    	PORTD = 0xff; 		//no pull-ups
    
        DDRB = 0x00; 		//alle 8 Portpins sind Output
    	PORTB = 0x00; 		// High-Pegel setzen => STK500 LEDs aus
    
          
    
          while (1)
    
    {
    
          if((PINB & ( 1<<PD1 )) ==0 ) PORTD = 0; 
    
          else if((PINB & ( 1<<PD0 )) == 0 ) PORTD = 0xFF; 
    	  
    	  else if((PINB & ( 1<<PD2 )) == 0 ) PORTD = 0xfb;
    	  
    	  else if((PINB & ( 1<<PD3 )) == 0 ) 
    			for(i=0; i<1000;i++)
    			{
    				for(j=0; j<10000;j++)
    				{
    					if(i%8)
    							PORTD=0xFF;
    					else
    							PORTD=0x00;                
    				};
    
    }
    }
    
    }
    Danke schon mal für die Hilfen.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    eine Schleife kannst Du mit break unterbrechen, es stellt sich natürlich die Frage, wann soll sie unterbrochen werden ?

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Hallo Sunstar,

    man kann bei einer positiven if Abfrage "break;" setzen.

    ZB:

    Code:
    for(i=0; i<10; i++)
             {
                 _delay_ms(10);
    		     if(i==3)
    		     {     
    		         string_senden("Stopp");
    			     break;
                 }
             }
    EDIT:
    Oh, viel zu langsam, wenn man es schonmal schnell testen will ...
    Wieso wird der Code nur immer verschoben?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    29.08.2007
    Beiträge
    5
    Na ich möchte die Schleife ja dann unterbrechen wenn ich einen anderen Taster betätige. Ich versuche es mal mit der break Anweisung.

    Danke schon mal

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja dann bau Dir einen Timer der von mir aus alle 10 mS überläuft.
    In der ISR fragst Du die Pins ab und setzt entsprechend die Ausgänge.
    Gleichzeitig machst Du noch Dein geblinke(wenn PD3 gedrückt wird)
    Die Lösung mit den Schleifen ist irgendwie Käse, weil man nicht genau weiß
    wie lange sie durchlaufen.
    Dann ist die Lösung von Reeper mit der delay Bibliothek besser, aber Timerlösung
    ist die beste.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

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