0

ATmega128 を使用して uart をシミュレートしようとしています。このコードは AVR STUDIO 4 で書きました。

PORTB0 はスイッチを使用するためのもので、押すと 5V DC に接続され、「a」が uart1 に送信されます。それ以外の場合は、グランドに接続されます。データの受信は割り込みによるものです。デバッガを使用して、UDR1 にデータがあり、RXC1 が設定されている場合、プログラムは ISR にジャンプし、UDR レジスタはすぐにクリアされ、何も取得されません。なぜこれが起こるのか教えてもらえますか?

これがコードです。

volatile unsigned char rxdata;

void uart_init(void)
{
    UCSR1A = 0x00;
    UCSR1B |= (1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);    //0b10011000;
    UCSR1C |= (1<<7)|(1<<UCSZ11)|(UCSZ10);  //0b10000110;
    UBRR1H = 0;
    UBRR1L = 103; //9600 baud rate
}

ISR(USART1_RX_vect)
{
    rxdata = UDR1;
    PORTC = rxdata;
}

void putch(char data)
{
    while(!(UCSR1A & 0x20));
    UDR1 = data;
}

そしてメインプログラムは

void port_init(void)
{
    DDRC = 0xFF;        
}

int main(void)
{
    port_init();
    uart_init();    
    sei();

    while(1)
    {
        if (PINB & 0x01){
            putch('a');         
        }
    }
}
4

2 に答える 2

0

AVR Studio 4 のヘルプ セクションを見てみました。UART 機能に関する既知のシミュレーターの問題については、次のように述べています。

UART/USART UDR レジスタは、アプリケーションからのみ変更できます。刺激ファイルを介した入力や、I/O ビューなどの変更による入力はできません。

于 2013-12-05T09:27:33.150 に答える