IR led will not transmit if I try to digitalread in my code

I have removed as much code as possible, and auto-formatted it:-

static int BtnNxtPin  = 9;
static int BtnOkPin = 8;
static int IRledPin =  13;
byte BtnNxt = 0;
byte BtnOk = 0;
void setup()   {
  Serial.begin(9600);
  pinMode(IRledPin, OUTPUT);
  pinMode(BtnNxtPin, INPUT_PULLUP);
  pinMode(BtnOkPin, INPUT_PULLUP);
  Send_ChnUp();
}
void loop() {
  GetBtn();
  delay(200);
}

void GetBtn() {
  BtnNxt = 0; BtnOk = 0;
  if (digitalRead(BtnNxtPin) == 0) BtnNxt = 1;
  if (digitalRead(BtnOkPin) == 0) BtnOk = 1;
  do {
    /*wait for button release */
  } while (digitalRead(BtnNxtPin) == 0 || digitalRead(BtnOkPin) == 0);
  delay(10); //debounce
}

void pulseIR(long microsecs) {     // count down from the number of microseconds we are told to wait
  cli();                           // this turns off any background interrupts
  while (microsecs > 0) {          // 38 kHz is about 13 microseconds high and 13 microseconds low
    digitalWrite(IRledPin, HIGH);   // this takes about 3 microseconds to happen
    delayMicroseconds(10);          // hang out for 10 microseconds
    digitalWrite(IRledPin, LOW);    // this also takes about 3 microseconds
    delayMicroseconds(10);          // hang out for 10 microseconds
    // so 26 microseconds altogether
    microsecs -= 26;
  }
  sei();  // this turns them back on
}
void Send_ChnUp() {
  pulseIR(9240); delayMicroseconds(4620);
  pulseIR(560); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(580); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(580); delayMicroseconds(560);
  pulseIR(580); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(580); delayMicroseconds(1740);
  pulseIR(560); delayMicroseconds(1740);
  pulseIR(540); delayMicroseconds(1740);
  pulseIR(580); delayMicroseconds(1720);
  pulseIR(560); delayMicroseconds(1740);
  pulseIR(560); delayMicroseconds(1740);
  pulseIR(560); delayMicroseconds(1720);
  pulseIR(580); delayMicroseconds(1720);
  pulseIR(560); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(1740);
  pulseIR(560); delayMicroseconds(1720);
  pulseIR(560); delayMicroseconds(580);
  pulseIR(560); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(580); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(540);
  pulseIR(600); delayMicroseconds(1720);
  pulseIR(560); delayMicroseconds(580);
  pulseIR(560); delayMicroseconds(560);
  pulseIR(560); delayMicroseconds(1740);
  pulseIR(560); delayMicroseconds(1820);
  pulseIR(480); delayMicroseconds(1760);
  pulseIR(540); delayMicroseconds(1800);
  pulseIR(500); delayMicroseconds(1840);
  pulseIR(440); delayMicroseconds(50000);
}

I still have the same problem. If I comment out the lines with digitalread then the function call at the end of setup does knock my receiver up a channel.

Alternatively if I comment out "GetBtn" in the main loop, then again it will work.

However without commenting out one of these two things means the led does not flash, despite the "Send_ChnUp" being called before the main loop.