def show_bits(value, name=""):
"""Show 8-bit value in binary"""
# Convert to binary manually
binary = ""
for i in range(7, -1, -1): # From bit 7 to bit 0
if value & (1 << i):
binary += "1"
else:
binary += "0"
hex_val = hex(value & 0xFF)
print(name + ": " + binary + " (" + hex_val + ")")
# Start with empty register
register = 0
show_bits(register, "Start")
print("\n=== Setting individual bits ===")
# Set bit 3 (turn on LED)
register = register | (1 << 3) # Set bit 3 to 1
show_bits(register, "Set bit 3")
# Set bit 0 (enable something)
register = register | (1 << 0) # Set bit 0 to 1
show_bits(register, "Set bit 0")
print("\n=== Clearing bits ===")
# Clear bit 3 (turn off LED)
register = register & ~(1 << 3) # Clear bit 3 to 0
show_bits(register, "Clear bit 3")
print("\n=== Working with bit fields ===")
# Set bits 6-4 to value 5 (101 in binary)
register = register & ~(7 << 4) # Clear bits 6-4 (7 = 0b111)
register = register | (5 << 4) # Set bits 6-4 to 5 (0b101)
show_bits(register, "Set bits 6-4 to 5")
# Extract bits 6-4
extracted = (register >> 4) & 7 # 7 = 0b111
print("Bits 6-4 value: " + str(extracted))
print("\n=== Shift operations ===")
# Shift left (multiply by 2)
shifted = register << 1
show_bits(register, "Original")
show_bits(shifted, "Left shift")
# Shift right (divide by 2)
shifted = register >> 1
show_bits(shifted, "Right shift")
print("\n=== Toggle bits ===")
# Toggle bit 2 (flip 0->1 or 1->0)
register = register ^ (1 << 2)
show_bits(register, "Toggle bit 2")
register = register ^ (1 << 2) # Toggle again
show_bits(register, "Toggle bit 2 again")