Most significant bit of character not used

I'm using Arduino's timer 1 with compare match interrupt. I'm trying to send a character over Arduino pin 8.
This is my sending function:

void transmit()
{
  if (txBuffer & 0b1) {
    digitalWrite(txPin, HIGH);
  }
  else {
    digitalWrite(txPin, LOW);
  }
  txBuffer >>= 1;
  if (txBuffer == 0)
  {
    digitalWrite(txPin, HIGH);
    TIMSK1 &= ~_BV(OCIE1A); //detach
  }
}

Now when i try to send 'm' from the txBuffer for example it's 0b01101101 in binary but my code only sends 0b1101101 so, when i try to send the stop bit it adds the 1 to the data bits instead of the stop bit so the send character is not right when i check the output with putty. How do i write my code so my transmitter sends the full byte.
I attached the full code if you want to take a look.

UARTFirstDraft.ino (1.47 KB)

#include "arduino.h"
#include <stdint.h>
#include <inttypes.h>


#define Fosc 16000000

int rxPin = 7;
int txPin = 8;

uint8_t txBuffer;

void setup() {
  Serial.begin(9600);
  pinMode(txPin, OUTPUT);
  pinMode(rxPin, INPUT);
  setupInterrupts(9600);
}

void loop() {
  ReadMessage();
}

void setupInterrupts(long baud)
{
  long cmr = ((Fosc / (64 * baud)) - 1); //compare match register
  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0; //counter value to 0
  OCR1A = cmr;
  TCCR1B |= (1 << WGM12);  // CTC mode
  TCCR1B |= (1 << CS11) | (1 << CS10);   // Set bits for 64 prescaler
  //TIMSK1 = _BV(OCIE1A);  //attach
  interrupts();
}

ISR(TIMER1_COMPA_vect)
{
  transmit();
}

void transmit()
{
  if (txBuffer & 0b1) {
    digitalWrite(txPin, HIGH);
    Serial.println("1");
  }
  else {
    digitalWrite(txPin, LOW);
    Serial.println("0");
  }
  txBuffer >>= 1;
  if (txBuffer == 0)
  {
    digitalWrite(txPin, HIGH);
    TIMSK1 &= ~_BV(OCIE1A); //detach
  }
}

bool getParity(unsigned int n)
{
  bool parity = 0;
  while (n)
  {
    parity = !parity;
    n = n & (n - 1);
  }
  return parity;
}

  int incomingByte;

  void ReadMessage() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    char receivedCharacter = (char) incomingByte;
    txBuffer = receivedCharacter;
    Serial.println((char)txBuffer);
    Serial.println(txBuffer, BIN);
    TIMSK1 = _BV(OCIE1A);  //attach
  }
}
void transmit()
{
  if (txBuffer & 0b1) {
    digitalWrite(txPin, HIGH);
  }
  else {
    digitalWrite(txPin, LOW);
  }
  txBuffer >>= 1;    
  if (txBuffer == 0)  // what happens if txBuffer contains for example 0b00000111 ?
                      // does this terminate it prematurely ?
  {
    digitalWrite(txPin, HIGH);
    TIMSK1 &= ~_BV(OCIE1A); //detach
  }
}

6v6gt:

void transmit()

{
 if (txBuffer & 0b1) {
   digitalWrite(txPin, HIGH);
 }
 else {
   digitalWrite(txPin, LOW);
 }
 txBuffer >>= 1;    
 if (txBuffer == 0)  // what happens if txBuffer contains for example 0b00000111 ?
                     // does this terminate it prematurely ?
 {
   digitalWrite(txPin, HIGH);
   TIMSK1 &= ~_BV(OCIE1A); //detach
 }
}

Oh yeah you are right. I fixed it by just counting the databits that were sent, and making sure it is always 8. Thanks