Membaca port AVR di SI. Studi sistem perintah mikrokontroler AVR

pengantar

Semua port i / o port (PVW) AVR mikrokontroler bekerja pada prinsip pemodifikasi membaca-tulis saat menggunakannya sebagai port port i / o universal. Ini berarti bahwa mengubah arah port I / O dari satu jalur port oleh perintah SBI dan CBI akan terjadi tanpa perubahan palsu ke arah bagian I / O dari jalur port lainnya. Ini juga meluas untuk mengubah level logis (jika garis port dikonfigurasi ke output) atau untuk menghidupkan / menonaktifkan resistor pull-up (jika saluran dikonfigurasi untuk masuk). Setiap buffer output memiliki karakteristik kontrol simetris dengan arus output yang mengalir tinggi dan mengalir. Driver output memiliki kapasitas beban yang memungkinkan Anda untuk secara langsung mengontrol indikator LED. Attrantum Penyelesaian resistor selektif dengan daya daya dapat dihubungkan ke semua garis port, resistansi yang tidak tergantung pada tegangan suplai. Pada semua garis PVV, dioda pelindung dipasang yang terhubung ke VCC dan Umum (GND), seperti yang ditunjukkan pada Gambar 29. Daftar parameter PVV terperinci diberikan pada bagian "Karakteristik Listrik".

Gambar 29 - Diagram garis pvv yang setara

Tautan ke register dan bit register di bagian ini Dases pada umumnya. Pada saat yang sama, simbol "X" menggantikan nama PVV, dan simbol "N" menggantikan nomor debit PVV. Namun, ketika membuat program, Anda harus menggunakan bentuk perekaman yang tepat. Misalnya, Portb3, artinya kategori 3 port B, dalam dokumen ini direkam sebagai PortXN. Alamat register I / O fisik dan distribusi pelepasan mereka ditunjukkan dalam "deskripsi register port I / O".

Untuk setiap port i / o dalam memori I / O, tiga sel dicadangkan: satu di bawah register data - PORTX, yang lain untuk data register - DDRX dan ketiga di bawah keadaan input port - PINX. Sel yang menyimpan negara-negara dalam input port hanya dapat dibaca, dan register data dan register data memiliki akses dua arah. Selain itu, pengaturan Pengetatan SFIOR PUD PUD \u200b\u200bPengetatan Resistor Pengencang PUD Register menonaktifkan semua output dari semua port.

Di bawah ini adalah deskripsi port I / O untuk Universal Digital I / O. Sebagian besar kesimpulan port mendukung fungsi alternatif dari built-in perangkat periferal mikrokontroler. Deskripsi fitur alternatif selanjutnya disediakan di ayat "fungsi port alternatif" (lihat juga deskripsi fungsi dari modul periferal yang sesuai).

Harap dicatat bahwa untuk beberapa port, resolusi fungsi alternatif dari beberapa kesimpulan membuat tidak mungkin menggunakan output lain untuk output input digital universal.

Port sebagai universal digital i / o

Semua port adalah port I / O dua arah dengan resistor pull-up opsional. Gambar 30 menggambarkan diagram fungsi dari satu jalur port input-output, ditunjukkan sebagai PXN.


Gambar 30 - Organisasi Universal Digital I / O (1)

Kira-kira. 1: WPX, WDX, RRX, RPX dan RDX Sinyal umum dalam satu port. Sinyal CLKI / O, Tidur, dan PUD adalah umum untuk semua port.

Pengaturan kesimpulan

Mode dan kondisi untuk setiap output ditentukan oleh nilai digit yang sesuai dari tiga register: DDXN, PORTXN dan PINXN. Seperti yang ditunjukkan dalam "Deskripsi Register Port I / O", akses ke bit DDXN dimungkinkan pada alamat DDRX di ruang I / O dan, masing-masing, untuk portxn bit di alamat portx, dan pinxn bit di PINX

DDXN DDRX DDRX bit menentukan arah jalur I / O. Jika DDXN \u003d 1, maka PXN dikonfigurasi untuk ditampilkan. Jika DDXN \u003d 0, maka PXN dikonfigurasi untuk masuk.

Jika PORTXN \u003d 1 Saat mengkonfigurasi garis port ke input, koneksi resistor pengetatan diizinkan. Untuk mematikan resistor ini, Anda harus menulis ke log portxn. 0 atau konfigurasikan garis port ke output. Selama reset, semua garis port berada dalam keadaan ketiga (ditekan tinggi), bahkan jika sinkronisasi tidak berfungsi.

