Nadie está mordiendo, así que lo tomaré. Sin embargo, este concepto está documentado bastante a fondo en línea. Además, leer la hoja de datos del ATmega8 en el futuro le ayudará a comprender en gran medida el MCU en general. Digikey es un gran recurso para hojas de datos, fácilmente encontré el de ATmega8 aquí:
Hoja de datos de ATmega8
Use el registro PINx para leer los pines del puerto "x". DDRx establece la dirección del pin (se lee 0, se emite 1).
Por ejemplo, para leer el pin PA5, configuración con DDRA:
DDRA &= 0xDF; //Mask 0xDF onto DDRA if you don't want to screw up the rest of the bits
//0xDF = 0b11011111
Aquí hay algunas técnicas, pero la PINA es de donde quieres leer. Si tengo un resistor pullup conectado a mi PA5, entonces LOW si el botón presiona (o cualquiera que sea su aplicación)
if(0x00 == (PINA & (1 << PA5))){
/*Pin LOW, execute code*/
}
Básicamente eres ANDing PINA con 0x20. Si se presiona el botón, PINA será: 0bXX0XXXXX (X para algunos bits porque no importa lo que sean), por lo que puede ver que PA5 es 0. Este ANDed con 0x20 hace 0x00, por lo tanto, la verificación.