0

9 月に開始する上級プロジェクトで Arduino ライブラリを使用することが許可されていないため、AVR コードで Arduino Uno をプログラムしようとしています。データ シートを見つけ、デジタル ピンを動作させ、USB シリアル接続を介してコンピュータと通信しようとしました。私はこのマニュアル ( 1 ) の第 19 章を何度も読みましたが、いまだに道に迷っています。ライブラリのドキュメント自体とデータシートからコードをコピーして貼り付けましたが、問題が解決されていない、または見つからないというメッセージが表示されます。どんな助けでも大歓迎です。

コード:

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

#define analog1 PC0
#define LED PB5
#define BAUD 9600
//#define F_CPU 16000000

void init_io(){
    DDRB |= (1<<LED);
    DDRC |= (0<<analog1);

}

static void
   uart_9600(void)
    {
   UBRRH = UBRRH_VALUE;
   UBRRL = UBRRL_VALUE;
   #if USE_2X
   UCSRA |= (1 << U2X);
   #else
   UCSRA &= ~(1 << U2X);
   #endif
   }

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRnA & (1<<UDREn)) )
;
/* Put data into buffer, sends the data */
UDRn= data;
}

int main(){
    int analog_value = 1000;
    while(1){
        //analog_value = PINC;

        if(analog_value > 500){
            PORTB |= (1<<LED);
            _delay_ms(500);
            PORTB &= ~(1<<LED);
            _delay_ms(500);
            putchar(analog_value);

        }
    }
}

どうもありがとう!

4

1 に答える 1

1

コードの最初の問題は AVR-libc の問題です。util/setbaud.hファイルを正しく使用していません。こちらのドキュメントをご覧になることをお勧めします。物事を簡単にするために、あなたの#define BAUD 9600 前にする必要があります#include <util/setbaud.h>. 次に、他の人が指摘したように、レジスタ名が正しくありません。USART 制御レジスタはUCSRnAUCSRnBおよびUCSRnCです。ボー レジスタはUBRRnLおよびUBRRnHです。ここnで、 はデバイスで使用されているシリアル ポートの番号で、インデックスは 0 から始まります。

stdoutAVR-libc は何も提供しないので、を処理する関数も定義する必要があります。作成方法については、のドキュメントを参照してくださいstdio.h

乾杯。

于 2013-07-25T00:39:24.713 に答える