Jika PORTXN \u003d 1 Saat mengkonfigurasi garis port ke output, status output akan ditentukan oleh nilai PortXN.

Karena entri simultan ke dalam register DDRX dan PORTX tidak mungkin, maka ketika beralih antara keadaan ketiga ((ddxn, portxn) \u003d 0bl00) dan output dari log. 1 (((DDXN, PORTXN) \u003d 0b11) Negara perantara harus terjadi atau dengan resistor pengetatan yang terhubung ((ddxn, portxn) \u003d 0b01) atau dengan output log. 0 ((ddxn, portxn) \u003d 0b10). Sebagai aturan, transisi melalui keadaan dengan koneksi resistor pull-up setara dengan keadaan output log.1, jika output mikrokontroler dikaitkan dengan input impedansi tinggi. Jika tidak, perlu untuk membuat Sfior PUD PUD \u200b\u200bbit untuk mematikan semua resistor pengetatan pada semua port.

Beralih antara memasukkan resistor pengetatan dan output level rendah terkait dengan masalah yang sama. Oleh karena itu, pengguna terpaksa menggunakan atau keadaan ketiga ((DDXN, PORTXN) \u003d 0bl00) atau log output. 1 ((DDXN, PORTXN) \u003d 0b11) sebagai langkah menengah.

Tabel 25 merangkum aksi sinyal kontrol ke status output.

Tabel 25 - Mengatur output port

Ddxn. PORTXN. Pud (di sfior) Input output Ketat resistor Komentar
0 0 X. Memasukkan Tidak
0 1 0 Memasukkan Iya PXN akan menjadi sumber saat ini saat menerapkan level rendah eksternal
0 1 1 Memasukkan Tidak Negara ketiga (negara Z)
1 0 X. Keluaran Tidak Log keluaran. 0 (arus mengalir)
1 1 X. Keluaran Tidak Log keluaran. 1 (arus mengalir)

Baca Status Output

Terlepas dari nilai file data DDXN, status output port dapat diwawancarai melalui bit PINXN Register. Seperti yang ditunjukkan pada Gambar 30, bit register pinxn dan kait pemicu precedes itu adalah sinkronisasi. Pendekatan ini Memungkinkan Anda menghindari metastabilitas jika perubahan dalam output terjadi di dekat bagian depan sinkronisasi internal. Namun, pendekatan ini dikaitkan dengan terjadinya penundaan. Gambar 31 menyajikan diagram sinkronisasi sementara selama survei yang dilampirkan secara eksternal ke tingkat output. Durasi penundaan minimum dan maksimum pada distribusi sinyal diindikasikan sebagai TPD, MAX dan TPD, masing-masing.


Gambar 31 - sinkronisasi selama survei level yang diterapkan pada output

Dalam contoh berikut, ditampilkan cara menginstal pada baris 0 dan 1 port ke log. 1, dan pada baris 2 dan 3 - log. 0, serta cara mengkonfigurasi garis 4 ... 7 untuk memasukkan dengan koneksi ketat resistor pada baris 6 dan 7. Status yang dihasilkan dari garis dibaca kembali, tetapi, dengan mempertimbangkan di atas, nop Pernyataan diaktifkan untuk memastikan kemungkinan membaca kembali hanya keadaan yang ditugaskan dari beberapa kesimpulan.

Kode sampel pada assembler (1) ...; Biarkan saya menarik dan memasang level output tinggi; Tentukan arah garis-garis port LDI R16, (1<

Kira-kira. 1: Program Assembler menggunakan dua kali register untuk meminimalkan interval waktu dari penyesuaian resistor pull-up pada pelepasan 0, 1, 6 dan 7 ke pemasangan arah arah arah yang memungkinkan log. 0 Pada baris 2 dan 3 dan mengganti level tinggi pada pelepasan 0 dan 1, dibentuk dengan menghubungkan ketat resistor ke tingkat tinggi driver arus tinggi.

Resolusi input digital dan mode tidur

Seperti yang ditunjukkan pada Gambar 30, sinyal digital input dapat dihosting ke total input pemicu SCHMITA. Sinyal yang ditandai pada gambar saat tidur diatur ketika mikrokontroler diterjemahkan ke mode power-down, mode ekonomis, mode tugas dan mode tugas lanjutan. Ini menghindari peningkatan konsumsi saat ini jika beberapa sinyal input berada dalam keadaan terapung atau tingkat sinyal analog input akan dekat dengan VCC / 2.

Sinyal tidur diabaikan oleh input interupsi eksternal. Jika permintaan untuk interupsi eksternal dinonaktifkan, Tidur valid untuk kesimpulan ini. Tidur juga diabaikan pada beberapa input lain saat melakukan fungsi alternatif mereka (lihat "Fungsi port alternatif").

Jika pada output interupsi asinkron eksternal, dikonfigurasi untuk mengganggu bagian depan, jatuh depan atau perubahan apa pun, ada level log. 1 Dan pada saat yang sama interupsi eksternal tidak diizinkan, bendera yang sesuai dari interupsi eksternal akan diatur saat keluar dari mode tidur yang disebutkan di atas, karena Fungsi input shunt dalam mode tidur menghasilkan perubahan logis.

Kesimpulan yang tidak terhubung

Jika beberapa kesimpulan tetap tidak digunakan, disarankan untuk menjamin keberadaan tingkat logis tertentu. Terlepas dari kenyataan bahwa sebagian besar input digital dinonaktifkan dalam mode tidur yang dalam, seperti dijelaskan di atas, perlu untuk menghindari input mengambang untuk menghindari peningkatan konsumsi arus dalam semua mode lain dari mikrokontroler, di mana input digital diizinkan (reset, mode aktif dan mode siaga).

Metode paling sederhana untuk menjamin keberadaan tingkat tertentu pada output yang tidak digunakan adalah untuk menyelesaikan koneksi resistor pengetatan bagian dalam. Namun, dalam hal ini, dalam mode reset, resistor pull-up akan dinonaktifkan. Jika konsumsi rendah diperlukan dan dalam mode reset, perlu untuk memasang resistor pengetatan eksternal ke daya plus atau minus. Menghubungkan output langsung ke VCC atau GND tidak disarankan, karena Mungkin ada arus berbahaya dengan konfigurasi acak dari output tersebut pada output data.

Operasi pelacur didasarkan pada operasi logis yang telah kami pertimbangkan sebelumnya. Mereka memainkan peran kunci dalam pemrograman mikrokontroler AVR dan jenis lainnya. Hampir tidak ada biaya program tanpa menggunakan operasi yang dikalahkan. Sebelum itu, kami sengaja menghindarinya untuk memfasilitasi proses mempelajari pemrograman MK.

Dalam semua artikel sebelumnya, kami hanya memprogram port I / O dan tidak menggunakan node tertanam tambahan, misalnya, seperti timer, konverter analog-digital, interupsi, dan perangkat internal lainnya tanpa daya MK.

Sebelum melanjutkan pengembangan perangkat MK bawaan, Anda harus belajar bagaimana mengelola atau memeriksa bit individu dari register AVR MK. Sebelumnya, kami melakukan pemeriksaan atau mengatur debit sekaligus. Mari kita berurusan dengan apa bedanya, dan kemudian lanjutkan lebih jauh.

Operasi pembotolan

Paling sering, ketika memprogram mikrokontroler AVR, kami gunakan karena memiliki visibilitas yang lebih besar dibandingkan dengan dan jelas bagi pemrogram pemula MK. Misalnya, kita perlu menginstal hanya sedikit ke-3 port D. Untuk ini, seperti yang sudah kita ketahui, Anda dapat menggunakan kode biner berikut:

Portd \u003d 0b00001000;

Namun, kami menetapkan kategori ke-3 oleh tim ini, dan yang lainnya (0, 1, 2, 4, 5, 6 dan 7) kami buang nol. Dan sekarang mari kita menyajikan situasi bahwa pembuangan ke-6 dan ke-7 terlibat sebagai input ADC dan pada saat ini untuk kesimpulan yang sesuai dari MK menerima sinyal dari perangkat apa pun, dan kami mendaftar ke perintah di atas, setel ulang sinyal-sinyal ini. Akibatnya, mikrokontroler tidak melihat mereka dan percaya bahwa sinyal tidak datang. Oleh karena itu, alih-alih tim seperti itu, kita harus menerapkan yang lain, yang hanya akan menginstal bit ke-3 per unit, sementara tidak mempengaruhi bit lainnya. Untuk ini, operasi beat berikut biasanya diterapkan:

Portd | \u003d (1<<3);

Sintaks yang akan kami jelaskan secara rinci di bawah ini. Dan sekarang satu contoh lagi. Misalkan kita perlu memeriksa status debit ke-3 dari register pind, sehingga memeriksa status tombol. Jika debit ini diatur ulang ke nol, maka kita tahu bahwa tombol ditekan dan kemudian kode perintah dilakukan yang sesuai dengan kondisi tombol yang ditekan. Kami sebelumnya menggunakan entri berikut:

if (Pind \u003d\u003d 0B00000000)

(kode apa pun)

Namun, dengan bantuannya, kami periksa tidak terpisah, - 3, dan segera semua bit dari register Pind. Oleh karena itu, bahkan jika tombol ditekan dan debit yang diinginkan diatur ulang, tetapi pada saat ini sinyal akan menerima sinyal ke output lain dari port d, kehidupan yang sesuai akan diinstal dalam satu, dan kondisi dalam tanda kurung akan Salah. Akibatnya, kode yang berlokasi dalam kurung keriting tidak akan dilakukan bahkan ketika tombol ditekan. Oleh karena itu, untuk memverifikasi keadaan masing-masing bit ke-3 dari register Pind, operasi batch harus diterapkan:

jika (~ pindel & (1<<3))

(kode apa pun)

Untuk bekerja dengan bit mikrokontroler terpisah di Arsenal pemrograman C, ada yang dengannya Anda dapat mengubah atau memeriksa status satu atau lebih individu segera.

Menginstal bit yang terpisah

Untuk memasang bit terpisah, misalnya port d, operasi bengkok diterapkan atau. Itu dia yang kami gunakan di awal artikel.

PortD \u003d 0B00011100; // makna awal.

PortD \u003d PortD | (satu<<0); применяем побитовую ИЛИ

Portd | \u003d (1<<0); // сокращенная форма записи

PortD \u003d\u003d 0B00011101; // Hasilnya

Perintah ini melakukan instalasi pelepasan nol, dan sisa daun tidak berubah.

Misalnya, instal kategori ke-6 port D. lainnya

PortD \u003d 0B00011100; // keadaan awal port

Portd | \u003d (1<<6); //

PortD \u003d\u003d 0b01011100; // Hasilnya

Untuk merekam unit segera ke beberapa bit terpisah, seperti nol, keenam dan ketujuh port Dgn B. Entri berikutnya berlaku.

Portb \u003d 0b00011100; // makna awal.

Portb | \u003d (1<<0) | (1<<6) | (1<<7); //

Portb \u003d\u003d 0b1011101; // Hasilnya

Reset (reset) bit individual

Untuk mengatur ulang bit terpisah, tiga perintah yang ditinjau sebelumnya diterapkan: .

Mari kita atur ulang kategori ke-3 dari register Portc dan biarkan sisanya.

Portc \u003d 0B00011100;

Portc & \u003d ~ (1<<3);

Portc \u003d\u003d 0B00010100;

Lakukan tindakan serupa untuk kategori ke-2 dan ke-4:

Portc \u003d 0b00111110;

Portc & \u003d ~ ((1)<<2) | (1<<4));

Portc \u003d\u003d 0b00101010;

Bit switching.

Selain instalasi dan reset, perintah yang berguna juga digunakan, yang mengganti bit terpisah ke keadaan berlawanan: satu dalam nol dan sebaliknya. Pengoperasian logis ini banyak digunakan dalam membangun berbagai efek pencahayaan, misalnya, seperti karangan bunga tahun baru. Pertimbangkan contoh porta

Porta \u003d 0b00011111;

Porta ^ \u003d (1<<2);

Porta \u003d\u003d 0b00011011;

Ubah keadaan nol, kedua dan keenam:

Porta \u003d 0b00011111;

Porta ^ \u003d (1<<0) | (1<<2) | (1<<6);

Porta \u003d\u003d 0b01011010;

Periksa keadaan bit yang terpisah. Biarkan saya mengingatkan Anda bahwa inspeksi (tidak seperti perekaman) dari port I / O dilakukan dengan membaca data dari register PIN.

Paling sering, pemeriksaan dilakukan oleh salah satu dari dua operator siklus: jika dan sementara. Kami sudah terbiasa dengan operator ini.

Memeriksa debit untuk keberadaan nol logis (reset) dengan jika

if (0 \u003d\u003d (pind & (1<<3)))

Jika digit ketiga port D diatur ulang, maka Code1 dijalankan. Jika tidak, Code2 dilakukan.

Tindakan serupa dilakukan dengan bentuk perekaman:

jika (~ pindel & (1<<3))

Periksa debit untuk keberadaan unit logis (instalasi) dengan jika

if (0! \u003d (Pind & (1<<3)))

if (Pind & (1)<<3))

