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.
Dodaj komentarz