[英]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.