Dua siklus di atas bekerja sama, tetapi dapat, karena fleksibilitas bahasa pemrograman C, memiliki bentuk perekaman yang berbeda. Operasi! \u003d Menunjukkan tidak sama. Jika pelepasan ketiga port PD I / O diatur (unit), ia dieksekusi Code1, jika tidak - Code2.

Menunggu bit dengan sementara

sementara (Pind & (1<<5))

Code1 akan dieksekusi sedangkan kategori 5 dari register pind diatur. Saat mengatur ulang, Code2 akan dieksekusi.

Menunggu instalasi batal dengan sementara

Di sini, sintaks dari bahasa C memungkinkan Anda untuk menulis kode dengan dua cara paling umum. Dalam praktiknya, kedua jenis perekaman diterapkan.

Salah satu aspek terpenting dari pemrograman mikrokontroler adalah bekerja dengan register dan port. Mikrokontroler AVR Series memiliki beberapa register I / O dan 32 register tujuan umum. Programmer tidak dapat secara langsung menulis nomor ke register input / output. Sebagai gantinya, itu harus menulis nomor ke register tujuan umum, dan kemudian menyalin nilai register ini ke register I / O. Register kerja diindikasikan sebagai R1, R2, ..., R31.

Untuk menyederhanakan program penulisan, sangat nyaman untuk memberikan nama register. Dianjurkan untuk memberikan nama yang sesuai dengan informasi yang disimpan. Misalnya, jika register R16 digunakan untuk menyimpan informasi sementara, maka dapat disebut temp. Ini dilakukan sebagai berikut:

