// Fase 1: Mapeo de registros del ATmega328P
uint8_t leer(uint16_t dir) {
return *(volatile uint8_t*)dir;
}
void imprimirHex(uint8_t v) {
Serial.print(F("0x"));
if (v < 16) Serial.print('0');
Serial.print(v, HEX);
}
void imprimirBinario8Bits(uint8_t valor) {
for (int i = 7; i >= 0; i--) Serial.print(bitRead(valor, i));
}
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(F("--- Registros de proposito general R0-R31 ---"));
for (uint8_t i = 0; i < 32; i++) {
Serial.print(F("R")); Serial.print(i); Serial.print(F(" = "));
imprimirHex(leer(i));
Serial.println();
}
Serial.println(F("\n--- Punteros de 16 bits ---"));
uint16_t X = ((uint16_t)leer(27) << 8) | leer(26); // R27:R26
uint16_t Y = ((uint16_t)leer(29) << 8) | leer(28); // R29:R28
uint16_t Z = ((uint16_t)leer(31) << 8) | leer(30); // R31:R30
Serial.print(F("X = 0x")); Serial.println(X, HEX);
Serial.print(F("Y = 0x")); Serial.println(Y, HEX);
Serial.print(F("Z = 0x")); Serial.println(Z, HEX);
Serial.println(F("\n--- Registros de control y estado ---"));
Serial.print(F("SREG = ")); imprimirBinario8Bits(SREG); Serial.println();
Serial.print(F("DDRB = ")); imprimirBinario8Bits(DDRB); Serial.println();
Serial.print(F("PORTB = ")); imprimirBinario8Bits(PORTB); Serial.println();
}
void loop() {}