1

ATmega128 シリアル ポートを USB-シリアル コンバーター経​​由でコンピューターに接続する際に問題があります。USB-シリアル コンバーターを使用してコンピューターを CDMA モデムに接続したため、USB シリアル コンバーターは検証済みです。ただし、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);
    }
}
4

1 に答える 1

0

確認事項:

  • ハードウェア - 配線
  • M103C ヒューズの値 (= 互換モード)
  • XTAL 周波数とプリスケーラ (BAUD の式はそれに依存するため) BAUD = Fosc/16(UBRR+1)
  • USART 倍速フラグ (UCSRA)
  • フレームフォーマット
  • UDREn フラグ セット

また、定義済みの記号値を使用すると、コードをよりよく理解できる場合があります。

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

データシートの例を参照してください(pg 176ff)

フレーム形式については、非同期、8 ビット ( UCSR1B:2 = 0, UCSR1C:2,1 = 11)、パリティ無効、1 ストップ ビットに設定されていると理解しています。

void TX_CHAR(char ch)mask を使用してビット 7 (RXC1) のステータスをチェックしていると理解しています0x20H。一方、RX が有効になっていません (RXEN1 は UCSR1B:4=0 を意味します)。

ビット 6 (TXC1) をチェックしたほうがよいのではないでしょうか。繰り返しますが...記号値を使用すると、コードをよりよく理解するのに役立ちます。

お役に立てれば ...

于 2014-01-10T08:49:07.150 に答える