我在通过USB-Serial转换器将ATmega128串口连接到计算机时遇到问题。 USB-Serial转换器经过验证,因为我已将计算机连接到使用它的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);
}
}
答案 0 :(得分:0)
要检查的事项:
如果您使用预定义的符号值,也可以更好地了解您的代码,例如
/* 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)。再次......使用符号值将有助于更好地理解代码。
希望这会有所帮助......