Как получить данные из UDRn на Mega2560? - PullRequest
1 голос
/ 26 апреля 2020

Вопрос Noob: Я пытаюсь узнать о UART на ARDUINO. Я написал очень простой код и по какой-то причине не могу заставить работать функцию receive (). Я не думаю, что он получает данные из регистра UDR. Я использую небольшой OLED-дисплей и хочу распечатать полученные данные на нем. Когда я запускаю код, данные не выводятся на дисплей. Я подключил порты TX1 и RX1 с помощью провода на плате. Я пытался найти видео на YouTube и много читал. Видимо, недостаточно. Любой специалист ARDUINO, который знает, что делать?

#include <avr/io.h>
#include "ssd1306.h"
#include "I2C.h"
#include <stdio.h>
#include <util/delay.h>

void initOLED();
void initUART1();
void receive();
void transmit();

int main(void)
{

    I2C_Init();
    initOLED();                     //initialiaze OLED
    while (1) 
    {
        transmit();
        receive();
    }
}

void initOLED()
{


    I2C_Init();
    InitializeDisplay();
    clear_display();

}

void initUART1(void)
{
    DDRD = 0x08;                     //TXD1 set to output
    UBRR1L = 51;                     //Baudrate 19200
    UBRR1H = 0;                     //upper four bits of baudrate
    UCSR1A = 0x02;                  //Double speed mode
    UCSR1B = 0x18;                  //Enable receive and transmit
    UCSR1C = 0x06;                  //1 stop bit, 8-bit, no parity
}

void transmit()
{
    char b = 'a';
    while(!(UCSR1A & (1<<UDRE1))); //wait for an empty UDR register
    UDR1 = b;                      //load character in register
}
void receive()
{
    int Y = 0;                    //Y coordinate for cursor on the display
    char d;
    while(!(UCSR1A & (1<<RXC1))); //wait for unread data in the receive buffer
    d = UDR1;                     //set UDR register in character d

    sendCharXY(d, 1, Y);          //send character to display
}

1 Ответ

1 голос
/ 27 апреля 2020

Похоже, вы никогда не звоните initUART1().

...