# INPUT OUTPUT (DDRx Register) To configure a pin as INPUT or OUTPUT, we use DDRx register. - DDRx bit = 1 → OUTPUT - DDRx bit = 0 → INPUT --- ## Problem Using direct assignment: DDRB = 0b00000001; → PB0 = OUTPUT → PB1–PB7 = INPUT This is not good because: - it overwrites all bits - existing configuration is lost --- ## Correct approach (safe and professional) ### Set PB0 as OUTPUT DDRB |= (1 << PB0); Explanation: Assume DDRB = 11111110 (1 << PB0) = 00000001 11111110 00000001 (OR) -------- 11111111 → Only PB0 becomes OUTPUT → other pins unchanged --- ### Set PB0 as INPUT DDRB &= ~(1 << PB0); Explanation: Assume DDRB = 11111111 (1 << PB0) = 00000001 ~(1 << PB0) = 11111110 11111111 11111110 (AND) -------- 11111110 → PB0 becomes INPUT → other pins unchanged --- ## Final - OUTPUT → DDRx |= (1 << Px) - INPUT → DDRx &= ~(1 << Px) This method: - does not disturb other pins - is scalable - is standard embedded practice # PORTx and PINx (Output and Input Control) 0xFF can be used in hex for 8-bit and 0b11111111 in binary. Both represent all bits = 1. --- ## OUTPUT (Using PORTx) After setting direction using DDRx, we use PORTx to control output. Set pin HIGH: PORTB |= (1<