Попытка записать символ с пина Arduino на Putty - PullRequest
1 голос
/ 29 мая 2020

Итак, я пишу код для отправки символа (8 бит данных) и стопового бита в Putty, используя прерывание таймера 1 Arduino. Когда я пытаюсь отправить символ, он что-то показывает в Putty, поэтому он отправляет, но не символ, который я отправляю. Я искал всевозможную документацию, но не могу найти то, что мне нужно, также я не знаю, что делаю не так. Код:

#define Fosc 16000000

int rxPin = 7;
int txPin = 8;

int dataBits = 0;

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 (dataBits < 8)
  {
    if (txBuffer & 0b1) {
      digitalWrite(txPin, HIGH);
    }
    else {
      digitalWrite(txPin, LOW);
    }
    txBuffer >>= 1;
  }  
  dataBits++;
  if (dataBits == 9)
  {
    dataBits = 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);
    TIMSK1 = _BV(OCIE1A);  //attach
  }
}

Выход замазки

...