Cに精通している場合は、次をお勧めします
- AVR Libc リファレンスから始めます
- iom328p.hでプロセッサ固有の定義を調べます (下にあります)
...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
。
- オプションで、Atmel Studio でデバイスATmega328pを選択する新しい ASF ボード プロジェクトを作成し、"user_board" テンプレートからプロジェクト フォルダーにロードされたソースを調べます (いずれにせよ、これは一般的なほぼ空のセットであり、
*.h
使用できる/使用できないものにスペースを提供します)。必要)
- 完全なプロセッサ マニュアルをいつでも手元に置いてください。そこにあるレジスタとビット名は、AVR ライブラリの定義と一致します。
Atmel Studio に付属するライブラリとツールチェーンは m328P をサポートしていますが、UNO ボード自体は ASF によってサポートされていないことに注意してください。ただし、基本的なプログラミングについては問題ありません。
PORTB に ... を追加中
PORTB
これは、AVR Studio に正しいプロセッサを...io.h
含めて選択することによって自動的に含まれます。<io.h>
プロセッサのライブラリで見つけます
#define PORTB _SFR_IO8(0x05)
プロセッサ ガイド (上記の 4 番目の箇条書き) の 615 ページを調べると、PORTB が I/O アドレス0x05
( qed ) にあることがわかります。それ自体は、 I / Oからメモリアドレスに変換するために_SFR_IO8(..)
定義されたマクロです(はい、下位レジスタはI / Oおよびメモリとして二重にマップされます。これにより、メモリアドレスは、最小メモリアドレスがR0からR31によって占有されるため、0x20高くなります) .<avr/sfr_defs.h>
含める<io.h>
ことにより、AVR ライブラリから取得します
#include <avr/io.h>
// included by io.h
// #include <avr/sfr_defs.h>
// #include <avr/portpins.h>
// #include <avr/common.h>
// #include <avr/version.h>
// #include <avr/io(your_processor).h> via processor declaration ... fuses
// #include <avr/(maybe some more).h>
これらすべて...h
(およびその他のいくつか) により、プロセッサのマニュアルに記載されているレジスタ/ポート/ピン名を使用して C でプログラミングできるようになりました。
次のような便利なライブラリがいくつかあります
#include <stdint.h> // Type definitions, e.g. uint8_t
// #include "stdint-gcc.h"
#include <avr/power.h> // clock prescaler macro
#include <avr/interrupt.h> // interrupt macros
プログラムやフラッシュメモリなどからの読み取り/書き込みをサポートするライブラリが見つかります。