Majelis di Arduino: register IO

13

Pertanyaan: Apa register yang saya gunakan untuk mengakses IO di Arduino Uno ketika saya menggunakan assembly untuk pemrograman?

Latar Belakang: Saya tertarik untuk mempraktikkan keterampilan bahasa rakitan saya di Arduino (saya pikir akan lebih mudah untuk menyalakan / mematikan LED daripada khawatir tentang konsol IO). Dari melakukan pencarian awal , saya telah menemukan bahwa toolchain AVR dapat digunakan untuk memprogram Arduino. Namun, saya tidak tahu bagaimana menemukan register yang sesuai untuk pin IO.

apnorton
sumber

Jawaban:

8

Lembar data untuk mikrokontroler AVR cukup baik untuk dibaca. Hanya Google untuk pengontrol yang tepat di Arduino Anda (mis. ATmege328) dan temukan datasheet "Lengkap" di situs web atmel.com . Jangan unduh "Ringkasan", itu tidak termasuk banyak informasi. Unduh datasheet dari atmel.com, itu adalah satu-satunya lokasi dengan dokumentasi terbaru.

Ada tiga register yang digunakan dalam IO dasar (lihat bab "I / O-Ports"):

Di mana n adalah pengidentifikasi port, huruf mulai dari A, B, C, ... tergantung pada jumlah pin IO yang dimiliki pengontrol Anda. Setiap bit dalam setiap register mewakili pin GPIO tunggal (ya, Anda perlu pengetahuan dasar tentang biner untuk memahami hal ini).

  • DDR n , Data Direction Register: Ini pada dasarnya mengkonfigurasi pin untuk input (0) atau output (1).
  • PORT n , Port n Data Register: Ketika pin ditetapkan sebagai output, bit terkait mengaktifkan pin output tinggi (1) atau rendah (0). Ketika dikonfigurasikan sebagai input, ini memungkinkan resistor pull up yang lemah pada pin output.
  • PIN n , Port n Register Input: Gunakan register ini untuk membaca level saat ini pada pin yang dikonfigurasi sebagai input.
jippie
sumber
3
Ini. Langkah 1: Berhenti memikirkannya sebagai arduino. Ini bukan. Ini adalah ATmega MCU pada PCB. 2. Baca lembar data. 3. Tidak juga, baca datasheet .
Connor Wolf
Ah ... itulah yang saya butuhkan. Saya pikir saya menghabiskan begitu banyak waktu mencari tutorial yang ditargetkan Arduino, sehingga saya lupa saya hanya memprogram controller AVR, dan bisa menggunakan datasheet-nya.
apnorton
1

Lihat ini: http://arduino.cc/en/Reference/PortManipulation

Juga: http://arduino.cc/en/Hacking/PinMapping168

Sedangkan untuk port dan pin lainnya, periksa letakkan datasheet untuk controller Anda, mereka benar-benar berguna bagi orang yang dapat memahaminya! :)

Dokter
sumber
3
Hanya jawaban tautan tidak berguna untuk situs ini, karena kami tidak berusaha membuat repositori tautan. Selain itu, jawaban hanya tautan tidak berguna jika tautan tersebut pernah turun di masa mendatang. Akan lebih baik untuk meringkas atau memparafrasekan konten dalam jawaban itu sendiri sehingga pengguna dapat menemukan apa yang mereka butuhkan di sini sendiri atau paling tidak mendapatkan konteks yang cukup sehingga dapat menemukan solusi sendiri.
asheeshr