Perbedaan antara membaca PORT dan PIN


9

Apa perbedaan antara membaca PORTA dan PINA? Apa hubungan antara port dan pinnya? Saya benar-benar bingung !!! contoh membaca PORT: (pin baca tidak berguna di sini)

Perakitan f = 1MHz ATmega8 Saya perlu melengkapi PORTB setiap 1ms. (Dutycycle = 50%)

    LDI R16,$FF
    OUT DDRB,R16
    MAIN: LDI R16,00
    DELAY:CPI R16,200
    BREQ LOOP
    INC R16
    RJMP DELAY
    loop:IN R17,PORTB
    COM R17
    OUT PORTB,R17
    OUT R17,PORTB
    RJMP MAIN

Apakah kita seharusnya menggunakan bola kristal kita untuk mengetahui mikrokontroler (dan untuk kode: bahasa pemrograman mana) yang Anda gunakan ??
Wouter van Ooijen

Maaf sudah diedit.
Hanna

Apakah ini kode Anda sendiri atau ini dari contoh? Jika ini sebuah contoh, dari mana asalnya? Mengapa Anda mengatakan "membaca pin tidak berguna di sini"?
angelatlarge

Saya sudah mengujinya di AVR studio.Apakah menurut Anda DI R17, PINB benar?
Hanna

Jawaban:


13

PORT adalah buffer OUTPUT, PIN adalah buffer INPUT.

Ketika Anda ingin mengatur pin ke tegangan "tinggi" atau "rendah", tulis ke register PORT.

Ketika Anda ingin tahu tegangan apa yang saat ini disajikan ke pin, baca register PIN.

Bit register ini mewakili pin yang sesuai dari port input / output untuk keperluan umum.

Berikut ini adalah skema sederhana dari elektronik di dalam AVR yang terhubung ke satu pin (buka di sini untuk lembar data lengkap).

Blok sirkuit ini diulang untuk setiap pin. Delapan dari ini membentuk port (port A, misalnya).

masukkan deskripsi gambar di sini

Mulai dari alun-alun paling kiri (yang mewakili koneksi fisik ke dunia luar), Anda dapat melihat tiga jalur:

  1. Jalur paling atas adalah resistor pull-up yang dapat dipilih perangkat lunak
  2. Jalur tengah digunakan ketika pin dikonfigurasikan sebagai output
  3. Jalur terendah digunakan ketika pin dikonfigurasi sebagai input

Perlu dicatat bahwa beberapa atau semua sirkuit ini dapat dilewati ketika pin dibagi dengan periferal internal. Misalnya, Konverter Analog-ke-Digital (ADC).


+1 Juga perlu dicatat bahwa ketika port dikonfigurasikan sebagai input, menulis 1 ke setiap bit PORT memungkinkan resistor penarik internal pada pin itu.
Matt Young

Kapan saya harus membaca PORT?
Hanna

Anda membaca dari PIN. Membaca dari PORT tidak akan memberi Anda sesuatu yang bermanfaat.
Matt Young

@user - Membaca dari PORT akan memberi Anda keadaan resistor pull-up (apakah pull-up diaktifkan untuk pin itu atau tidak), tetapi seperti yang disebutkan Matt Young, itu tidak terlalu berguna.
DrFriedParts

Saya menambahkan sampel membaca PORT
Hanna

4

Saya setuju dengan jawaban DrFriedParts sepenuhnya, namun, saya ingin menambahkan itu, Anda memang dapat membaca PORTuntuk mengetahui apakah port / pin dikonfigurasi sebagai OUTPUT tinggi atau rendah (ketika DDR= 1, port / pin dikonfigurasi sebagai output) atau apakah internal resistor pullup diaktifkan (ketika DDR= 0, port / pin dikonfigurasi sebagai input). Dengan cara ini port port dapat digunakan (dengan cara yang agak konyol) sebagai penyimpanan umum atau untuk menyampaikan informasi tentang keadaan output / input pullup, seperti dalam skenario berikut

Mungkin salah satu bagian dari program Anda menulis sesuatu ke port atau mengaktifkan / menonaktifkan pullup, dan bagian lain dari program membaca PORTuntuk mengetahui bagaimana itu dikonfigurasikan. Membaca PORTsegera setelah menulis PORTtidak masuk akal: setelah menulis PORT, Anda tahu apa nilainya PORT.


Bisakah Anda memberi saya kode yang lebih baik? Dan mengapa DI R17, PINB tidak menjawab di sana?
Hanna

Tidak jelas dari pertanyaan Anda, apa yang Anda coba lakukan ... bisakah Anda menjelaskannya dalam pertanyaan Anda: apa tujuan dari cuplikan kode ini? Apakah Anda hanya ingin beralih port pada frekuensi dan siklus tugas tertentu?
angelatlarge

ya !!! hanya ini
Hanna

1

Untuk keperluan Anda, membaca dari PORT sebenarnya masuk akal: Pin yang dimaksud adalah pin keluaran, dan Anda hanya ingin membaca nilai terakhir yang Anda tulis, beralih, dan tulis kembali. Jadi Anda menggunakan register port sebagai byte dari RAM yang dapat diamati secara eksternal.

Di sisi lain, untuk aplikasi khusus ini, Anda cukup menyimpan nilai dalam register dan bahkan tidak perlu membaca kembali register PORT.


Jadi mengapa membaca PIN salah?
Hanna

Nilai yang Anda dapatkan dari PIN tergantung, pada prinsipnya, pada apa yang dilampirkan pada pin secara eksternal, dan dalam aplikasi khusus Anda, Anda hanya tertarik pada nilai yang Anda tulis sebelumnya (Ini, tentu saja, agak tidak khas dari saya / Pin O). Namun dalam praktiknya, saya berharap bahwa nilai-nilai PORT dan PIN identik di sini (apakah Anda mencobanya?).
microtherion

Ya, saya sudah mengujinya sebelumnya di AVR studio.Saya pikir apa yang Anda katakan itu benar. Kami hanya perlu melengkapi nilai port ...
Hanna
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.