Bird
Raised Fist0
Embedded Cprogramming~15 mins

Configuring pin as input or output in Embedded C - Try It Yourself

Choose your learning style10 modes available
Configuring Pin as Input or Output
📖 Scenario: You are working on a simple embedded system where you need to control an LED and read a button state. To do this, you must configure a microcontroller pin as either input or output.
🎯 Goal: Learn how to configure a microcontroller pin as input or output using C code.
📋 What You'll Learn
Create a variable representing the pin configuration register
Define a constant for the pin number
Write code to set the pin as output
Write code to set the pin as input
Print the pin configuration register value
💡 Why This Matters
🌍 Real World
Microcontrollers use pin configuration registers to control hardware pins for sensors, LEDs, buttons, and communication.
💼 Career
Embedded software engineers must know how to configure pins correctly to interface with hardware devices.
Progress0 / 4 steps
1
Create pin configuration register and pin number
Create an unsigned int variable called PIN_CONFIG and set it to 0. Then create a constant int called PIN_NUMBER and set it to 3.
Embedded C
Hint

Use unsigned int for the register and const int for the pin number.

2
Define output mode mask
Create a constant unsigned int called OUTPUT_MODE and set it to 1 << PIN_NUMBER.
Embedded C
Hint

Use bit shifting to create a mask for the pin.

3
Set pin as output and then as input
Set PIN_CONFIG to output mode by using PIN_CONFIG |= OUTPUT_MODE;. Then set PIN_CONFIG to input mode by using PIN_CONFIG &= ~OUTPUT_MODE;.
Embedded C
Hint

Use bitwise OR to set the bit and bitwise AND with NOT to clear the bit.

4
Print the final pin configuration
Use printf to print the value of PIN_CONFIG as an unsigned integer with the format "%u\n".
Embedded C
Hint

Use printf("%u\n", PIN_CONFIG); inside main().

Practice

(1/5)
1. Which register is used in embedded C to configure a microcontroller pin as input or output?
easy
A. PORT (Data Register)
B. TIMER Register
C. PIN (Input Register)
D. DDR (Data Direction Register)

Solution

  1. Step 1: Understand pin configuration registers

    The DDR register controls whether a pin is input or output by setting bits to 0 or 1.
  2. Step 2: Identify the correct register for direction

    PORT controls output values, PIN reads input values, TIMER is unrelated to pin direction.
  3. Final Answer:

    DDR (Data Direction Register) -> Option D
  4. Quick Check:

    DDR sets pin direction [OK]
Hint: Remember DDR sets direction: 1=output, 0=input [OK]
Common Mistakes:
  • Confusing PORT with DDR
  • Using PIN register to set direction
  • Thinking TIMER controls pin mode
2. Which of the following lines correctly sets pin 3 of PORTB as output in embedded C?
easy
A. DDRB |= (1 << 3);
B. DDRB &= ~(1 << 3);
C. PORTB |= (1 << 3);
D. PINB |= (1 << 3);

Solution

  1. Step 1: Understand setting pin as output

    To set a pin as output, set its bit in DDR register to 1 using bitwise OR.
  2. Step 2: Analyze each option

    DDRB |= (1 << 3); uses DDRB |= (1 << 3) which sets bit 3 to 1 correctly. DDRB &= ~(1 << 3); clears bit 3 (input). Options C and D affect PORTB and PINB, not direction.
  3. Final Answer:

    DDRB |= (1 << 3); -> Option A
  4. Quick Check:

    Use |= with DDR to set output [OK]
Hint: Use |= with DDR to set output bit [OK]
Common Mistakes:
  • Using &= ~ instead of |= to set output
  • Modifying PORT or PIN instead of DDR
  • Shifting wrong bit position
3. What is the effect of the following code snippet?
DDRC |= (1 << 2);  // Line 1
DDRC &= ~(1 << 2); // Line 2
medium
A. Pin 2 of PORTC is set as output then input
B. Pin 2 of PORTC remains output
C. Pin 2 of PORTC remains input
D. Syntax error in code

Solution

  1. Step 1: Analyze Line 1

    DDRC |= (1 << 2) sets bit 2 to 1, configuring pin 2 as output.
  2. Step 2: Analyze Line 2

    DDRC &= ~(1 << 2) clears bit 2 to 0, configuring pin 2 as input.
  3. Final Answer:

    Pin 2 of PORTC is set as output then input -> Option A
  4. Quick Check:

    Set then clear bit changes pin direction [OK]
Hint: |= sets output, &=~ clears to input [OK]
Common Mistakes:
  • Thinking both lines set output
  • Ignoring second line effect
  • Confusing PORTC with DDRC
4. Identify the error in this code that tries to set pin 5 of PORTD as input:
DDRD |= (0 << 5);
medium
A. DDRD cannot be modified directly
B. Bit shift is incorrect, should be (1 << 5)
C. Should use &= ~ instead of |= to set input
D. No error, code is correct

Solution

  1. Step 1: Understand setting pin as input

    To set a pin as input, clear its bit in DDR register using &= ~ (bitwise AND with NOT).
  2. Step 2: Analyze the code

    DDRD |= (0 << 5) does nothing because (0 << 5) is 0; it does not clear bit 5. Correct way is DDRD &= ~(1 << 5).
  3. Final Answer:

    Should use &= ~ instead of |= to set input -> Option C
  4. Quick Check:

    Use &= ~ to clear bit for input [OK]
Hint: Use &= ~ to clear bit for input, not |= [OK]
Common Mistakes:
  • Using |= with 0 does not clear bit
  • Confusing bitwise OR and AND
  • Not using bitwise NOT (~) when clearing
5. You want to configure pins 0, 1, and 2 of PORTA as outputs and pins 3 and 4 as inputs without changing other pins. Which code snippet correctly does this?
hard
A. DDRA |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4);
B. DDRA |= (1 << 0) | (1 << 1) | (1 << 2); DDRA &= ~((1 << 3) | (1 << 4));
C. DDRA |= (1 << 0) & (1 << 1) & (1 << 2); DDRA &= ~((1 << 3) & (1 << 4));
D. DDRA = (1 << 0) | (1 << 1) | (1 << 2); DDRA = ~((1 << 3) | (1 << 4));

Solution

  1. Step 1: Set pins 0,1,2 as outputs

    Use bitwise OR to set bits 0,1,2 without affecting others: DDRA |= (1<<0)|(1<<1)|(1<<2);
  2. Step 2: Set pins 3,4 as inputs

    Clear bits 3 and 4 using bitwise AND with NOT: DDRA &= ~((1<<3)|(1<<4));
  3. Final Answer:

    DDRA |= (1 << 0) | (1 << 1) | (1 << 2); DDRA &= ~((1 << 3) | (1 << 4)); -> Option B
  4. Quick Check:

    Use |= to set output bits, &=~ to clear input bits [OK]
Hint: Set outputs with |=, inputs with &= ~ combined masks [OK]
Common Mistakes:
  • Overwriting DDRA instead of modifying bits
  • Using & instead of | for combining bits
  • Setting input pins as output by mistake
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard