我如何从 Mega2560 上的 UDRn 获取数据?
How do i fetch data from UDRn on Mega2560?
菜鸟问题:
我正在尝试了解 ARDUINO 上的 UART。我写了一些非常简单的代码,但出于某种原因,我无法使 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
}
看起来你从来没有打电话给 initUART1()
。
菜鸟问题: 我正在尝试了解 ARDUINO 上的 UART。我写了一些非常简单的代码,但出于某种原因,我无法使 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
}
看起来你从来没有打电话给 initUART1()
。