Что забыл, что наврал???
Пятница.
///////////////////////////////////////
//------------------
void Init_Registers_As_Reset( void )
{
volatile unsigned char tmp_r;
SREG = 0x00; // Status Register. Запрет прерываний
///////////////////////////////////
// ПОРТЫ В/В И ВНЕШНИЕ ПРЕРЫВАНИЯ
///////////////////////////////////
// Порты, НЕ инициализуемые пользователем
// в startup/main - раскомментировать
// PINA = 0x00;
// DDRA = 0x00;
// PORTA = 0x00;
/////////////
// PINB = 0x00;
// DDRB = 0x00;
// PORTB = 0x00;
/////////////
// PINC = 0x00;
// DDRC = 0x00;
// PORTC = 0x00;
/////////////
// PIND = 0x00;
// DDRD = 0x00;
// PORTD = 0x00;
/////////////
// PINE = 0x00;
// DDRE = 0x00;
// PORTE = 0x00;
/////////////
// PINF = 0x00;
// DDRF = 0x00;
// PORTF = 0x00;
/////////////
// PING = 0x00;
// DDRG = 0x00;
// PORTG = 0x00;
/////////////////////
EIMSK = 0x00; // External Interrupt Mask Register
EIFR = 0xff; // Cброс флагов внешних прерываний
EICRA = 0x00; // External Interrupt Control Register A
EICRB = 0x00; // External Interrupt Control Register B
SFIOR = 0x00; // Special Function I/O Register
////////////////////
////////////////////
// УПРАВЛЕНИЕ MCU
////////////////////
RAMPZ = 0x00; // RAM Page Z Select Register
XDIV = 0x00; // XTAL Divide Control Register
__no_operation(); // ERRATA m128.
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
/////////////
////// MCUCSR. MCU general Control and Status Register.
////// Раскомментировать, если не проверяются флаги сброса:
// MCUCSR &= (~((1 << PORF)|(1 << EXTRF )|
// (1 << BORF )|(1 << WDRF )|(1 << JTRF)));
////////////////////
////////////////////
// Обращение к cледующим регистрам определяется
// требованиями контретного проекта.
////////////////////
MCUCR = 0x00; // MCU general Control Register
////// Чаще всего их лучше не трогать:
// OSCCAL = 0x00; // Oscillator Calibration Register.
// SP = 0x00; // Stack Pointer
// OCDR = 0x00; // On-Chip Debug Register
// WDTCR = 0x00; // Watchdog Timer Control Register
////////////////////
////////////////////
// Т А Й М Е Р Ы
////////////////////
TCCR0 = 0x00; // Init-stop T0
OCR0 = 0x00;
TCNT0 = 0x00;
ASSR = 0x00; // Asynchronous mode Status Register
/////////////
TCCR1B = 0x00; // Init-stop T1
ICR1 = 0x00;
OCR1B = 0x00;
OCR1A = 0x00;
TCNT1 = 0x00;
TCCR1A = 0x00;
OCR1C = 0x00;
TCCR1C = 0x00;
/////////////
TCCR2 = 0x00; // Init-stop T2
OCR2 = 0x00;
TCNT2 = 0x00;
/////////////
TCCR3B = 0x00; // Init-stop T3
ICR3 = 0x00;
OCR3C = 0x00;
OCR3B = 0x00;
OCR3A = 0x00;
TCNT3 = 0x00;
TCCR3A = 0x00;
TCCR3C = 0x00;
/////////////
TIMSK = 0x00; // Timer/Counter Interrupt Mask Register
ETIMSK = 0x00; // Extended Timer/Counter Interrupt Mask Register
TIFR = 0xff; // Timer/Counter Interrupt Flag Register
ETIFR = 0xff; // Extended Timer/Counter Interrupt Flag Register
/////////////////
/////////////////
// U S A R T
/////////////////
UCSR0B = 0x00; // USART0 Control and Status Register B
tmp_r = UDR0;
UBRR0H = 0x00; // USART0 Baud Rate Register High
UBRR0L = 0x00; // USART0 Baud Rate Register Low
UCSR0A = (1 << TXC0); // USART0 Control and Status Register A
UCSR0C = ((1 << UCSZ00)|(1 << UCSZ01));
/////////////
UCSR1B = 0x00; // USART1 Control and Status Register B
tmp_r = UDR1;
UBRR1H = 0x00; // USART1 Baud Rate Register High
UBRR1L = 0x00; // USART1 Baud Rate Register Low
UCSR1A = (1 << TXC1); // USART1 Control and Status Register A
UCSR1C = ((1 << UCSZ10)|(1 << UCSZ11));
////////////////
////////////////
// A D C & Comparator
////////////////
ADCSR = 0x00; // ADC Control and Status Register
ADMUX = 0x00; // ADC Multiplexer Selection Register
ACSR = 0x00; // Analog Comparator Control and Status Register
////////////////
////////////////
// S P I
////////////////
SPCR = 0x00; // SPI Control Register
tmp_r = SPSR;
tmp_r = SPDR;
SPSR = 0x00; // SPI Status Register
////////////////
////////////////
// E E P R O M
////////////////
while (EECR & ( 1 << EEWE ));
EEAR = 0x00; // EEPROM Address Register
EEDR = 0x00; // EEPROM Data Register
EECR = 0x00; // EEPROM Control Register
////////////////
////////////////
// External Memory Сontrol
////////////////
XMCRA = 0x00; // External Memory Control Register A
XMCRB = 0x00; // External Memory Control Register B
////////////////
////////////////
// T W I
////////////////
TWCR = ( 1 << TWINT); // TWI Control Register
TWBR = 0x00; // TWI Bit Rate Register
TWSR = 0x00; // TWI Status Register
TWAR = 0xfe; // TWI Address Register
/////// TWDR = 0xff; // TWI Data Register
////////////////
////////////////
// S P M C o n t r o l
////////////////
while( SPMCSR & ( 1 << SPMEN ) );
SPMCSR = (1 << RWWSB); // SPM Control and Status Register
////////////////
}