Agar tidak "menelepon" register I / O dan register utama mikrokontroler, sudah cukup pada awal program untuk menghubungkan file header yang berlaku untuk mikrokontroler yang digunakan. Itu. Itu tidak harus memberikan nama port port, timer / counter, dll. Misalnya, jika program dirancang untuk mikrokontroler AT90S8515:

Termasuk "8515def.inc"

Untuk mikrokontroler AT90S1200, mikrokontroler AVR pertama, register input / output memiliki angka dari $ 0 hingga $ 3F (tergantung pada model MK). Secara terpisah, Anda dapat memilih register I / O Portb, PINB, PORTD, PIND (mereka memiliki notasi alfabet setelah menghubungkan 1200def.inc, dan alamatnya $ 18, $ 16, $ 12, $ 10 - Setuju sangat sulit untuk menjaga konstanta digital Di kepala saya, nama huruf yang lebih mudah). Mikrokontroler terbaru port AVR jauh lebih besar, mereka disebut A, B, C, D, E ...

Pertimbangkan lokasi temuan dari Microcontroller Attiy2313 yang populer. Kaki 2-9, 11 dengan nama PD0 - PD7 adalah port D, mirip dengan port B. Harap dicatat bahwa port B adalah delapan-bit, dan port d adalah tujuh.

