.. Gedankenexperiment .. Nehmen wir an, ich definiere im Programmcode die 16 MHz als Taktfrequenz .. lasse ich alle Subs und Interrupts weg .. ?!
So ungefähr.

Vorschlag für nen Test, hier nur als Pseudocode

Quellprogrammstart:
- Initialisiere Ports (siehe Beispiel unten); es werden noch KEINE Interrupts initialisiert und schon garnicht freigegeben.

DAnach:
Schleife 1 (etwa zehn bis 20 mal)
- schalte Test-LED auf aus
- starte waitms 1000
- schalte Test-LED auf ein
- starte waitms
Schleife 1 Ende

Starte den Programmrest mit initialisierunge wie UART etc., Interrupts können freigegeben werden.

Gib mal einen TEsttext auf UART aus.

Schleife 2 (etwa zehn bis 20 mal)
- schalte Test-LED auf aus
- starte waitms 1000
- schalte Test-LED auf ein
- starte waitms
Schleife 2 Ende

Vergleiche die Laufzeiten . . .

Hinterher allenfalls ärgern, nicht heulen. (hmmm - hoffentlich musste nicht auf mich schimpfen . . .)

Codebeispiel (wie es bei mir auf praktisch allen Controllern läuft)
Code:
// ============================================================================= =
// ===  HAUPTProgramm ========================================================== =
// Initialisierungen, Ausgabe des Identifizierungsstrings per UART
//      Start des aktuellen Programms
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 int main(void)                 //
 {                              //
  uint8_t i;                    //
  char abc[12];                 // Übersetzungsfeld für Werteausgabe
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ===  Grundlegende Initialisierungen der Hardware, Portdefinition    -
//  PCINT8,  XCK0,   T0, PB0   1        40  PA0, ADC0,  PCINT0         
//  PCINT9,  CLKO,   T1, PB1   2        39  PA1, ADC1,  PCINT1         
//  PCINT10, INT2, AIN0, PB2   3        38  PA2, ADC2,  PCINT2         
//  PCINT11, OC0A, AIN1, PB3   4        37  PA3, ADC3,  PCINT3         
//  PCINT12, OC0B,  /SS, PB4   5        36  PA4, ADC4,  PCINT4         
//  PCINT13, ICP3, MOSI, PB5   6        35  PA5, ADC5,  PCINT5         
//  PCINT14, OC3A, MISO, PB6   7        34  PA6, ADC6,  PCINT6         
//  PCINT15, OC3B,  SCK, PB7   8        33  PA7, ADC7,  PCINT7         
//                    /RESET   9        32  AREF                       
//                       Vcc  10        31  GND                        
//                       GND  11        30  AVcc                       
//                     XTAL2  12        29  PC7, TOSC2, PCINT23        
//                     XTAL1  13        28  PC6, TOSC1, PCINT22        
//  PCINT24, RXD0,   T3, PD0  14        27  PC5, TDI,   PCINT21        
//  PCINT25, TXD0,       PD1  15        26  PC4, TDO,   PCINT20        
//  PCINT26, RXD1, INT0, PD2  16        25  PC3, TMS,   PCINT19        
//  PCINT27, TXD1, INT1, PD3  17        24  PC2, TCK,   PCINT18        
//  PCINT28, XCK1, OC1B, PD4  18        23  PC1, SDA,   PCINT17        
//  PCINT29,       OC1A, PD5  19        22  PC0, SCL,   PCINT16        
//  PCINT30,   OC2B, ICP PD6  20        21  PD7, OC2A,  PCINT31        
//              ===================================================
// ####>>>>     Initialisierung der Anschlüsse für R5M auf mega1284: <<<<####
//           (           PB0   1 A   A  40  PA0         (CN 11-1 -Audi-Busy)
// CN_12     (           PB1   2 A   A  39  PA1         (CN 11-3 -Audi-Clock)
// PORTB     (           PB2   3 A   A  38  PA2         (CN 11-5 -Audi-Data)
// (CIR od.  /           PB3   4 A?  E  37  PA3         (CN 11-4 -Audi)
//  LCD ...  \           PB4   5 A   A  36  PA4, Servo10
//  siehe    (     MOSI, PB5   6 A   A  35  PA5, Servo9
//  unten    (     MISO, PB6   7 A   A  34  PA6, Servo8
//  TasteC=3 (      SCK, PB7   8 EU  A  33  PA7, Servo7
//  Taste /RES,       /RESET   9        32  AREF ref Vcc, aktuell
//                       Vcc  10        31  GND                        
//                       GND  11        30  AVcc                       
//                     XTAL2  12     A  29  PC7, Servo6
//                     XTAL1  13     A  28  PC6, Servo5
//           RXD0,       PD0  14 EU  A  27  PC5, Servo4
//           TXD0,       PD1  15 EU  A  26  PC4, Servo3
//           RXD1,       PD2  16 EU  A  25  PC3, Servo2
//           TXD1,       PD3  17 A   A  24  PC2, Servo1
//           L1g         PD4  18 A   E  23  PC1, SDA   
//           L1r         PD5  19 A   E  22  PC0, SCL   
//             TasteA=1, PD6  20 EU  EU 21  PD7, TasteB=2, PCINT31, (Sound)
// - - - - - - - - - - - - - - -
// ####>>>>     PB3 ist evtl. Source für IR-DME-LED !! = CIR-LED
// - - - - - - - - - - - - - - -
// ####>>>>     Initialisierung/Anschlüsse von PORT B für LCD DEM 16x2
//     data bit 4        PB0  0 A  WS Pin1 | 
//     data bit 5        PB1  1 A     Pin2 | -- Der 10-polige Wannenstecker
//     data bit 6        PB2  2 A     Pin3 |    ist an die Belegung wie beim
//     data bit 7   SCK, PB3  3 A     Pin4 |    Transistortester angepasst
//     RS line           PB4  RS      Pin5 |    es kommen noch
//     ENABLE line MOSI, PB5  EN1     Pin6 |    Pin  9  GND und
//     R/W (offen) MISO, PB6  R/W     Pin7 |    Pin 10  Vcc dazu
//     NC (TasteC) SCK,  PB7  NC      Pin8 |___________________________
//     GND                            Pin9   
//     Vcc                            Pn10      | Anmerkg: ENABLE line !
// - - - - - - - - - - - - - - -
// Ports+Pins als Ein- (0) od Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
//      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
  DDRA  = 0b11110110;   // PA0..2 WTV Bsy/Clk/Dto, PA3=Eingang f Sharp
  PORTA = 0b00000001;   //    und Port/Pull Ups (1)  aktivieren
                        //
  DDRB  = 0b01111111;   // siehe aktuell oben
  PORTB = 0b10000000;   //    und Port/Pull Ups (1)  aktivieren
                        //
  DDRC  = 0b11110111;   // PC0..7 (mega1284), PC0 + PC1 = I2C
  PORTC = 0b00000000;   // bis auf I2C : Alle OHNE Pullup !!
                        // 
  DDRD  = 0b00111100;   // -> siehe Schaltplan m-32-plus
  PORTD = 0b11000011;   //    Pull Ups aktivieren, NICHT bei extINT0/~1

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// <<<===  Etwa hier könnte Deine erste Testschleife stehen
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  for(i=0; i<10; i++)   // gLED1(PC3) blinken lassen bevor Interrupts erlaubt sind,
  {                     //   um ungewollte Resets u.ä. besser erkennen zu können
    SetBit(PORTD, L1g); // gnLED/PD4 schalten EIN, HELL
    wms(3);             // ###>>> HeartbeatLEDs schalten Aode -<|- Portpin <<<###
    ClrBit(PORTD, L1g); // gnLED/PD4 aus
    wms(97);            //
    SetBit(PORTD, L1r); // rtLED/PD5 schalten EIN, HELL
    wms(3);             // ###>>> HeartbeatLEDs schalten Aode -<|- Portpin <<<###
    if ( TAaus) ClrBit(PORTD, L1r);     // rtLED/PD5 aus WENN T1 nicht gedrückt
    wms(97);            //
  }                     // Ende von for(i=0; i<10; i++)
  ClrBit(PORTD, L1r);   // rtLED/PD5 auf JEDEN Fall aus
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  SrvCHK    = 1;        // Flag setzen für Extremwertprüfung aktiv             tmr
  TC1TMR_init();        // Init Tmr/Cntr1 für ServoPWMs                        tmr
// - - - - - - - - - - - - - - -
  Izeit_1   = 20000;    // Der ZeitHorizont für ISR(TIMER2_COMPA_vect)
  Izthrznt  = 20000;    // Der ZeitHorizont für ISR(TIMER2_COMPA_vect)
  Isecundn  = 0;        // Sekundenzähler, max 9 Stunden - NUR hier nullen
  TC2TMR_init();    // Init Timer/Cntr2-Interrupt 20 kHz/50 µsec           tmr
                        //   ISR gibt auf PD4/L1g (gnLED) ein Taktsignal aus
  kal_0();              // Initialisieren aus KOnstanten-Liste = div. Vorgaben kal

// - - - - - - - - - - - - - - -
  lcd_init();           //                                                     lib
  lcd_01 ( );           // Info über LCD                                       inf
//      Anmerkung zu LCD_01     Diese Routine muss früh laufen, vor Allem
//              VOR der UART1-Initialisierung. Denn die schnelle UART1 verzögert
//              die Routine wms dramatisch ! ! !
//
  STSi2c        = 0;    // Statusbyte I2C auf "nicht initialisiert" setzen
  I2C_init ();          // I2C-Buffer initialisieren, I2C-Slave-Init           I2C

//init_uart0(MYUBRR);  // USART0 initialisieren m wählbarer Baudrate (s.o.)    inf
  init_uart0 ( (u16)(F_CPU / BAUD / 16 - 0.5) );    // Init UART0 nach PDannegger
// Die ##-routinen für LCD-Betrieb wieder aktivieren - stören dann den IR-LED-Takt

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  sei();        // Globalen Interrupt freigeben
  info01 ();            // Startinfo über USART ausgeben                      main
//  . . .
//  . . . 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// <<<===  Etwa hier könnte Deine zweite Testschleife stehen
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -