gpt4 book ai didi

c - AVR atmega128串口通讯

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:55 24 4
gpt4 key购买 nike

我在通过 USB 串口转换器将 ATmega128 串口连接到计算机时遇到问题。 USB 串口转换器已通过验证,因为我已经使用它将计算机连接到 CDMA 调制解调器。但是,当我尝试将它与 atmega128 连接时,我无法找出问题所在。我已将它连接到串行 LCD (CLCD) 并且工作正常。即使在使用虚拟终端进行模拟时也没有问题。我想知道我是否遗漏了与串口相关的任何内容。我已经在硬件选项和虚拟终端中检查了波特率。这是代码。

#include<avr/io.h>
#include<util/delay.h>

char str1[]="AT\r\n";

char str2[]="AT+CMGF=1\r\n";

char str3[]="AT+CMGS=\"01068685673\"\r\n";

char str4[]="hello\x1A\r\n";


int i;

void TX_CHAR(char ch)
{

while(!(UCSR1A&0x20));
UDR1=ch;

}

int main()
{

UBRR1H=0; UBRR1L=103; UCSR1B=0x08;
UCSR1C=0b00000110;

while(1)
{
i=0; while(str1[i])TX_CHAR(str1[i++]);
_delay_ms(200);
i=0; while(str2[i])TX_CHAR(str2[i++]);
_delay_ms(200);
i=0; while(str3[i])TX_CHAR(str3[i++]);
_delay_ms(200);
i=0; while(str4[i])TX_CHAR(str4[i++]);
_delay_ms(3000);
}
}

最佳答案

要检查的事情:

  • 硬件 - 布线
  • M103C fuse 的值(=兼容模式)
  • XTAL 频率和预分频器,因为 BAUD 的公式取决于它:BAUD = Fosc/16(UBRR+1)
  • USART 双速标志 (UCSRA)
  • 框架格式
  • UDREn 标志设置

如果您使用预定义的符号值,您还可以更好地了解您的代码,例如

/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);

请参阅 data sheet 中的示例(第 176 页)

关于帧格式,我了解到您设置为异步、8 位(UCSR1B:2 = 0、UCSR1C:2,1 = 11)、奇偶校验禁用、1 个停止位

void TX_CHAR(char ch) 中,我了解到您正在使用掩码 0x20H 检查位 7 (RXC1) 的状态。另一方面,您没有启用 RX(RXEN1 表示 UCSR1B:4=0)

我想知道你是否应该更好地检查位 6 (TXC1)。同样……使用符号值将有助于更好地理解代码。

希望这有助于...

关于c - AVR atmega128串口通讯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com