Halllo Leute, ich fange grad bei absolut null an.

Ich hab hier einen kleinen Code:

Code:
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>
uint8_t i;
 
int main(void)
	{
		DDRC |= (1<<DDC0);
		DDRB &= ~(1<<DDB0);
		PORTC |= (1<<PORTC0);
	while(1) {	
		if(PINB & ~(1<<PINB0) == 1) 
		{
	
		PORTC |= (1<<PORTC0);
		_delay_ms(1000);

		PORTC &= ~(1<<PORTC0);
    	_delay_ms(1000);
		
		PORTC |= (1<<PORTC0);
		_delay_ms(1000);
		}
	}
   return 0;
 }
leider macht der nicht was ich will, Irgendwie scheint die IF bedingung nicht zu funktionieren. an PB0 ist ein Taster angeschlossen der von VTG also 5V bei betätigung auf GND geht. Aber die schleife bedingung wird nicht abgearbeitet. Schreibe ich es anders rum das es bei logisch 1 abgearbeitet wird klappt es. Ich hab wohl nen fetten denkfehler drin.
Brauch ich die While schleife eigentlich? Was ist der unterscheid zwischen return 0 und return 1?


Vielen Dank!