Port dapat bekerja sebagai input dan sebagai output. Jika port berfungsi sebagai input, maka untuk menghitung nilai, Anda perlu mengakses register PINB atau PIND - tergantung pada port yang dibaca. Jika beberapa pinus tingkat tinggi sesuai dengan log. "1", maka bit yang sesuai dalam nilai baca akan dipasang di "1". Kesimpulan mampu menahan arus hingga 20 mA, tetapi tidak layak dilupakan tentang total arus dari semua port port. Ada batasan. Jika port output, nilai pada garis port diinstal dengan merekam nilai yang sesuai dengan PortB atau PortD Port Register. Untuk membuat log. "1" Pada output pelabuhan, bit yang sesuai dalam PortB atau register PortD harus diinstal.

Poin kerja paling penting dengan pelabuhan adalah bekerja dengan register kait yang bertanggung jawab untuk pengoperasian garis port ke input atau keluar. Nama DDRX register ini, di mana X adalah surat port. Untuk membuat keluaran kaki, kita harus menulis ke bit yang sesuai "1". Misalnya, kami ingin membuat port PB7 dari port di pintu masuk, dan output kaki yang tersisa, maka untuk ini Anda perlu menulis ke nilai register DDRB 0B01111111. Awalan 0B berarti bahwa jumlahnya dicatat dalam bentuk biner. Saat memulai, register DDRX diatur ulang, I.E. Semua kaki adalah input. Disarankan kaki yang tidak digunakan di perangkat untuk membuat input.

