c - 仅使用寄存器的 2 个 Arduino Uno 之间的串行通信
问题描述
我需要在 2 个 Arduino Uno 之间传输一个字符串,使用没有功能的串行通信(只是操作寄存器,例如 UDR0)。
我可以使用发送字符串
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
void USART_Init(unsigned int ubrr)
{
UBRR0H=(unsigned char)(ubrr>>8);
UBRR0L=(unsigned char)ubrr;
UCSR0B=(1<<RXEN0)|(1<<TXEN0);
UCSR0C=(1<<USBS0)|(3<<UCSZ00);
}
void USART_Transmit(unsigned char data)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=data;
}
void SendString(char *StringPtr)
{
while(*StringPtr !=0x00)
{
USART_Transmit(*StringPtr);
StringPtr++;
}
}
void setup()
{
USART_Init(MYUBRR);
}
void loop()
{
SendString("123456");
delay(1000);
}
但我不知道如何复制另一端的UDR0寄存器的内容。该功能应该是这样的:
unsigned char USART_Receive(void)
{
while(!(UCSR0A&(1<<RXC0)))
return UDR0;
}
但我不知道如何实际使用它;我需要将所有这些字符从串行保存到一个字符串,然后在连接到第二个 Arduino Uno 的 LCD 上显示该字符串,但是每次当我尝试接收更多的一个字符时,它都工作得非常糟糕(空格,一个很多零,无效字符)。
我读到如果我有一个 LCD 连接到第二个 arduino,最好不要使用 USART_Receive() 函数,并将其作为中断来实现,但我也不知道该怎么做。
你知道如何将字符串传输到另一个 Arduino 吗?
解决方案
也许尝试将所有字符放入一个大数组中,然后将该数组发送到您的 LCD。这样,读取一个字符和下一个字符之间的时间就最小化了。(UART是异步的,所以如果你太慢,你会错过请求的数据)。
推荐阅读
- reactjs - Redux 使用 Typescript 连接 - TS2347
- sql-server - 如何从 VB.net 触发 SQL Server 数据库/表错误消息
- html - 如何防止一个部分重叠另一部分
- javascript - 拒绝使用 WampServer 3.1.7 加载 jquery.csv.min.js 库
- azure - Azure Database for MySQL 的数据库/架构限制?
- sql - Oracle 慢查询处理
- android - React Native抽屉导航选项动态设置锁定和解锁?
- c++ - 在 lambda 中捕获的 constexpr 变量失去了它的 constexpr-ness
- java - 如何从设备文件夹中检索和共享位图
- ios - 是否可以从 IOS 项目中导出 IOS 框架?