#7 Instrukcje sterujące: pętla while

Instrukcje zapisane w pętli while wykonują się dopóki spełniony jest warunek (tzn. warunek jest różny od zera). Jej konstrukcję możemy zapisać w następujący sposób:

while(warunek){  /*instrukcja lub blok instrukcji do wykonania w pętli*/ }

Pętla będzie wykonywać się w nieskończoność, jeśli jako warunek wpiszemy liczbę 1.

Napiszemy program, w którym co 1 sekundę miga dioda LED (połączona do nóżki PD0, a z drugiej strony do masy), po wciśnięciu łącznika dioda wyłączy się (łącznik połączony z nóżką PB0 i masą):

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

int main(){

DDRB &=~0x01;

DDRD |=0x01;

PORTB |=0x01;

while(PINB & 0x01)

{PORTD |=0x01;

_delay_ms(1000);

PORTD &=~0x01;

_delay_ms(1000);}}

Warunek pętli while to  (logiczne 0 lub 1) odczytane przez rejestr PINB z portu B. Jako, że interesuje mnie jedynie ostatni bit odpowiadający nóżce PB0 operacja iloczynu bitowego pozwoli mi wyzerować ewentualne logiczne 1, które może pojawić się na innych bitach. W ten sposób uzależnię działanie pętli jedynie od stanu logicznego na nóżce PB0.