Pertimbangkan program sederhana yang bekerja dengan port mikrokontroler:

Termasuk "8515def.inc"; Hubungkan file dengan deskripsi register .DEF TEMP \u003d R16 RJMP reset; Vektor transisi saat reset ulang: LDI TEMP, 0B00000011; Tentukan PC0 dan PC1 sebagai DDRC, TEMP LDI TEMS, 0B00000001; Kami menyalakan LED di kaki PC0 Portc, Temp di Temp, Pinc; Baca level-level dari Port ... Loop :; Siklus utama nop rjmp loop

Sedikit

Membaca / menulis.

Nilai awal

· Bit 7 - izin dari semua interupsi. Untuk menyelesaikan interupsi, bit ini harus diatur ke status 1. Resolusi interupsi spesifik dilakukan oleh EIMSK dan TIMSK Interrupt Register. Jika bit ini dihapus (\u003d 0), maka tidak ada interupsi yang diproses. Hardware bit dihapus setelah terjadinya interupsi dan dipasang untuk resolusi interupsi selanjutnya oleh perintah RETI.
· Bit 6 - Salin sedikit konservasi. Blod dan BST bits Copy Command menggunakan bit ini sebagai sumber dan penerima selama pertempuran. BST Command Command Tujuan umum disalin ke bit t, bit perintah BLD T disalin ke bit register tujuan umum.
· Bit 5 - Bendera Semi-Mannenos. Ini menunjukkan transfer antara tetrad saat melakukan sejumlah operasi aritmatika.
· Bit 4 - tanda tanda. Bit S memiliki nilai hasil dari operasi yang tidak termasuk atau (n (+) v) di atas bendera dari nilai negatif (n) dan penambahan pada dua flag overflow (V).

· Bit 3 - Selain dua bendera overflow. Ini mendukung aritmatika penambahan dua.
· Bit 2 - Bendera Nilai Negatif. Bendera ini menunjukkan hasil negatif dari sejumlah operasi aritmatika dan logis.
· Bit 1 - nol bendera nilai. Bendera ini menunjukkan hasil nol dari sejumlah operasi aritmatika dan logis.
· Bit 0 - bendera transfer. Bendera ini menunjukkan transfer operasi aritmatika dan logis.

Mikrokontroler AT90S8535 memiliki 4 port I / O paralel A, B, C dan D.
Port A adalah port dua bit. Interaksi dengan port A dilakukan melalui tiga register dalam ruang input data / output: register data - PORTA, $ 1B ($ 3B), register arah data - DDRA, $ 1A ($ 3A), PINA, $ 19 ($ 39). PINA Register hanya memberikan kemungkinan membaca, dan register Porta dan DDRA adalah kemungkinan membaca dan menulis. PINA register bukan register dalam arti penuh kata. Banding untuk memastikan membaca keadaan fisik setiap output port. Port A juga berfungsi untuk memasukkan sinyal A / D analog.

Daftar data port A -Porta

Sedikit

Membaca / menulis.

Nilai awal

Daftar data data port A -Ddra.

Sedikit

Membaca / menulis.

Nilai awal

Port a -Pina.

Sedikit

Membaca / menulis.

Nilai awal

Port B adalah port I / O dua-bit. Serta port dan interaksi dengan port dalam dilakukan melalui tiga register dalam ruang input / output data: Daftar data - Portb, $ 18 ($ 38), Register Direction Data - DDRB, $ 17 ($ 37) dan $ 37) dan Daftar Input - PINB, $ 16 ($ 36). PINB Register hanya menyediakan bacaan. PINB Register bukan register dalam arti penuh kata. Banding untuk memastikan membaca keadaan fisik setiap output port. Gambar port di dapat melakukan fungsi alternatif yang ditunjukkan dalam tabel. 2.1.

