AVR atmega128串口通讯

时间:2014-01-07 02:39:29

标签: c serial-port avr hyperterminal

我在通过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);
    }
}

1 个答案:

答案 0 :(得分:0)

要检查的事项:

  • 硬件 - 接线
  • M103C保险丝的值(=兼容模式)
  • 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)。再次......使用符号值将有助于更好地理解代码。

希望这会有所帮助......