[英]Programming atmega328p's UART on arduino
我正在通过直接对其atmega328p的串行通信寄存器进行编程来尝试在arduino中进行串行传输(我知道arduino中有一个现成的串行通信库,但我想自己尝试对atmega328p进行编程)。
我正在尝试使用arduino的tx引脚将字符“ a”发送到串行LCD。 我已经在线参考了一些资源,并获得了以下代码:
#define BAUDRATE(BAUD) (((F_CPU/(BAUD*16UL)))-1)
class serials
{
serials()
{
UBRR0H = BAUDRATE(9600) >> 8;
UBRR0L = BAUDRATE(9600);
UCSR0A &= ~_BV(U2X0);
UCSR0B |= _BV(TXEN0) | _BV(RXEN0);
UCSR0C |= _BV(UCSZ00) | _BV(UCSZ01);
}
void transmit(unsigned char);
};
void serials::transmit(unsigned char data)
{
loop_until_bit_is_clear(UCSR0A,UDRE0);
UDR0 = data;
}
void loop()
{
serials lcdtransmit;
lcdtransmit.transmit(254);
lcdtransmit.transmit(1);
lcdtransmit.transmit(254);
lcdtransmit.transmit(128);
lcdtransmit.transmit('a');
while(1);
}
但是,当我运行这段代码时,
while(1)
不存在时,似乎在“ tx引脚”输出,而LCD显示屏上没有输出。 为串行传输编写的代码中是否有任何错误?
假设您在Arduino上使用328p,则应该假定引导加载程序已在到达代码之前已写入UART寄存器。 因此,应该完全分配UCSR0B和UCSR0C寄存器,而不仅仅是屏蔽设置的位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.