Tabel 2.1. Fungsi alternatif temuan port di

Output port

Fitur alternatif

T0 - Timer / Timer / Counter Tail input 0

T1 - entri jam waktu / meter 1

AIN0 - Kesimpulan pembanding positif

AIN1 - Kesimpulan pembanding negatif

- Pilihan Login SPI

MOSI - Instalasi Timbal Output / Speed \u200b\u200bSPI Input

MISO - Instalasi Login Login / Speed \u200b\u200bOutput SPI

SCK - SPI Clock Sinyal

Saat menggunakan kesimpulan untuk fungsi alternatif, register Portb, DDRB harus diinstal sesuai.

Daftar Data PortDgn B.Portb.

Sedikit

Membaca / menulis.

Nilai awal

Daftar Directing Port Data B -DDRB.

Sedikit

Membaca / menulis.

Nilai awal

Input Data Register B -Pinb.

Sedikit

Membaca / menulis.

Nilai awal

Port C adalah port I / O dua-bit. Juga, bagaimana port a dan interaksi dengan port C dilakukan melalui tiga register dalam memori data / output / output Ruang: Daftar data - Portc, $ 15 ($ 35), DRDRC, $ 14 ($ 34) dan masukan Daftar Data - Pinc, $ 13 ($ 33). Register PIN hanya memberikan kemungkinan membaca, dan register Portc dan DDRC adalah kemungkinan membaca dan menulis. Register PIN bukan register dalam arti penuh kata. Banding untuk memastikan membaca keadaan fisik setiap output port.
Di port dengan hanya dua output dapat melakukan fungsi alternatif: PC6 dan PC7 Kesimpulan Melakukan fungsi TOSC1 dan TOSC2 Timer / Counter 2.

Daftar Data PortC.Portc.

Sedikit

Membaca / menulis.

Nilai awal

Daftar Directing Port Data C -Ddrc.

Sedikit

Membaca / menulis.

Nilai awal

Input Data Register C -Pinc.

Sedikit

Membaca / menulis.

Nilai awal

Port D adalah port I / O dua-bit. Juga, seperti pada port a, b dan dengan interaksi dengan port d, melalui tiga register dalam ruang input / output data: Daftar data - PortDD, $ 12 ($ 32), Register Direction Data - DDRD, $ 11 ($ 31) Dan input register - Pind, $ 10 ($ 30). Pind Register menyediakan pembacaan, dan register PortD dan DDRD sedang membaca dan menulis. Register Pind bukan register dalam arti penuh kata. Banding untuk memastikan membaca keadaan fisik setiap output port.
Kesimpulan Port D dapat melakukan fungsi alternatif yang ditentukan dalam tabel. 2.2.

Tabel 2.2. Fungsi alternatif kesimpulan port d

Output port

Fitur alternatif

RXD - Pintu Masuk Penerima UART

TXD - output pemancar UART

INT0 - Input interupsi eksternal 0

Int1 - Input Interupsi Outdoor 1

OC1B - Perbandingan keluaran timer / counter 1

OC1A - Perbandingan keluaran dan penghitung waktu / penghitung 1

ICP - TIMER CAPTURE entri pemicu 1

OC2 - Timer / output perbandingan output penghitung 2

Saat menggunakan output untuk fungsi alternatif, PortD, register DDRD harus diinstal sesuai.

Daftar Data PortD.PortD.

Sedikit

Membaca / menulis.

Nilai awal

Daftar data portD.Ddrd.

Sedikit

Membaca / menulis.

Nilai awal

Port Input RegisterD.Pind.

Sedikit

Membaca / menulis.

Nilai awal

Sejak yang pertama dipertimbangkan adalah yang pertama, maka semua siswa pertama kali membuat pekerjaan yang sama untuk akuisisi keterampilan siswa untuk bekerja dengan kompleks laboratorium. Dari pekerjaan mereka, mereka diperkenalkan ke dalam PEVM masalah pengurangan yang sama antara antara 3 3, ditunjukkan pada paragraf 1.5.3.1. Setelah menyusun program, itu ditulis ke mikrokontroler tempat kerja dan pekerjaannya ditunjukkan oleh guru.
Setelah kenalan dengan kompleks, siswa mulai melakukan tugas individu. Di hadapan waktu, guru dapat memperumit tugas individu.