Sistem Tertanam - Panduan Cepat
Sistem
Suatu sistem adalah suatu pengaturan di mana semua unitnya berkumpul bekerja bersama sesuai dengan seperangkat aturan. Ini juga dapat didefinisikan sebagai cara bekerja, mengatur atau melakukan satu atau banyak tugas sesuai dengan rencana tetap. Misalnya, jam tangan adalah sistem tampilan waktu. Komponennya mengikuti seperangkat aturan untuk menunjukkan waktu. Jika salah satu bagiannya rusak, arloji akan berhenti bekerja. Jadi kita dapat mengatakan, dalam suatu sistem, semua subkomponennya bergantung satu sama lain.
Sistem Tertanam
Seperti namanya, Embedded berarti sesuatu yang melekat pada benda lain. Sistem tertanam dapat dianggap sebagai sistem perangkat keras komputer yang memiliki perangkat lunak yang tertanam di dalamnya. Sistem tertanam dapat menjadi sistem independen atau dapat menjadi bagian dari sistem besar. Sistem tertanam adalah sistem berbasis mikrokontroler atau mikroprosesor yang dirancang untuk melakukan tugas tertentu. Misalnya, alarm kebakaran adalah sistem tertanam; itu hanya akan merasakan asap.
Sistem tertanam memiliki tiga komponen -
Ini memiliki perangkat keras.
Ini memiliki perangkat lunak aplikasi.
Ini memiliki sistem Operasi Waktu Nyata (RTOS) yang mengawasi perangkat lunak aplikasi dan menyediakan mekanisme untuk membiarkan prosesor menjalankan proses sesuai penjadwalan dengan mengikuti rencana untuk mengontrol latensi. RTOS menentukan cara kerja sistem. Ini menetapkan aturan selama pelaksanaan program aplikasi. Sistem tertanam skala kecil mungkin tidak memiliki RTOS.
Jadi kita dapat mendefinisikan sistem tertanam sebagai berbasis Mikrokontroler, digerakkan oleh perangkat lunak, dapat diandalkan, sistem kontrol waktu nyata.
Karakteristik Sistem Tertanam
Single-functioned- Sistem tertanam biasanya melakukan operasi khusus dan melakukan hal yang sama berulang kali. Contoh: Sebuah pager selalu berfungsi sebagai pager.
Tightly constrained- Semua sistem komputasi memiliki batasan pada metrik desain, tetapi yang menggunakan sistem tertanam bisa sangat ketat. Metrik desain adalah ukuran fitur implementasi seperti biaya, ukuran, daya, dan kinerjanya. Ukurannya harus pas pada satu chip, harus bekerja cukup cepat untuk memproses data dalam waktu nyata dan mengonsumsi daya minimum untuk memperpanjang masa pakai baterai.
Reactive and Real time- Banyak sistem tertanam harus terus bereaksi terhadap perubahan dalam lingkungan sistem dan harus menghitung hasil tertentu secara real time tanpa penundaan. Pertimbangkan contoh pengontrol jelajah mobil; itu terus memantau dan bereaksi terhadap sensor kecepatan dan rem. Itu harus menghitung percepatan atau de-percepatan berulang kali dalam waktu terbatas; penghitungan yang tertunda dapat mengakibatkan kegagalan pengendalian mobil.
Microprocessors based - Harus berbasis mikroprosesor atau mikrokontroler.
Memory- Harus memiliki memori, karena perangkat lunaknya biasanya tertanam di ROM. Itu tidak membutuhkan memori sekunder di komputer.
Connected - Ini harus memiliki periferal yang terhubung untuk menghubungkan perangkat input dan output.
HW-SW systems- Perangkat lunak digunakan untuk lebih banyak fitur dan fleksibilitas. Perangkat keras digunakan untuk kinerja dan keamanan.
Keuntungan
- Mudah Disesuaikan
- Konsumsi daya rendah
- Biaya rendah
- Performa yang ditingkatkan
Kekurangan
- Upaya pengembangan tinggi
- Waktu yang lebih lama untuk memasarkan
Struktur Dasar Sistem Tertanam
Ilustrasi berikut menunjukkan struktur dasar dari sistem tertanam -
Sensor- Ini mengukur kuantitas fisik dan mengubahnya menjadi sinyal listrik yang dapat dibaca oleh pengamat atau oleh instrumen elektronik seperti konverter A2D. Sebuah sensor menyimpan kuantitas terukur ke memori.
A-D Converter - Konverter analog-ke-digital mengubah sinyal analog yang dikirim oleh sensor menjadi sinyal digital.
Processor & ASICs - Prosesor memproses data untuk mengukur output dan menyimpannya ke memori.
D-A Converter - Konverter digital-ke-analog mengubah data digital yang dimasukkan oleh prosesor ke data analog
Actuator - Aktuator membandingkan keluaran yang diberikan oleh Konverter DA dengan keluaran aktual (yang diharapkan) yang disimpan di dalamnya dan menyimpan keluaran yang disetujui.
Prosesor adalah jantung dari sistem tertanam. Ini adalah unit dasar yang mengambil input dan menghasilkan output setelah memproses data. Untuk perancang sistem tertanam, perlu memiliki pengetahuan tentang mikroprosesor dan mikrokontroler.
Prosesor dalam Sistem
Prosesor memiliki dua unit penting -
- Unit Kontrol Aliran Program (CU)
- Unit Eksekusi (UE)
CU mencakup unit pengambilan untuk mengambil instruksi dari memori. Uni Eropa memiliki sirkuit yang menerapkan instruksi yang berkaitan dengan operasi transfer data dan konversi data dari satu bentuk ke bentuk lainnya.
Uni Eropa mencakup Arithmetic and Logical Unit (ALU) dan juga sirkuit yang menjalankan instruksi untuk tugas kontrol program seperti interupsi, atau lompat ke set instruksi lain.
Prosesor menjalankan siklus pengambilan dan mengeksekusi instruksi dalam urutan yang sama seperti saat diambil dari memori.
Jenis Prosesor
Prosesor dapat dari kategori berikut -
Prosesor Tujuan Umum (GPP)
- Microprocessor
- Microcontroller
- Prosesor Tertanam
- Prosesor Sinyal Digital
- Prosesor Media
Prosesor Sistem Khusus Aplikasi (ASSP)
Prosesor Instruksi Khusus Aplikasi (ASIP)
Inti GPP atau inti ASIP pada sirkuit Terpadu Khusus Aplikasi (ASIC) atau sirkuit Integrasi Skala Sangat Besar (VLSI).
Mikroprosesor
Mikroprosesor adalah chip VLSI tunggal yang memiliki CPU. Selain itu, mungkin juga memiliki unit lain seperti pelatih, unit aritmatika pemrosesan floating point, dan unit pipelining yang membantu pemrosesan instruksi lebih cepat.
Siklus ambil-dan-eksekusi mikroprosesor generasi sebelumnya dipandu oleh frekuensi clock dengan urutan ~ 1 MHz. Prosesor sekarang beroperasi pada frekuensi clock 2GHz
Mikrokontroler
Mikrokontroler adalah unit VLSI chip tunggal (juga disebut microcomputer) yang, meskipun memiliki kemampuan komputasi terbatas, memiliki kemampuan input / output yang ditingkatkan dan sejumlah unit fungsional on-chip.
CPU | RAM | ROM |
Port I / O | Timer | Port COM Serial |
Mikrokontroler terutama digunakan dalam sistem tertanam untuk aplikasi kontrol waktu nyata dengan memori dan perangkat program on-chip.
Mikroprosesor vs Mikrokontroler
Sekarang mari kita lihat perbedaan paling mencolok antara mikroprosesor dan mikrokontroler.
Mikroprosesor | Mikrokontroler |
---|---|
Mikroprosesor bersifat multitasking. Dapat melakukan banyak tugas sekaligus. Misalnya, di komputer kita dapat memutar musik sambil menulis teks di editor teks. | Berorientasi tugas tunggal. Misalnya, mesin cuci didesain untuk mencuci pakaian saja. |
RAM, ROM, Port I / O, dan Timer dapat ditambahkan secara eksternal dan jumlahnya dapat bervariasi. | RAM, ROM, Port I / O, dan Timer tidak dapat ditambahkan secara eksternal. Komponen-komponen ini harus disematkan bersama pada sebuah chip dan ditetapkan jumlahnya. |
Desainer dapat menentukan jumlah memori atau port I / O yang dibutuhkan. | Nomor tetap untuk memori atau I / O membuat mikrokontroler ideal untuk tugas yang terbatas tetapi spesifik. |
Dukungan eksternal memori eksternal dan port I / O membuat sistem berbasis mikroprosesor lebih berat dan lebih mahal. | Mikrokontroler ringan dan lebih murah daripada mikroprosesor. |
Perangkat eksternal membutuhkan lebih banyak ruang dan konsumsi dayanya lebih tinggi. | Sistem berbasis mikrokontroler mengkonsumsi lebih sedikit daya dan lebih sedikit ruang. |
Mikrokontroler 8051 bekerja dengan bus data 8-bit. Sehingga mereka dapat mendukung memori data eksternal hingga 64K dan memori program eksternal paling baik 64k. Secara kolektif, 8051 mikrokontroler dapat menangani 128k memori eksternal.
Ketika data dan kode berada di blok memori yang berbeda, maka arsitektur disebut Harvard architecture. Jika data dan kode terletak di blok memori yang sama, maka arsitektur disebutVon Neumann architecture.
Arsitektur Von Neumann
Arsitektur Von Neumann pertama kali diusulkan oleh seorang ilmuwan komputer John von Neumann. Dalam arsitektur ini, ada satu jalur data atau bus untuk instruksi dan data. Akibatnya, CPU melakukan satu operasi dalam satu waktu. Ia mengambil instruksi dari memori, atau melakukan operasi baca / tulis pada data. Jadi pengambilan instruksi dan operasi data tidak dapat terjadi secara bersamaan, berbagi bus umum.
Arsitektur Von-Neumann mendukung perangkat keras sederhana. Ini memungkinkan penggunaan satu memori berurutan. Kecepatan pemrosesan saat ini jauh melebihi waktu akses memori, dan kami menggunakan memori (cache) lokal yang sangat cepat tetapi sedikit untuk prosesor.
Arsitektur Harvard
Arsitektur Harvard menawarkan penyimpanan terpisah dan bus sinyal untuk instruksi dan data. Arsitektur ini memiliki penyimpanan data yang seluruhnya ada di dalam CPU, dan tidak ada akses ke penyimpanan instruksi sebagai data. Komputer memiliki area memori terpisah untuk instruksi program dan data menggunakan bus data internal, memungkinkan akses simultan ke instruksi dan data.
Program perlu dimuat oleh operator; prosesor tidak bisa boot sendiri. Dalam arsitektur Harvard, tidak perlu membuat dua properti berbagi memori.
Arsitektur Von-Neumann vs Arsitektur Harvard
Poin-poin berikut membedakan Arsitektur Von Neumann dari Arsitektur Harvard.
Arsitektur Von-Neumann | Arsitektur Harvard |
---|---|
Memori tunggal untuk digunakan bersama oleh kode dan data. | Memori terpisah untuk kode dan data. |
Prosesor perlu mengambil kode dalam siklus jam terpisah dan data dalam siklus jam lain. Jadi itu membutuhkan dua siklus clock. | Siklus jam tunggal sudah cukup, karena bus terpisah digunakan untuk mengakses kode dan data. |
Kecepatan lebih tinggi, sehingga memakan waktu lebih sedikit. | Lebih lambat dalam kecepatan, sehingga lebih memakan waktu. |
Sederhana dalam desain. | Kompleks dalam desain. |
CISC dan RISC
CISC adalah Komputer Set Instruksi Kompleks. Ini adalah komputer yang dapat menangani sejumlah besar instruksi.
Pada awal 1980-an, perancang komputer merekomendasikan bahwa komputer harus menggunakan lebih sedikit instruksi dengan konstruksi sederhana sehingga mereka dapat dieksekusi lebih cepat di dalam CPU tanpa harus menggunakan memori. Komputer tersebut diklasifikasikan sebagai Reduced Instruction Set Computer atau RISC.
CISC vs RISC
Poin-poin berikut membedakan CISC dari RISC -
CISC | RISC |
---|---|
Set instruksi yang lebih besar. Mudah diprogram | Set Instruksi yang lebih kecil. Sulit untuk diprogram. |
Desain kompiler yang lebih sederhana, dengan mempertimbangkan set instruksi yang lebih besar. | Desain kompiler yang kompleks. |
Banyak mode pengalamatan yang menyebabkan format instruksi yang kompleks. | Beberapa mode pengalamatan, perbaiki format instruksi. |
Panjang instruksi bervariasi. | Panjang instruksi bervariasi. |
Siklus jam yang lebih tinggi per detik. | Siklus jam rendah per detik. |
Penekanannya pada perangkat keras. | Penekanannya ada pada perangkat lunak. |
Unit kontrol mengimplementasikan set instruksi besar menggunakan unit program mikro. | Setiap instruksi harus dijalankan oleh perangkat keras. |
Eksekusi lebih lambat, karena instruksi harus dibaca dari memori dan diterjemahkan oleh unit decoder. | Eksekusi lebih cepat, karena setiap instruksi akan dieksekusi oleh perangkat keras. |
Pipelining tidak memungkinkan. | Perpipaan instruksi dimungkinkan, dengan mempertimbangkan siklus clock tunggal. |
Compiler dan Assembler
Penyusun
Kompiler adalah program komputer (atau sekumpulan program) yang mengubah kode sumber yang ditulis dalam bahasa pemrograman (bahasa sumber) menjadi bahasa komputer lain (biasanya format biner). Alasan paling umum untuk konversi adalah untuk membuat program yang dapat dieksekusi. Nama "compiler" terutama digunakan untuk program yang menerjemahkan kode sumber dari bahasa pemrograman tingkat tinggi ke bahasa tingkat rendah (misalnya, bahasa rakitan atau kode mesin).
Cross-Compiler
Jika program yang dikompilasi dapat berjalan di komputer yang memiliki CPU atau sistem operasi yang berbeda dengan komputer tempat kompilator mengompilasi program, maka kompilator tersebut disebut sebagai kompilator silang.
Pengurai
Program yang dapat menerjemahkan program dari bahasa tingkat rendah ke bahasa tingkat tinggi disebut dekompiler.
Konverter Bahasa
Program yang menerjemahkan program yang ditulis dalam berbagai bahasa tingkat tinggi biasanya disebut penerjemah bahasa, penerjemah sumber ke sumber, atau pengonversi bahasa.
Kompiler kemungkinan akan melakukan operasi berikut -
- Preprocessing
- Parsing
- Analisis Semantik (Terjemahan yang diarahkan sintaks)
- Pembuatan kode
- Optimasi kode
Perakit
Assembler adalah program yang mengambil instruksi komputer dasar (disebut sebagai bahasa assembly) dan mengubahnya menjadi pola bit yang dapat digunakan prosesor komputer untuk melakukan operasi dasarnya. Assembler membuat kode objek dengan menerjemahkan mnemonik instruksi assembly menjadi opcode, menyelesaikan nama simbolik ke lokasi memori. Bahasa assembly menggunakan mnemonik untuk mewakili setiap operasi mesin tingkat rendah (opcode).
Alat Debugging dalam Sistem Tertanam
Debugging adalah proses metodis untuk menemukan dan mengurangi jumlah bug dalam program komputer atau perangkat keras elektronik, sehingga berfungsi seperti yang diharapkan. Proses debug sulit dilakukan jika subsistem digabungkan erat, karena perubahan kecil di satu subsistem dapat membuat bug di subsistem lainnya. Alat debugging yang digunakan dalam sistem tertanam sangat berbeda dalam hal waktu pengembangan dan fitur debugging. Kami akan membahas di sini alat debugging berikut -
- Simulators
- Kit starter mikrokontroler
- Emulator
Simulator
Kode diuji untuk MCU / sistem dengan mensimulasikannya pada komputer host yang digunakan untuk pengembangan kode. Simulator mencoba memodelkan perilaku mikrokontroler lengkap dalam perangkat lunak.
Fungsi Simulator
Simulator melakukan fungsi berikut -
Mendefinisikan prosesor atau keluarga perangkat pemroses serta berbagai versinya untuk sistem target.
Pantau informasi mendetail dari bagian kode sumber dengan label dan argumen simbolis saat eksekusi berlangsung untuk setiap langkah.
Memberikan status RAM dan port simulasi dari sistem target untuk setiap eksekusi langkah.
Memantau respons sistem dan menentukan hasil.
Memberikan jejak output konten penghitung program versus register prosesor.
Memberikan arti rinci dari perintah saat ini.
Pantau informasi rinci dari perintah simulator saat ini dimasukkan dari keyboard atau dipilih dari menu.
Mendukung kondisi (hingga 8 atau 16 atau 32 kondisi) dan breakpoint tanpa syarat.
Menyediakan breakpoint dan pelacakan yang merupakan alat pengujian dan debugging yang penting.
Memfasilitasi sinkronisasi periferal internal dan penundaan.
Perangkat Pemula Mikrokontroler
Kit starter mikrokontroler terdiri dari -
- Papan perangkat keras (papan evaluasi)
- Pemrogram dalam sistem
- Beberapa alat perangkat lunak seperti kompiler, assembler, linker, dll.
- Kadang-kadang, versi evaluasi terbatas IDE dan ukuran kode dari sebuah compiler.
Keuntungan besar dari kit ini dibandingkan simulator adalah bahwa mereka bekerja secara real-time dan dengan demikian memungkinkan verifikasi fungsionalitas input / output yang mudah. Kit pemula, bagaimanapun, sepenuhnya cukup dan merupakan pilihan termurah untuk mengembangkan proyek mikrokontroler sederhana.
Emulator
Emulator adalah kit perangkat keras atau program perangkat lunak atau dapat keduanya mengemulasi fungsi satu sistem komputer (tamu) di sistem komputer lain (host), berbeda dari yang pertama, sehingga perilaku yang diemulasi sangat mirip dengan perilaku dari sistem nyata (tamu).
Emulasi mengacu pada kemampuan program komputer di perangkat elektronik untuk meniru (meniru) program atau perangkat lain. Emulasi berfokus pada pembuatan ulang lingkungan komputer asli. Emulator memiliki kemampuan untuk menjaga hubungan yang lebih dekat dengan keaslian objek digital. Emulator membantu pengguna untuk mengerjakan semua jenis aplikasi atau sistem operasi pada platform dengan cara yang sama seperti perangkat lunak berjalan seperti di lingkungan aslinya.
Perangkat Periferal dalam Sistem Tertanam
Sistem tertanam berkomunikasi dengan dunia luar melalui periferal mereka, seperti mengikuti & menit;
- Antarmuka Komunikasi Serial (SCI) seperti RS-232, RS-422, RS-485, dll.
- Antarmuka Komunikasi Serial Sinkron seperti I2C, SPI, SSC, dan ESSI
- Bus Serial Universal (USB)
- Kartu Multi Media (Kartu SD, Compact Flash, dll.)
- Jaringan seperti Ethernet, LonWorks, dll.
- Fieldbus seperti CAN-Bus, LIN-Bus, PROFIBUS, dll.
- imers seperti PLL (s), Capture / Compare dan Time Processing Units.
- IO Diskrit alias Input / Output Tujuan Umum (GPIO)
- Analog ke Digital / Digital ke Analog (ADC / DAC)
- Debugging seperti port JTAG, ISP, ICSP, BDM Port, BITP, dan DP9
Kriteria Pemilihan Mikrokontroler
Saat memilih mikrokontroler, pastikan mikrokontroler memenuhi tugas yang ada dan hemat biaya. Kita harus melihat apakah mikrokontroler 8-bit, 16-bit atau 32-bit dapat menangani kebutuhan komputasi suatu tugas dengan baik. Selain itu, poin-poin berikut harus diingat saat memilih mikrokontroler -
Speed - Berapa kecepatan tertinggi yang dapat didukung oleh mikrokontroler?
Packaging- Apakah DIP 40-pin (paket Dual-inline) atau QFP (paket Quad flat)? Ini penting dalam hal ruang, perakitan, dan pembuatan prototipe produk akhir.
Power Consumption - Ini adalah kriteria penting untuk produk bertenaga baterai.
Amount of RAM and ROM pada chip.
Count of I/O pins and Timers pada chip.
Cost per Unit - Ini penting dalam hal biaya akhir produk yang akan menggunakan mikrokontroler.
Selanjutnya, pastikan Anda memiliki alat seperti kompiler, debugger, dan assembler, yang tersedia dengan mikrokontroler. Yang paling penting dari semuanya, Anda harus membeli mikrokontroler dari sumber yang dapat diandalkan.
Sejarah Singkat 8051
Mikroprosesor pertama 4004 ditemukan oleh Intel Corporation. 8085 dan 8086mikroprosesor juga ditemukan oleh Intel. Pada tahun 1981, Intel memperkenalkan mikrokontroler 8-bit yang disebut8051. Itu disebut sebagaisystem on a chipkarena memiliki RAM 128 byte, ROM on-chip 4K byte, dua timer, satu port serial, dan 4 port (lebar 8-bit), semuanya dalam satu chip. Ketika menjadi sangat populer, Intel mengizinkan produsen lain untuk membuat dan memasarkan rasa berbeda dari 8051 dengan kode yang kompatibel dengan 8051. Ini berarti bahwa jika Anda menulis program Anda untuk satu rasa 8051, itu akan berjalan pada rasa lain juga, terlepas dari pabrikan. Ini telah menghasilkan beberapa versi dengan kecepatan dan jumlah RAM on-chip yang berbeda.
8051 Rasa / Anggota
8052 microcontroller- 8052 memiliki semua fitur standar mikrokontroler 8.051 serta RAM 128 byte tambahan dan timer tambahan. Ini juga memiliki 8K byte ROM program on-chip, bukan 4K byte.
8031 microcontroller- Ini adalah anggota lain dari keluarga 8051. Chip ini sering disebut sebagai ROM-less 8051, karena memiliki ROM on-chip 0K byte. Anda harus menambahkan ROM eksternal untuk menggunakannya, yang berisi program yang akan diambil dan dijalankan. Program ini bisa berukuran 64K byte. Tetapi dalam proses penambahan ROM eksternal ke 8031, itu kehilangan 2 port dari 4 port. Untuk mengatasi masalah ini, kita dapat menambahkan I / O eksternal ke 8031
Perbandingan antara 8.051 Anggota Keluarga
Tabel berikut membandingkan fitur-fitur yang tersedia pada 8051, 8052, dan 8031.
Fitur | 8051 | 8052 | 8031 |
---|---|---|---|
ROM (byte) | 4K | 8K | 0K |
RAM (byte) | 128 | 256 | 128 |
Timer | 2 | 3 | 2 |
Pin I / O | 32 | 32 | 32 |
Port serial | 1 | 1 | 1 |
Sumber interupsi | 6 | 8 | 6 |
Fitur Mikrokontroler 8051
Mikrokontroler 8051 dilengkapi dengan fitur-fitur berikut -
- Memori program (ROM) on-chip 4KB byte
- 128 byte on-chip data memory (RAM)
- Empat bank register
- 128 flag perangkat lunak yang ditentukan pengguna
- Bus data dua arah 8-bit
- Bus alamat searah 16-bit
- 32 register tujuan umum masing-masing 8-bit
- 16 bit Timer (biasanya 2, tetapi mungkin lebih atau kurang)
- Tiga interupsi internal dan dua interupsi eksternal
- Empat port 8-bit, (model pendek memiliki dua port 8-bit)
- Penghitung program 16-bit dan penunjuk data
- 8051 juga dapat memiliki sejumlah fitur khusus seperti UART, ADC, Op-amp, dll.
Diagram Blok Mikrokontroler 8051
Ilustrasi berikut menunjukkan diagram blok mikrokontroler 8051 -
Pada 8051, operasi I / O dilakukan menggunakan empat port dan 40 pin. Diagram pin berikut menunjukkan detail dari 40 pin. Port operasi I / O mencadangkan 32 pin di mana setiap port memiliki 8 pin. 8 pin lainnya ditetapkan sebagai V cc , GND, XTAL1, XTAL2, RST, EA (bar), ALE / PROG (bar), dan PSEN (bar).
Ini adalah 40 Pin PDIP (Paket Plastik Ganda Inline)
Note- Dalam paket DIP, pin pertama dan pin terakhir dapat dikenali dari potongan di bagian tengah IC. Pin pertama ada di sebelah kiri tanda potong ini dan pin terakhir ( dalam hal ini pin ke- 40 ) ada di sebelah kanan tanda potong.
Port I / O dan Fungsinya
Empat port P0, P1, P2, dan P3, masing-masing menggunakan 8 pin, menjadikannya port 8-bit. Setelah RESET, semua port dikonfigurasi sebagai input, siap digunakan sebagai port input. Ketika 0 pertama ditulis ke port, itu menjadi output. Untuk mengkonfigurasi ulang sebagai input, angka 1 harus dikirim ke port.
Port 0 (Pin No 32 - Pin No 39)
Ini memiliki 8 pin (32 hingga 39). Ini dapat digunakan untuk input atau output. Tidak seperti port P1, P2, dan P3, kami biasanya menghubungkan resistor pull-up P0 ke 10K-ohm untuk menggunakannya sebagai port input atau output sebagai saluran pembuangan terbuka.
Ini juga ditetapkan sebagai AD0-AD7, memungkinkannya digunakan sebagai alamat dan data. Dalam kasus 8031 (yaitu ROMless Chip), ketika kita perlu mengakses ROM eksternal, maka P0 akan digunakan untuk Address dan Data Bus. ALE (Pin no 31) menunjukkan jika P0 memiliki alamat atau data. Saat ALE = 0, ia menyediakan data D0-D7, tetapi jika ALE = 1, ia memiliki alamat A0-A7. Jika tidak ada koneksi memori eksternal yang tersedia, P0 harus dihubungkan secara eksternal ke resistor pull-up 10K-ohm.
MOV A,#0FFH ;(comments: A=FFH(Hexadecimal i.e. A=1111 1111)
MOV P0,A ;(Port0 have 1's on every pin so that it works as Input)
Port 1 (Pin 1 hingga 8)
Ini adalah port 8-bit (pin 1 hingga 8) dan dapat digunakan sebagai input atau output. Tidak memerlukan resistor pull-up karena sudah terhubung secara internal. Setelah reset, Port 1 dikonfigurasi sebagai port input. Kode berikut dapat digunakan untuk mengirim nilai bolak-balik 55H dan AAH ke Port 1.
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ;complement(invert) reg. A
SJMP BACK
Jika Port 1 dikonfigurasi untuk digunakan sebagai port keluaran, kemudian untuk digunakan sebagai port masukan lagi, programlah dengan menulis 1 ke semua bit-nya seperti pada kode berikut.
;Toggle all bits of continuously
MOV A ,#0FFH ;A = FF hex
MOV P1,A ;Make P1 an input port
MOV A,P1 ;get data from P1
MOV R7,A ;save it in Reg R7
ACALL DELAY ;wait
MOV A,P1 ;get another data from P1
MOV R6,A ;save it in R6
ACALL DELAY ;wait
MOV A,P1 ;get another data from P1
MOV R5,A ;save it in R5
Port 2 (Pin 21 hingga 28)
Port 2 menempati total 8 pin (pin 21 hingga 28) dan dapat digunakan untuk operasi input dan output. Sama seperti P1 (Port 1), P2 juga tidak memerlukan resistor Pull-up eksternal karena sudah terhubung secara internal. Ini harus digunakan bersama dengan P0 untuk memberikan alamat 16-bit untuk memori eksternal. Jadi itu juga ditetapkan sebagai (A0 – A7), seperti yang ditunjukkan pada diagram pin. Ketika 8051 dihubungkan ke memori eksternal, ini menyediakan jalur untuk 8-bit atas dari alamat 16-bit, dan tidak dapat digunakan sebagai I / O. Setelah reset, Port 2 dikonfigurasi sebagai port input. Kode berikut dapat digunakan untuk mengirim nilai bolak-balik dari 55H dan AAH ke port 2.
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ; complement(invert) reg. A
SJMP BACK
Jika Port 2 dikonfigurasi untuk digunakan sebagai port keluaran, kemudian untuk digunakan sebagai port masukan lagi, programlah dengan menulis 1 ke semua bit-nya seperti pada kode berikut.
;Get a byte from P2 and send it to P1
MOV A,#0FFH ;A = FF hex
MOV P2,A ;make P2 an input port
BACK:
MOV A,P2 ;get data from P2
MOV P1,A ;send it to Port 1
SJMP BACK ;keep doing that
Port 3 (Pin 10 hingga 17)
Ini juga dari 8 bit dan dapat digunakan sebagai Input / Output. Porta ini menyediakan beberapa sinyal yang sangat penting. P3.0 dan P3.1 masing-masing adalah RxD (Receiver) dan TxD (Transmitter) dan secara kolektif digunakan untuk Komunikasi Serial. Pin P3.2 dan P3.3 digunakan untuk interupsi eksternal. P3.4 dan P3.5 masing-masing digunakan untuk timer T0 dan T1. P3.6 dan P3.7 adalah pin Write (WR) dan Read (RD). Ini adalah pin rendah aktif, artinya mereka akan aktif ketika 0 diberikan kepada mereka dan ini digunakan untuk menyediakan operasi Baca dan Tulis ke ROM Eksternal dalam sistem berbasis 8031.
P3 Bit | Fungsi | Pin |
---|---|---|
P3.0 | RxD | 10 |
P3.1 < | TxD | 11 |
P3.2 < | Pelengkap INT0 | 12 |
P3.3 < | INT1 | 13 |
P3.4 < | T0 | 14 |
P3.5 < | T1 | 15 |
P3.6 < | WR | 16 |
P3.7 < | Pelengkap RD | 17 |
Peran Ganda Port 0 dan Port 2
Dual role of Port 0- Port 0 juga ditetapkan sebagai AD0 – AD7, karena dapat digunakan untuk penanganan data dan alamat. Saat menghubungkan 8051 ke memori eksternal, Port 0 dapat menyediakan alamat dan data. Mikrokontroler 8051 kemudian menggandakan input sebagai alamat atau data untuk menghemat pin.
Dual role of Port 2- Selain berfungsi sebagai I / O, Port P2 juga digunakan untuk menyediakan bus alamat 16-bit untuk memori eksternal bersama dengan Port 0. Port P2 juga ditetapkan sebagai (A8– A15), sedangkan Port 0 menyediakan 8-bit yang lebih rendah melalui A0 – A7. Dengan kata lain, kita dapat mengatakan bahwa ketika 8051 dihubungkan ke memori eksternal (ROM) yang dapat mencapai maksimum 64KB dan ini dimungkinkan oleh bus alamat 16 bit karena kita tahu 216 = 64KB. Port2 digunakan untuk 8-bit atas dari alamat 16 bit, dan tidak dapat digunakan untuk I / O dan ini adalah cara kode Program ROM eksternal ditangani.
Sambungan Perangkat Keras Pin
Vcc - Pin 40 menyediakan pasokan ke Chip dan itu adalah +5 V.
Gnd - Pin 20 memberikan landasan untuk Referensi.
XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 memiliki osilator on-chip tetapi membutuhkan jam eksternal untuk menjalankannya. Kristal kuarsa dihubungkan antara pin XTAL1 & XTAL2 pada chip. Kristal ini juga membutuhkan dua kapasitor 30pF untuk menghasilkan sinyal frekuensi yang diinginkan. Satu sisi setiap kapasitor dihubungkan ke ground. IC 8051 tersedia dalam berbagai kecepatan dan semuanya tergantung pada kristal Quartz ini, misalnya mikrokontroler 20 MHz membutuhkan kristal dengan frekuensi tidak lebih dari 20 MHz.
RST (Pin No. 9)- Ini adalah pin Input dan pin High aktif. Setelah memberikan pulsa tinggi pada pin ini, yaitu 1, mikrokontroler akan mereset dan menghentikan semua aktivitas. Proses ini dikenal sebagaiPower-On Reset. Mengaktifkan power-on reset akan menyebabkan semua nilai di register hilang. Ini akan mengatur penghitung program ke semua 0. Untuk memastikan input Reset yang valid, pulsa tinggi harus tinggi untuk minimal dua siklus mesin sebelum dibiarkan rendah, yang bergantung pada nilai kapasitor dan laju pengisiannya. (Machine Cycle adalah jumlah minimum frekuensi yang dibutuhkan satu instruksi dalam eksekusi).
EA or External Access (Pin No. 31)- Ini adalah pin masukan. Pin ini adalah pin rendah yang aktif; setelah menerapkan pulsa rendah, itu akan diaktifkan. Dalam kasus mikrokontroler (8051/52) memiliki ROM on-chip, pin EA (bar) dihubungkan ke V cc . Tetapi pada mikrokontroler 8031 yang tidak memiliki ROM on-chip, kode tersebut disimpan dalam ROM eksternal dan kemudian diambil oleh mikrokontroler. Dalam hal ini, kita harus menghubungkan (pin no 31) EA ke Gnd untuk menunjukkan bahwa kode program disimpan secara eksternal.
PSEN or Program store Enable (Pin No 29)- Ini juga merupakan pin rendah yang aktif, yaitu, akan diaktifkan setelah menerapkan pulsa rendah. Ini adalah pin keluaran dan digunakan bersama dengan pin EA pada Sistem berbasis 8031 (yaitu ROMLESS) untuk memungkinkan penyimpanan kode program dalam ROM eksternal.
ALE or (Address Latch Enable)- Ini adalah Pin Output dan aktif tinggi. Ini terutama digunakan untuk IC 8031 untuk menghubungkannya ke memori eksternal. Ini dapat digunakan saat memutuskan apakah pin P0 akan digunakan sebagai Bus alamat atau bus Data. Jika ALE = 1, maka pin P0 berfungsi sebagai bus Data dan jika ALE = 0, maka pin P0 berfungsi sebagai bus Alamat.
Port I / O dan Bit Addressability
Ini adalah fitur yang paling banyak digunakan pada 8051 saat menulis kode untuk 8051. Kadang-kadang kita hanya perlu mengakses 1 atau 2 bit port daripada keseluruhan 8-bit. 8051 menyediakan kemampuan untuk mengakses bit individu dari port.
Saat mengakses port dengan cara bit tunggal, kami menggunakan sintaks "SETB X. Y" di mana X adalah nomor port (0 hingga 3), dan Y adalah nomor bit (0 hingga 7) untuk bit data D0-D7 dimana D0 adalah LSB dan D7 adalah MSB. Misalnya, "SETB P1.5" menetapkan bit tinggi 5 dari port 1.
Kode berikut menunjukkan bagaimana kita dapat mengaktifkan bit P1.2 secara terus menerus.
AGAIN:
SETB P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
SJMP AGAIN
Instruksi Single-Bit
Instruksi | Fungsi |
---|---|
SETB bit | Atur bitnya (bit = 1) |
Bit CLR | bersihkan bit (bit = 0) |
Bit CPL | melengkapi bit (bit = NOT bit) |
Bit JB, target | lompat ke target jika bit = 1 (lompat jika bit) |
Bit JNB, target | lompat ke target jika bit = 0 (lompat jika tidak ada bit) |
Bit JBC, target | lompat ke target jika bit = 1, hapus bit (lompat jika bit, lalu hapus) |
Penghitung Program
Program Counter adalah register 16 atau 32-bit yang berisi alamat dari instruksi selanjutnya yang akan dieksekusi. PC secara otomatis menambah ke lokasi memori berurutan berikutnya setiap kali instruksi diambil. Cabang, lompat, dan operasi interupsi memuat Program Counter dengan alamat selain lokasi berurutan berikutnya.
Mengaktifkan power-on reset akan menyebabkan semua nilai di register hilang. Artinya nilai PC (program counter) adalah 0 saat reset, memaksa CPU untuk mengambil opcode pertama dari lokasi memori ROM 0000. Artinya kita harus menempatkan byte pertama dari upcode pada lokasi ROM 0000 karena disitulah letak CPU mengharapkan untuk menemukan instruksi pertama
Setel Ulang Vektor
Arti penting dari vektor reset adalah ia mengarahkan prosesor ke alamat memori yang berisi instruksi pertama firmware. Tanpa Reset Vector, prosesor tidak akan tahu dari mana harus memulai eksekusi. Setelah reset, prosesor memuat Program Counter (PC) dengan nilai vektor reset dari lokasi memori yang telah ditentukan. Pada arsitektur CPU08, ini di lokasi$FFFE:$FFFF.
Ketika vektor reset tidak diperlukan, pengembang biasanya menerima begitu saja dan tidak memprogram ke dalam gambar akhir. Akibatnya, prosesor tidak memulai pada produk akhir. Ini adalah kesalahan umum yang terjadi selama fase debug.
Penunjuk Tumpukan
Stack diimplementasikan dalam RAM dan register CPU digunakan untuk mengaksesnya yang disebut register SP (Stack Pointer). Register SP adalah register 8-bit dan dapat menangani alamat memori dari rentang 00h hingga FFh. Awalnya, register SP berisi nilai 07 untuk menunjuk ke lokasi 08 sebagai lokasi pertama yang digunakan untuk tumpukan oleh 8051.
Saat konten register CPU disimpan dalam tumpukan, ini disebut operasi PUSH. Saat konten tumpukan disimpan dalam register CPU, ini disebut operasi POP. Dengan kata lain, register didorong ke tumpukan untuk menyimpannya dan dikeluarkan dari tumpukan untuk mengambilnya.
Loop Tak Terbatas
Loop tanpa batas atau loop tanpa akhir dapat diidentifikasi sebagai urutan instruksi dalam program komputer yang dijalankan tanpa henti dalam satu loop, karena alasan berikut -
- loop tanpa kondisi penghentian.
- loop dengan kondisi penghentian yang tidak pernah bisa dipenuhi.
- loop dengan kondisi penghentian yang menyebabkan loop untuk memulai kembali.
Perulangan tak terbatas seperti itu biasanya menyebabkan sistem operasi lama menjadi tidak responsif, karena perulangan tak terbatas menghabiskan semua waktu prosesor yang tersedia. Operasi I / O yang menunggu input pengguna juga disebut "loop tak terbatas". Salah satu kemungkinan penyebab komputer "membeku" adalah loop tak terhingga; penyebab lainnya termasukdeadlock dan access violations.
Sistem tertanam, tidak seperti PC, tidak pernah "keluar" dari aplikasi. Mereka menganggur melalui Infinite Loop menunggu acara berlangsung dalam bentuk interupsi, atau apre-scheduled task. Untuk menghemat daya, beberapa prosesor memasukkan khusussleep atau wait modes alih-alih berhenti melalui Infinite Loop, tetapi mereka akan keluar dari mode ini baik melalui pengatur waktu atau Interupsi Eksternal.
Interupsi
Interupsi sebagian besar adalah mekanisme perangkat keras yang menginstruksikan program bahwa suatu peristiwa telah terjadi. Mereka dapat terjadi kapan saja, dan oleh karena itu tidak sinkron dengan aliran program. Mereka memerlukan penanganan khusus oleh prosesor, dan pada akhirnya ditangani oleh Interrupt Service Routine (ISR) yang sesuai. Interupsi perlu ditangani dengan cepat. Jika Anda menghabiskan terlalu banyak waktu untuk memperbaiki interupsi, Anda mungkin melewatkan interupsi lainnya.
Little Endian Vs Big Endian
Meskipun angka selalu ditampilkan dengan cara yang sama, namun tidak disimpan dengan cara yang sama di memori. Mesin Big-Endian menyimpan data byte paling signifikan di alamat memori terendah. Mesin Big-Endian menyimpan 0x12345678 sebagai -
ADD+0: 0x12
ADD+1: 0x34
ADD+2: 0x56
ADD+3: 0x78
Mesin Little-Endian, sebaliknya, menyimpan data byte paling tidak signifikan di alamat memori terendah. Mesin Little-Endian menyimpan 0x12345678 sebagai -
ADD+0: 0x78
ADD+1: 0x56
ADD+2: 0x34
ADD+3: 0x12
Bahasa majelis dikembangkan untuk menyediakan mnemonicsatau simbol untuk instruksi kode level mesin. Program bahasa assembly terdiri dari mnemonik, sehingga harus diterjemahkan ke dalam kode mesin. Program yang bertanggung jawab untuk konversi ini dikenal sebagaiassembler. Bahasa assembly sering disebut sebagai bahasa level rendah karena langsung bekerja dengan struktur internal CPU. Untuk memprogram dalam bahasa assembly, seorang programmer harus mengetahui semua register dari CPU.
Bahasa pemrograman yang berbeda seperti C, C ++, Java dan berbagai bahasa lain disebut bahasa tingkat tinggi karena tidak berurusan dengan detail internal CPU. Sebaliknya, assembler digunakan untuk menerjemahkan program bahasa assembly menjadi kode mesin (terkadang disebut jugaobject code atau opcode). Demikian pula, kompilator menerjemahkan bahasa tingkat tinggi ke dalam kode mesin. Misalnya, untuk menulis program dalam bahasa C, seseorang harus menggunakan kompiler C untuk menerjemahkan program ke dalam bahasa mesin.
Struktur Bahasa Majelis
Program bahasa assembly adalah serangkaian pernyataan, yang merupakan instruksi bahasa assembly seperti ADD dan MOV, atau pernyataan yang disebut directives.
Sebuah instruction memberi tahu CPU apa yang harus dilakukan, sementara a directive (disebut juga pseudo-instructions) memberikan instruksi kepada assembler. Misalnya, instruksi ADD dan MOV adalah perintah yang dijalankan oleh CPU, sedangkan ORG dan END adalah arahan assembler. Assembler menempatkan opcode ke lokasi memori 0 ketika direktif ORG digunakan, sedangkan END menunjukkan ke akhir kode sumber. Pengajaran bahasa program terdiri dari empat bidang berikut -
[ label: ] mnemonics [ operands ] [;comment ]
Tanda kurung siku ([]) menunjukkan bahwa bidang tersebut opsional.
Itu label fieldmemungkinkan program untuk merujuk ke baris kode berdasarkan nama. Bidang label tidak boleh melebihi jumlah karakter tertentu.
Itu mnemonics dan operands fieldsbersama-sama melakukan pekerjaan nyata program dan menyelesaikan tugas. Pernyataan seperti ADD A, C & MOV C, # 68 dimana ADD dan MOV adalah mnemoniknya, yang menghasilkan opcode; "A, C" dan "C, # 68" adalah operan. Kedua bidang ini bisa berisi arahan. Perintah tidak menghasilkan kode mesin dan hanya digunakan oleh assembler, sedangkan instruksi diterjemahkan ke dalam kode mesin untuk dieksekusi oleh CPU.
1.0000 ORG 0H ;start (origin) at location 0
2 0000 7D25 MOV R5,#25H ;load 25H into R5
3.0002 7F34 MOV R7,#34H ;load 34H into R7
4.0004 7400 MOV A,#0 ;load 0 into A
5.0006 2D ADD A,R5 ;add contents of R5 to A
6.0007 2F ADD A,R7 ;add contents of R7 to A
7.0008 2412 ADD A,#12H ;add to A value 12 H
8.000A 80FE HERE: SJMP HERE ;stay in this loop
9.000C END ;end of asm source file
Itu comment field dimulai dengan titik koma yang merupakan indikator komentar.
Perhatikan Label "DI SINI" dalam program tersebut. Label apapun yang mengacu pada instruksi harus diikuti dengan titik dua.
Merakit dan Menjalankan Program 8051
Disini kita akan membahas tentang bentuk dasar bahasa assembly. Langkah-langkah untuk membuat, merakit, dan menjalankan program bahasa assembly adalah sebagai berikut -
Pertama, kami menggunakan editor untuk mengetik program yang mirip dengan program di atas. Editor seperti program MS-DOS EDIT yang disertakan dengan semua sistem operasi Microsoft dapat digunakan untuk membuat atau mengedit program. Editor harus dapat menghasilkan file ASCII. Ekstensi "asm" untuk file sumber digunakan oleh assembler di langkah berikutnya.
File sumber "asm" berisi kode program yang dibuat pada Langkah 1. Ini diumpankan ke assembler 8051. Assembler kemudian mengubah instruksi bahasa assembly menjadi instruksi kode mesin dan menghasilkan.obj file (file objek) dan a .lst file(daftar file). Ini juga disebut sebagaisource file, itulah mengapa beberapa assembler mengharuskan file ini memiliki ekstensi "src". File "lst" bersifat opsional. Ini sangat berguna untuk program karena mendaftar semua opcode dan alamat serta kesalahan yang terdeteksi oleh assembler.
Perakit membutuhkan langkah ketiga yang disebut linking. Program tautan mengambil satu atau lebih file objek dan menghasilkan file objek absolut dengan ekstensi "abs".
Selanjutnya, file "abs" diumpankan ke program bernama "OH" (konverter objek ke hex), yang membuat file dengan ekstensi "hex" yang siap untuk dibakar ke ROM.
Tipe data
Mikrokontroler 8051 berisi satu tipe data 8-bit, dan setiap register juga berukuran 8-bit. Programmer harus memecah data yang lebih besar dari 8-bit (00 menjadi FFH, atau 255 dalam desimal) sehingga dapat diproses oleh CPU.
DB (Tentukan Byte)
Direktif DB adalah direktif data yang paling banyak digunakan di assembler. Ini digunakan untuk mendefinisikan data 8-bit. Ini juga dapat digunakan untuk menentukan data format desimal, biner, hex, atau ASCII. Untuk desimal, "D" setelah angka desimal adalah opsional, tetapi diperlukan untuk "B" (biner) dan "Hl" (heksadesimal).
Untuk menunjukkan ASCII, cukup tempatkan karakter dalam tanda kutip ('seperti ini'). Assembler menghasilkan kode ASCII untuk angka / karakter secara otomatis. Direktif DB adalah satu-satunya direktif yang dapat digunakan untuk mendefinisikan string ASCII yang lebih besar dari dua karakter; oleh karena itu, ini harus digunakan untuk semua definisi data ASCII. Beberapa contoh DB diberikan di bawah ini -
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
DATA2: DB 00110101B ;BINARY (35 in hex)
DATA3: DB 39H ;HEX
ORG 510H
DATA4: DB "2591" ;ASCII NUMBERS
ORG 520H
DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
Tanda kutip tunggal atau ganda dapat digunakan di sekitar string ASCII. DB juga digunakan untuk mengalokasikan memori dalam potongan berukuran byte.
Direktif Assembler
Beberapa arahan dari 8051 adalah sebagai berikut -
ORG (origin)- Petunjuk asal digunakan untuk menunjukkan awal alamat. Dibutuhkan angka dalam format heksa atau desimal. Jika H diberikan setelah angka, angka tersebut diperlakukan sebagai heksa, jika tidak desimal. Assembler mengubah angka desimal menjadi heksa.
EQU (equate)- Digunakan untuk mendefinisikan konstanta tanpa menempati lokasi memori. EQU mengasosiasikan nilai konstanta dengan label data sehingga label muncul dalam program, nilai konstanta tersebut akan menggantikan label. Saat menjalankan instruksi "MOV R3, #COUNT", register R3 akan dimuat dengan nilai 25 (perhatikan tanda #). Keuntungan menggunakan EQU adalah programmer dapat mengubahnya sekali dan assembler akan mengubah semua kejadiannya; programmer tidak perlu mencari seluruh program.
END directive- Ini menunjukkan akhir dari file sumber (asm). Direktif END adalah baris terakhir dari program; apa pun setelah direktif END diabaikan oleh assembler.
Label dalam Bahasa Majelis
Semua label dalam bahasa assembly harus mengikuti aturan yang diberikan di bawah ini -
Setiap nama label harus unik. Nama-nama yang digunakan untuk label dalam pemrograman bahasa assembly terdiri dari huruf alfabet baik huruf besar maupun kecil, angka 0 sampai 9, dan karakter khusus seperti tanda tanya (?), Titik (.), Pada rate @, underscore (_), dan dolar ($).
Karakter pertama harus dalam karakter alfabet; itu tidak bisa berupa angka.
Kata cadangan tidak dapat digunakan sebagai label dalam program. Misalnya, kata-kata ADD dan MOV adalah kata-kata yang telah dipesan, karena mereka adalah instruksi mnemonik.
Register digunakan dalam CPU untuk menyimpan informasi secara sementara yang dapat berupa data yang akan diproses, atau alamat yang menunjuk ke data yang akan diambil. Pada 8051 terdapat satu tipe data yaitu 8-bit, dari MSB (most significant bit) D7 sampai LSB (least significant bit) D0. Dengan tipe data 8-bit, semua tipe data yang lebih besar dari 8-bit harus dipecah menjadi potongan-potongan 8-bit sebelum diproses.
Register 8051 yang paling banyak digunakan adalah A (akumulator), B, R0-R7, DPTR (penunjuk data), dan PC (penghitung program). Semua register ini terdiri dari 8-bit, kecuali DPTR dan PC.
Penyimpanan Register pada 8051
Kami akan membahas jenis register penyimpanan berikut di sini -
- Accumulator
- R register
- Daftar B
- Pointer Data (DPTR)
- Penghitung Program (PC)
- Stack Pointer (SP)
Aki
Akumulator, register A, digunakan untuk semua operasi aritmatika dan logika. Jika akumulator tidak ada, maka setiap hasil dari setiap perhitungan (penjumlahan, perkalian, pergeseran, dll.) Disimpan ke dalam memori utama. Akses ke memori utama lebih lambat daripada akses ke register seperti akumulator karena teknologi yang digunakan untuk memori utama yang besar lebih lambat (tetapi lebih murah) daripada yang digunakan untuk register.
Register "R"
Register "R" adalah satu set dari delapan register, yaitu R0, R1 sampai R7. Register ini berfungsi sebagai register penyimpanan tambahan atau sementara dalam banyak operasi. Perhatikan contoh penjumlahan 10 dan 20. Simpan variabel 10 dalam akumulator dan variabel lain 20 dalam, katakanlah, register R4. Untuk memproses operasi penambahan, jalankan perintah berikut -
ADD A,R4
Setelah menjalankan instruksi ini, akumulator akan berisi nilai 30. Jadi register "R" adalah alat bantu yang sangat penting atau helper registers. Accumulator saja tidak akan berguna jika bukan karena register "R" ini. Register "R" dimaksudkan untuk penyimpanan nilai sementara.
Mari kita ambil contoh lainnya. Kami akan menambahkan nilai-nilai di R1 dan R2 bersama-sama dan kemudian mengurangi nilai R3 dan R4 dari hasilnya.
MOV A,R3 ;Move the value of R3 into the accumulator
ADD A,R4 ;Add the value of R4
MOV R5,A ;Store the resulting value temporarily in R5
MOV A,R1 ;Move the value of R1 into the accumulator
ADD A,R2 ;Add the value of R2
SUBB A,R5 ;Subtract the value of R5 (which now contains R3 + R4)
Seperti yang Anda lihat, kami menggunakan R5 untuk menahan sementara jumlah R3 dan R4. Tentu saja, ini bukan cara yang paling efisien untuk menghitung (R1 + R2) - (R3 + R4), tetapi ini menggambarkan penggunaan register "R" sebagai cara untuk menyimpan nilai sementara.
Daftar "B"
Register "B" sangat mirip dengan Akumulator dalam arti bahwa ia dapat menyimpan nilai 8-bit (1-byte). Register "B" hanya digunakan oleh dua instruksi 8051:MUL AB dan DIV AB. Untuk mengalikan atau membagi A dengan bilangan lain dengan cepat dan mudah, Anda dapat menyimpan bilangan lain di "B" dan memanfaatkan kedua petunjuk ini. Selain menggunakan instruksi MUL dan DIV, register "B" sering digunakan sebagai register penyimpanan sementara lainnya, seperti register R kesembilan.
Penunjuk Data
Data Pointer (DPTR) adalah satu-satunya register 16-bit (2-byte) yang dapat diakses oleh pengguna 8051. Akumulator, register R0 – R7 dan register B adalah register nilai 1-byte. DPTR dimaksudkan untuk menunjuk ke data. Ini digunakan oleh 8051 untuk mengakses memori eksternal menggunakan alamat yang ditunjukkan oleh DPTR. DPTR adalah satu-satunya register 16-bit yang tersedia dan sering digunakan untuk menyimpan nilai 2-byte.
Penghitung Program
Program Counter (PC) adalah alamat 2-byte yang memberitahu 8051 dimana instruksi selanjutnya untuk dieksekusi dapat ditemukan dalam memori. PC mulai pada 0000h ketika 8051 diinisialisasi dan bertambah setiap kali instruksi dijalankan. PC tidak selalu bertambah 1. Beberapa instruksi mungkin memerlukan 2 atau 3 byte; dalam kasus seperti itu, PC akan bertambah 2 atau 3.
Branch, jump, dan interruptoperasi memuat Penghitung Program dengan alamat selain lokasi berurutan berikutnya. Mengaktifkan power-on reset akan menyebabkan semua nilai di register hilang. Artinya nilai PC adalah 0 saat reset, memaksa CPU untuk mengambil opcode pertama dari lokasi ROM 0000. Artinya kita harus menempatkan byte pertama dari upcode di lokasi ROM 0000 karena disitulah CPU mengharapkan untuk menemukan instruksi pertama.
Stack Pointer (SP)
Stack Pointer, seperti semua register kecuali DPTR dan PC, dapat memiliki nilai 8-bit (1-byte). Stack Pointer memberi tahu lokasi dari mana nilai berikutnya akan dihapus dari tumpukan. Ketika nilai didorong ke tumpukan, nilai SP bertambah dan kemudian nilai disimpan di lokasi memori yang dihasilkan. Ketika sebuah nilai dikeluarkan dari tumpukan, nilai tersebut dikembalikan dari lokasi memori yang ditunjukkan oleh SP, dan kemudian nilai SP dikurangi.
Urutan operasi ini penting. SP akan diinisialisasi ke 07h ketika 8051 diinisialisasi. Jika nilai didorong ke tumpukan pada saat yang sama, nilai akan disimpan di alamat RAM internal 08h karena 8051 pertama-tama akan menaikkan nilai SP (dari 07h ke 08h) dan kemudian akan menyimpan nilai yang didorong pada memori itu alamat (08h). SP dimodifikasi langsung oleh 8051 dengan enam instruksi: PUSH, POP, ACALL, LCALL, RET, dan RETI.
Ruang ROM pada tahun 8051
Beberapa anggota keluarga 8051 hanya memiliki ROM on-chip 4K byte (misalnya 8751, AT8951); beberapa memiliki ROM 8K seperti AT89C52, dan ada beberapa anggota keluarga dengan 32K byte dan 64K byte ROM on-chip seperti Dallas Semiconductor. Hal yang perlu diingat adalah bahwa tidak ada anggota keluarga 8051 yang dapat mengakses lebih dari 64K byte opcode karena penghitung program pada 8051 adalah register 16-bit (0000 ke alamat FFFF).
Lokasi pertama ROM program di dalam 8051 beralamat 0000H, sedangkan lokasi terakhir bisa berbeda tergantung ukuran ROM pada chip. Di antara 8.051 anggota keluarga, AT8951 memiliki $ k byte ROM on-chip yang memiliki alamat memori 0000 (lokasi pertama) hingga 0FFFH (lokasi terakhir).
8051 Flag Bits dan PSW Register
Register kata status program (PSW) adalah register 8-bit, juga dikenal sebagai flag register. Ini adalah lebar 8-bit tetapi hanya 6-bit yang digunakan. Dua bit yang tidak digunakan adalahuser-defined flags. Empat bendera disebutconditional flags, yang berarti bahwa mereka menunjukkan kondisi yang dihasilkan setelah instruksi dijalankan. Empat iniCY (Membawa), AC (membawa tambahan), P (paritas), dan OV(meluap). Bit RS0 dan RS1 digunakan untuk mengubah register bank. Gambar berikut menunjukkan register kata status program.
Register PSW berisi bit status yang mencerminkan status CPU saat ini.
CY | CA | F0 | RS1 | RS0 | OV | - | P. |
---|
CY | PSW.7 | Bawa Bendera |
AC | PSW.6 | Bendera Carry Auxiliary |
F0 | PSW.5 | Tandai 0 tersedia bagi pengguna untuk tujuan umum. |
RS1 | PSW.4 | Daftar pemilih Bank bit 1 |
RS0 | PSW.3 | Daftar pemilih Bank bit 0 |
OV | PSW.2 | Bendera Overflow |
- | PSW.1 | BENDERA yang dapat ditentukan pengguna |
P. | PSW.0 | BENDERA Paritas. Disetel / dibersihkan oleh perangkat keras selama siklus instruksi untuk menunjukkan angka genap / ganjil 1 bit dalam akumulator. |
Kita dapat memilih bit Bank Register yang sesuai menggunakan bit RS0 dan RS1.
RS1 | RS2 | Register Bank | Alamat |
---|---|---|---|
0 | 0 | 0 | 00H-07H |
0 | 1 | 1 | 08H-0FH |
1 | 0 | 2 | 10H-17H |
1 | 1 | 3 | 18H-1FH |
CY, the carry flag- Bendera carry ini disetel (1) setiap kali ada eksekusi dari bit D7. Ini terpengaruh setelah operasi penambahan atau pengurangan 8-bit. Ini juga dapat diatur ulang ke 1 atau 0 secara langsung dengan instruksi seperti "SETB C" dan "CLR C" di mana "SETB" adalah singkatan dari set bit carry dan "CLR" adalah singkatan dari clear carry.
AC, auxiliary carry flag- Jika ada carry dari D3 dan D4 selama operasi ADD atau SUB, bit AC diatur; jika tidak, itu akan dihapus. Ini digunakan untuk instruksi untuk melakukan aritmatika desimal berkode biner.
P, the parity flag- Bendera paritas mewakili angka 1 di register akumulator saja. Jika register A berisi angka ganjil 1, maka P = 1; dan untuk bilangan genap 1, P = 0.
OV, the overflow flag- Bendera ini diset setiap kali hasil operasi nomor bertanda terlalu besar menyebabkan bit orde tinggi meluap ke bit tanda. Ini hanya digunakan untuk mendeteksi kesalahan dalam operasi aritmatika bertanda.
Contoh
Tunjukkan status flag CY, AC, dan P setelah penambahan 9CH dan 64H pada instruksi berikut.
MOV A, # 9CH
TAMBAHKAN A, # 64H
Solution: 9C 10011100
+64 01100100
100 00000000
CY = 1 since there is a carry beyond D7 bit
AC = 0 since there is a carry from D3 to D4
P = 0 because the accumulator has even number of 1's
Mikrokontroler 8.051 memiliki total 128 byte RAM. Kami akan membahas tentang alokasi RAM 128 byte ini dan memeriksa penggunaannya sebagai tumpukan dan register.
Alokasi Ruang Memori RAM pada 8051
128 byte RAM di dalam 8051 diberi alamat 00 hingga 7FH. Mereka dapat diakses secara langsung sebagai lokasi memori dan dibagi menjadi tiga kelompok berbeda sebagai berikut -
32 byte dari lokasi 00H hingga 1FH disisihkan untuk bank register dan stack.
16 byte dari lokasi 20H hingga 2FH disisihkan untuk memori baca / tulis beralamat bit.
80 byte dari lokasi 30H hingga 7FH digunakan untuk penyimpanan baca dan tulis; itu disebut sebagaiscratch pad. RAM 80 lokasi ini banyak digunakan untuk tujuan menyimpan data dan parameter oleh 8.051 programmer.
Daftarkan Bank di 8051
Total 32 byte RAM disisihkan untuk bank register dan stack. 32 byte ini dibagi menjadi empat bank register di mana setiap bank memiliki 8 register, R0 – R7. Lokasi RAM dari 0 hingga 7 disisihkan untuk bank 0 dari R0 – R7 dimana R0 adalah lokasi RAM 0, R1 adalah lokasi RAM 1, R2 adalah lokasi 2, dan seterusnya, hingga lokasi memori 7, yang merupakan milik R7 bank. 0.
Bank kedua dari register R0 – R7 dimulai dari lokasi RAM 08 dan menuju ke lokasi OFH. Bank ketiga dari R0 – R7 dimulai dari lokasi memori 10H dan menuju ke lokasi ke 17H. Akhirnya, lokasi RAM 18H hingga 1FH disisihkan untuk bank keempat R0 – R7.
Bank Register Default
Jika lokasi RAM 00–1F disisihkan untuk empat bank register, bank register R0 – R7 mana yang dapat kita akses ketika 8051 dinyalakan? Jawabannya adalah bank register 0; yaitu, lokasi RAM dari 0 hingga 7 diakses dengan nama R0 hingga R7 saat memprogram 8051. Karena jauh lebih mudah untuk merujuk lokasi RAM ini dengan nama seperti R0 hingga R7, daripada lokasi memorinya.
Cara Beralih Bank Register
Bank register 0 adalah default saat 8051 dinyalakan. Kami dapat beralih ke bank lain menggunakan register PSW. Bit D4 dan D3 dari PSW digunakan untuk memilih bank register yang diinginkan, karena mereka dapat diakses dengan instruksi bit addressable SETB dan CLR. Misalnya, "SETB PSW.3" akan menyetel PSW.3 = 1 dan memilih bank register 1.
RS1 | RS2 | Bank Dipilih |
---|---|---|
0 | 0 | Bank0 |
0 | 1 | Bank1 |
1 | 0 | Bank2 |
1 | 1 | Bank3 |
Stack dan Operasinya
Tumpuk di 8051
Tumpukan adalah bagian dari RAM yang digunakan oleh CPU untuk menyimpan informasi seperti data atau alamat memori secara sementara. CPU membutuhkan area penyimpanan ini mengingat jumlah register yang terbatas.
Bagaimana Tumpukan Diakses
Karena tumpukan adalah bagian dari RAM, ada register di dalam CPU untuk diarahkan ke sana. Register yang digunakan untuk mengakses tumpukan dikenal sebagai register penunjuk tumpukan. Penunjuk tumpukan di 8051 memiliki lebar 8-bit, dan dapat mengambil nilai 00 hingga FFH. Ketika 8051 diinisialisasi, register SP berisi nilai 07H. Artinya lokasi RAM 08 adalah lokasi pertama yang digunakan untuk stack. Operasi penyimpanan register CPU di stack dikenal sebagai aPUSH, dan mengembalikan konten dari tumpukan ke register CPU disebut a POP.
Mendorong ke dalam Stack
Di 8051, penunjuk tumpukan (SP) menunjuk ke lokasi tumpukan yang terakhir digunakan. Ketika data didorong ke stack, stack pointer (SP) bertambah 1. Ketika PUSH dijalankan, isi register disimpan di stack dan SP bertambah 1. Untuk mendorong register ke stack, kita harus menggunakan alamat RAM mereka. Misalnya, instruksi "PUSH 1" mendorong register R1 ke stack.
Muncul dari Stack
Memunculkan kembali isi tumpukan ke dalam register yang diberikan adalah kebalikan dari proses mendorong. Dengan setiap operasi pop, byte atas dari tumpukan disalin ke register yang ditentukan oleh instruksi dan penunjuk tumpukan dikurangi satu kali.
Alur program berjalan secara berurutan, dari satu instruksi ke instruksi berikutnya, kecuali instruksi transfer kontrol dijalankan. Berbagai jenis instruksi transfer kontrol dalam bahasa assembly termasuk lompatan bersyarat atau tidak bersyarat dan instruksi panggilan.
Instruksi Loop dan Lompat
Looping di 8051
Mengulangi urutan instruksi beberapa kali disebut a loop. Sebuah instruksiDJNZ reg, labeldigunakan untuk melakukan operasi Loop. Dalam instruksi ini, register dikurangi dengan 1; jika bukan nol, maka 8051 melompat ke alamat target yang dirujuk oleh label.
Register diisi dengan penghitung untuk jumlah pengulangan sebelum dimulainya loop. Dalam instruksi ini, baik penurunan register dan keputusan untuk melompat digabungkan menjadi satu instruksi. Register dapat berupa salah satu dari R0 – R7. Penghitung juga bisa menjadi lokasi RAM.
Contoh
Multiply 25 by 10 using the technique of repeated addition.
Solution- Perkalian dapat dicapai dengan menjumlahkan perkalian dan berulang kali, sebanyak pengali. Sebagai contoh,
25 * 10 = 250 (FAH)
25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 = 250
MOV A,#0 ;A = 0,clean ACC
MOV R2,#10 ; the multiplier is replaced in R2
Add A,#25 ;add the multiplicand to the ACC
AGAIN:DJNZ R2,
AGAIN:repeat until R2 = 0 (10 times)
MOV R5 , A ;save A in R5 ;R5 (FAH)
Drawback in 8051 - Tindakan mengulang dengan instruksi DJNZ Reg labeldibatasi hingga 256 iterasi saja. Jika lompatan bersyarat tidak dilakukan, maka instruksi yang mengikuti lompatan tersebut dijalankan.
Looping di dalam Loop
Saat kita menggunakan perulangan di dalam perulangan lain, itu disebut a nested loop. Dua register digunakan untuk menahan hitungan ketika jumlah maksimum dibatasi hingga 256. Jadi kami menggunakan metode ini untuk mengulangi tindakan lebih dari 256.
Example
Tulis program untuk -
- Muat akumulator dengan nilai 55H.
- Lengkapi ACC 700 kali.
Solution- Karena 700 lebih besar dari 255 (kapasitas maksimum register manapun), dua register digunakan untuk menampung hitungan. Kode berikut menunjukkan bagaimana menggunakan dua register, R2 dan R3, untuk menghitung.
MOV A,#55H ;A = 55H
NEXT: MOV R3,#10 ;R3 the outer loop counter
AGAIN:MOV R2,#70 ;R2 the inner loop counter
CPL A ;complement
Lompatan Bersyarat Lainnya
Tabel berikut mencantumkan lompatan bersyarat yang digunakan di 8051 -
Petunjuk | Tindakan |
---|---|
JZ | Lompat jika A = 0 |
JNZ | Lompat jika A ≠ 0 |
DJNZ | Penurunan dan Lompat jika mendaftar ≠ 0 |
CJNE A, data | Langsung jika A ≠ data |
CJNE reg, #data | Langsung jika byte ≠ data |
JC | Lompat jika CY = 1 |
JNC | Langsung jika CY ≠ 1 |
JB | Lompat jika bit = 1 |
JNB | Lompat jika bit = 0 |
JBC | Lompat jika bit = 1 dan hapus bit |
JZ (jump if A = 0)- Dalam instruksi ini, konten akumulator diperiksa. Jika nol, maka 8051 akan melompat ke alamat target. Instruksi JZ hanya dapat digunakan untuk akumulator, tidak berlaku untuk register lain.
JNZ (jump if A is not equal to 0)- Dalam instruksi ini, konten akumulator diperiksa menjadi bukan nol. Jika bukan nol, maka 8051 akan melompat ke alamat target.
JNC (Jump if no carry, jumps if CY = 0)- Bit bendera Carry dalam register flag (atau PSW) digunakan untuk membuat keputusan apakah akan melompati "label JNC" atau tidak. CPU melihat flag carry untuk melihat apakah itu dinaikkan (CY = 1). Jika tidak dimunculkan, maka CPU mulai mengambil dan menjalankan instruksi dari alamat label. Jika CY = 1, itu tidak akan melompat tetapi akan mengeksekusi instruksi berikutnya di bawah JNC.
JC (Jump if carry, jumps if CY = 1) - Jika CY = 1, ini melompat ke alamat target.
JB (jump if bit is high)
JNB (jump if bit is low)
Note - Harus dicatat bahwa semua lompatan bersyarat adalah lompatan pendek, yaitu, alamat target harus berada dalam –128 hingga +127 byte dari konten penghitung program.
Instruksi Lompat Tanpa Syarat
Ada dua lompatan tanpa syarat di 8051 -
LJMP (long jump)- LJMP adalah instruksi 3-byte di mana byte pertama mewakili opcode, dan byte kedua dan ketiga mewakili alamat 16-bit dari lokasi target. Alamat target 2-byte memungkinkan lompatan ke lokasi memori apa pun dari 0000 ke FFFFH.
SJMP (short jump)- Ini adalah instruksi 2-byte dimana byte pertama adalah opcode dan byte kedua adalah alamat relatif dari lokasi target. Rentang alamat relatif dari 00H hingga FFH yang dibagi menjadi lompatan maju dan mundur; yaitu, dalam –128 hingga +127 byte memori relatif terhadap alamat PC saat ini (penghitung program). Jika terjadi lompatan maju, alamat target dapat berada dalam jarak 127 byte dari PC saat ini. Jika terjadi lompatan mundur, alamat target dapat berada dalam –128 byte dari PC saat ini.
Menghitung Alamat Lompat Pendek
Semua lompatan bersyarat (JNC, JZ, dan DJNZ) adalah lompatan pendek karena merupakan instruksi 2-byte. Dalam instruksi ini, byte pertama mewakili opcode dan byte kedua mewakili alamat relatif. Alamat target selalu relatif terhadap nilai penghitung program. Untuk menghitung alamat target, byte kedua ditambahkan ke PC instruksi tepat di bawah lompatan. Lihatlah program yang diberikan di bawah ini -
Line PC Op-code Mnemonic Operand
1 0000 ORG 0000
2 0000 7800 MOV R0,#003
3 0002 7455 MOV A,#55H0
4 0004 6003 JZ NEXT
5 0006 08 INC R0
6 0007 04 AGAIN: INC A
7 0008 04 INC A
8 0009 2477 NEXT: ADD A, #77h
9 000B 5005 JNC OVER
10 000D E4 CLR A
11 000E F8 MOV R0, A
12 000F F9 MOV R1, A
13 0010 FA MOV R2, A
14 0011 FB MOV R3, A
15 0012 2B OVER: ADD A, R3
16 0013 50F2 JNC AGAIN
17 0015 80FE HERE: SJMP HERE
18 0017 END
Perhitungan Alamat Target Lompat Mundur
Dalam kasus lompatan maju, nilai perpindahan adalah bilangan positif antara 0 hingga 127 (00 hingga 7F dalam hex). Namun, untuk lompatan mundur, perpindahannya adalah nilai negatif dari 0 hingga –128.
Instruksi CALL
CALL digunakan untuk memanggil subrutin atau metode. Subrutin digunakan untuk melakukan operasi atau tugas yang perlu sering dilakukan. Ini membuat program lebih terstruktur dan menghemat ruang memori. Ada dua instruksi - LCALL dan ACALL.
LCALL (Panggilan Panjang)
LCALL adalah instruksi 3-byte dimana byte pertama mewakili opcode dan byte kedua dan ketiga digunakan untuk memberikan alamat subrutin target. LCALL dapat digunakan untuk memanggil subrutin yang tersedia dalam ruang alamat 64K-byte dari 8051.
Agar berhasil kembali ke titik setelah eksekusi subrutin yang dipanggil, CPU menyimpan alamat instruksi tepat di bawah LCALL pada stack. Jadi, ketika subrutin dipanggil, kontrol dipindahkan ke subrutin tersebut, dan prosesor menyimpan PC (penghitung program) pada stack dan mulai mengambil instruksi dari lokasi baru. Instruksi RET (return) mentransfer kontrol kembali ke pemanggil setelah menyelesaikan eksekusi subrutin. Setiap subrutin menggunakan RET sebagai instruksi terakhir.
ACALL (Panggilan Mutlak)
ACALL adalah instruksi 2-byte, berbeda dengan LCALL yang 3 byte. Alamat target subrutin harus dalam 2K byte karena hanya 11 bit dari 2 byte yang digunakan untuk alamat. Perbedaan antara ACALL dan LCALL adalah bahwa alamat target untuk LCALL dapat berada di mana saja dalam ruang alamat 64K-byte dari 8051, sedangkan alamat target CALL berada dalam kisaran 2K-byte.
Sebuah addressing modemengacu pada bagaimana Anda menangani lokasi memori tertentu. Ada lima cara berbeda atau lima mode pengalamatan untuk menjalankan instruksi ini yaitu sebagai berikut -
- Mode pengalamatan langsung
- Mode pengalamatan langsung
- Daftarkan mode pengalamatan langsung
- Daftarkan mode pengalamatan tidak langsung
- Mode pengalamatan yang diindeks
Mode Pengalamatan Segera
Mari kita mulai dengan sebuah contoh.
MOV A, #6AH
Secara umum, kita bisa menulis,
MOV A, #data
Ini disebut sebagai immediate karena data 8-bit segera ditransfer ke akumulator (operan tujuan).
Ilustrasi berikut menjelaskan instruksi di atas dan pelaksanaannya. Opcode 74H disimpan di alamat 0202. Data 6AH disimpan di alamat 0203 dalam memori program. Setelah membaca opcode 74H, data pada alamat memori program selanjutnya ditransfer ke akumulator A (E0H adalah alamat akumulator). Karena instruksinya adalah 2-byte dan dijalankan dalam satu siklus, penghitung program akan bertambah 2 dan akan menunjuk ke 0204 dari memori program.
Note- Simbol '#' sebelum 6AH menunjukkan bahwa operannya adalah data (8 bit). Jika tidak ada '#', bilangan heksadesimal akan dianggap sebagai alamat.
Mode Pengalamatan Langsung
Ini adalah cara lain untuk menangani operan. Di sini, alamat data (sumber data) diberikan sebagai operan. Mari kita ambil contoh.
MOV A, 04H
Bank register # 0 (register ke-4) beralamat 04H. Ketika instruksi MOV dijalankan, data yang disimpan dalam register 04H dipindahkan ke akumulator. Karena register 04H menyimpan data 1FH, 1FH dipindahkan ke akumulator.
Note- Kami belum menggunakan '#' dalam mode pengalamatan langsung, tidak seperti mode langsung. Jika kita menggunakan '#', nilai data 04H akan ditransfer ke akumulator, bukan 1FH.
Sekarang, perhatikan ilustrasi berikut. Ini menunjukkan bagaimana instruksi dijalankan.
Seperti yang ditunjukkan pada ilustrasi di atas, ini adalah instruksi 2-byte yang membutuhkan 1 siklus untuk diselesaikan. PC akan bertambah 2 dan akan menunjuk ke 0204. Opcode untuk instruksi MOV A, alamatnya E5H. Ketika instruksi pada 0202 dijalankan (E5H), akumulator menjadi aktif dan siap menerima data. Kemudian PC menuju ke alamat berikutnya sebagai 0203 dan mencari alamat lokasi 04H dimana data sumber (untuk ditransfer ke akumulator) berada. Pada 04H, kontrol menemukan data 1F dan mentransfernya ke akumulator dan karenanya eksekusi selesai.
Daftarkan Mode Pengalamatan Langsung
Dalam mode pengalamatan ini, kami menggunakan nama register secara langsung (sebagai operan sumber). Mari kita coba memahami dengan bantuan contoh.
MOV A, R4
Pada suatu waktu, register dapat mengambil nilai dari R0 hingga R7. Ada 32 register seperti itu. Untuk menggunakan 32 register dengan hanya 8 variabel ke register alamat, bank register digunakan. Ada 4 bank register yang diberi nama dari 0 sampai 3. Setiap bank terdiri dari 8 register yang diberi nama dari R0 sampai R7.
Pada suatu waktu, satu bank register dapat dipilih. Pemilihan bank register dimungkinkan melalui aSpecial Function Register (SFR) bernama Processor Status Word(PSW). PSW adalah SFR 8-bit di mana setiap bit dapat diprogram sesuai kebutuhan. Bit ditetapkan dari PSW.0 ke PSW.7. PSW.3 dan PSW.4 digunakan untuk memilih bank register.
Sekarang, perhatikan ilustrasi berikut untuk mendapatkan pemahaman yang jelas tentang cara kerjanya.
Opcode EC digunakan untuk MOV A, R4. Opcode disimpan di alamat 0202 dan ketika dijalankan, kontrol langsung menuju ke R4 dari bank register yang bersangkutan (yang dipilih di PSW). Jika bank register # 0 dipilih, maka data dari R4 bank register # 0 akan dipindahkan ke akumulator. Di sini 2F disimpan pada 04H. 04H mewakili alamat R4 bank register # 0.
Pergerakan Data (2F) ditandai dengan huruf tebal. 2F ditransfer ke akumulator dari lokasi memori data 0C H dan ditampilkan sebagai garis putus-putus. 0CH adalah lokasi alamat Register 4 (R4) bank register # 1. Instruksi di atas adalah 1 byte dan membutuhkan 1 siklus untuk eksekusi lengkap. Artinya, Anda dapat menghemat memori program dengan menggunakan mode pengalamatan langsung register.
Daftarkan Mode Pengalamatan Tidak Langsung
Dalam mode pengalamatan ini, alamat data disimpan di register sebagai operan.
MOV A, @R0
Di sini nilai di dalam R0 dianggap sebagai alamat, yang menyimpan data yang akan ditransfer ke akumulator. Example: Jika R0 bernilai 20H, dan data 2FH disimpan pada alamat 20H, maka nilai 2FH akan ditransfer ke akumulator setelah menjalankan instruksi ini. Lihat ilustrasi berikut.
Jadi opcode untuk MOV A, @R0adalah E6H. Dengan asumsi bahwa bank register # 0 dipilih, R0 dari bank register # 0 menyimpan data 20H. Kontrol program bergerak ke 20H di mana ia menempatkan data 2FH dan mentransfer 2FH ke akumulator. Ini adalah instruksi 1-byte dan penghitung program bertambah 1 dan bergerak ke 0203 dari memori program.
Note- Hanya R0 dan R1 yang diizinkan untuk membentuk instruksi pengalamatan tidak langsung register. Dengan kata lain, programmer dapat membuat instruksi menggunakan @ R0 atau @ R1. Semua bank register diperbolehkan.
Mode Pengalamatan Terindeks
Kami akan mengambil dua contoh untuk memahami konsep mode pengalamatan yang diindeks. Lihat instruksi berikut -
MOVC A, @A+DPTR
dan
MOVC A, @A+PC
dimana DPTR adalah penunjuk data dan PC adalah penghitung program (keduanya adalah register 16-bit). Perhatikan contoh pertama.
MOVC A, @A+DPTR
Operand sumber adalah @ A + DPTR. Ini berisi data sumber dari lokasi ini. Di sini kami menambahkan konten DPTR dengan konten akumulator saat ini. Penambahan ini akan memberikan alamat baru yaitu alamat sumber data. Data yang ditunjukkan oleh alamat ini kemudian ditransfer ke akumulator.
Opcode-nya adalah 93H. DPTR memiliki nilai 01FE, dimana 01 berada di DPH (lebih tinggi 8 bit) dan FE berada di DPL (lebih rendah 8 bit). Akumulator memiliki nilai 02H. Kemudian dilakukan penambahan 16-bit dan 01FE H + 02H menghasilkan 0200 H. Data di lokasi 0200H akan ditransfer ke akumulator. Nilai sebelumnya di dalam akumulator (02H) akan diganti dengan data baru dari 0200H. Data baru di akumulator disorot dalam ilustrasi.
Ini adalah instruksi 1-byte dengan 2 siklus yang diperlukan untuk eksekusi dan waktu eksekusi yang diperlukan untuk instruksi ini lebih tinggi dibandingkan dengan instruksi sebelumnya (yang semuanya masing-masing 1 siklus).
Contoh lainnya MOVC A, @A+PCbekerja dengan cara yang sama seperti contoh di atas. Alih-alih menambahkan DPTR dengan akumulator, di sini data di dalam penghitung program (PC) ditambahkan dengan akumulator untuk mendapatkan alamat target.
Register Fungsi Khusus (atau Register Tujuan Khusus, atau hanya Register Khusus) adalah register di dalam mikroprosesor yang mengontrol atau memantau berbagai fungsi mikroprosesor. Karena register khusus terkait erat dengan beberapa fungsi atau status khusus prosesor, register tersebut mungkin tidak dapat langsung ditulis oleh instruksi normal (seperti menambah, memindahkan, dll.). Sebaliknya, beberapa register khusus di beberapa arsitektur prosesor memerlukan instruksi khusus untuk memodifikasinya.
Pada 8051, register A, B, DPTR, dan PSW merupakan bagian dari kelompok register yang biasa disebut dengan SFR (register fungsi khusus). SFR dapat diakses dengan nama atau alamatnya.
Tabel berikut menunjukkan daftar SFR dan alamatnya.
Alamat Byte | Alamat Bit | ||||||||
---|---|---|---|---|---|---|---|---|---|
FF | |||||||||
F0 | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | B |
E0 | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | ACC |
D0 | D7 | D6 | D5 | D4 | D3 | D2 | - | D0 | PSW |
B8 | - | - | - | SM | BB | BA | B9 | B8 | AKU P |
B0 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | P3 |
A2 | AF | - | - | AC | AB | A A | A9 | A8 | YAITU |
A0 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | P2 |
99 | Sedikit Tidak Dapat Dialamatkan | SBUF | |||||||
98 | 9F | 9E | 9D | 9C | 9B | 9A | 99 | 98 | SCON |
90 | 97 | 96 | 95 | 94 | 93 | 92 | 91 | 90 | P1 |
8D | Sedikit Tidak Dapat Dialamatkan | TH1 | |||||||
8C | Sedikit Tidak Dapat Dialamatkan | TH0 | |||||||
8B | Sedikit Tidak Dapat Dialamatkan | TL1 | |||||||
8A | Sedikit Tidak Dapat Dialamatkan | TL0 | |||||||
89 | Sedikit Tidak Dapat Dialamatkan | TMOD | |||||||
88 | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 | TCON |
87 | Sedikit Tidak Dapat Dialamatkan | PCON | |||||||
83 | Sedikit Tidak Dapat Dialamatkan | DPH | |||||||
82 | Sedikit Tidak Dapat Dialamatkan | DPL | |||||||
81 | Sedikit Tidak Dapat Dialamatkan | SP | |||||||
80 | 87 | 87 | 85 | 84 | 83 | 82 | 81 | 80 | P0 |
Pertimbangkan dua poin berikut tentang alamat SFR.
Register fungsi khusus dapat memiliki alamat antara 80H hingga FFH. Alamat ini di atas 80H, karena alamat dari 00 hingga 7FH adalah alamat memori RAM di dalam 8051.
Tidak semua ruang alamat 80 hingga FF digunakan oleh SFR. Lokasi yang tidak digunakan, 80H hingga FFH, dicadangkan dan tidak boleh digunakan oleh programmer 8051.
CY | PSW.7 | Bawa Bendera |
AC | PSW.6 | Bendera Carry Auxiliary |
F0 | PSW.5 | Tandai 0 tersedia bagi pengguna untuk tujuan umum. |
RS1 | PSW.4 | Daftar pemilih Bank bit 1 |
RS0 | PSW.3 | Daftar pemilih Bank bit 0 |
OV | PSW.2 | Bendera Overflow |
- | PSW.1 | BENDERA yang dapat ditentukan pengguna |
P. | PSW.0 | BENDERA Paritas. Disetel / dibersihkan oleh perangkat keras selama siklus instruksi untuk menunjukkan angka genap / ganjil 1 bit dalam akumulator. |
Dalam contoh berikut, nama register SFR diganti dengan alamatnya.
CY | AC | F0 | RS1 | RS0 | OV | - | P. |
---|
Kita dapat memilih bit Bank Register yang sesuai menggunakan bit RS0 dan RS1.
RS1 | RS2 | Register Bank | Alamat |
---|---|---|---|
0 | 0 | 0 | 00H-07H |
0 | 1 | 1 | 08H-0FH |
1 | 0 | 2 | 10H-17H |
1 | 1 | 3 | 18H-1FH |
Program Status Word (PSW) berisi bit status untuk mencerminkan status CPU saat ini. Varian 8051 menyediakan satu register fungsi khusus, PSW, dengan informasi status ini. 8251 menyediakan dua tanda status tambahan, Z dan N, yang tersedia dalam register fungsi khusus kedua yang disebut PSW1.
SEBUAH timeradalah jenis jam khusus yang digunakan untuk mengukur interval waktu. Pengatur waktu yang menghitung dari nol ke atas untuk mengukur waktu yang telah berlalu sering disebut astopwatch. Ini adalah perangkat yang menghitung mundur dari interval waktu tertentu dan digunakan untuk menghasilkan penundaan waktu, misalnya, jam pasir adalah pengatur waktu.
SEBUAH counteradalah perangkat yang menyimpan (dan terkadang menampilkan) berapa kali peristiwa atau proses tertentu terjadi, sehubungan dengan sinyal jam. Ini digunakan untuk menghitung peristiwa yang terjadi di luar mikrokontroler. Dalam elektronik, penghitung dapat diimplementasikan dengan mudah menggunakan rangkaian tipe register seperti flip-flop.
Perbedaan antara Timer dan Penghitung
Titik-titik yang membedakan pengatur waktu dari penghitung adalah sebagai berikut -
Timer | Melawan |
---|---|
Register bertambah untuk setiap siklus mesin. | Register bertambah dengan mempertimbangkan transisi 1 ke 0 sesuai dengan pin input eksternal (T0, T1). |
Tingkat penghitungan maksimum adalah 1/12 dari frekuensi osilator. | Tingkat penghitungan maksimum adalah 1/24 dari frekuensi osilator. |
Pengatur waktu menggunakan frekuensi jam internal, dan menghasilkan penundaan. | Penghitung menggunakan sinyal eksternal untuk menghitung pulsa. |
Pewaktu 8051 dan Register Terkaitnya
8051 memiliki dua timer, Timer 0 dan Timer 1. Mereka dapat digunakan sebagai timer atau sebagai penghitung peristiwa. Baik Timer 0 dan Timer 1 memiliki lebar 16-bit. Karena 8051 mengikuti arsitektur 8-bit, setiap 16 bit diakses sebagai dua register terpisah dari byte rendah dan byte tinggi.
Timer 0 Daftar
Register 16-bit dari Timer 0 diakses sebagai byte rendah dan tinggi. Register byte rendah disebut TL0 (Timer 0 low byte) dan register byte tinggi disebut TH0 (Timer 0 high byte). Register ini dapat diakses seperti register lainnya. Misalnya, instruksiMOV TL0, #4H memindahkan nilai ke dalam byte rendah dari Timer # 0.
Timer 1 Daftar
Register 16-bit dari Timer 1 diakses sebagai byte rendah dan tinggi. Register byte rendah disebut TL1 (Timer 1 byte rendah) dan register byte tinggi disebut TH1 (Timer 1 byte tinggi). Register ini dapat diakses seperti register lainnya. Misalnya, instruksiMOV TL1, #4H memindahkan nilai ke byte rendah Timer 1.
TMOD (Mode Timer) Daftar
Baik Timer 0 dan Timer 1 menggunakan register yang sama untuk mengatur berbagai mode operasi timer. Ini adalah register 8-bit di mana 4 bit yang lebih rendah disisihkan untuk Timer 0 dan empat bit teratas untuk Timer. Dalam setiap kasus, 2 bit yang lebih rendah digunakan untuk mengatur mode pengatur waktu terlebih dahulu dan 2 bit atas digunakan untuk menentukan lokasi.
Gate - Saat disetel, pengatur waktu hanya berjalan saat INT (0,1) tinggi.
C/T - Counter / Timer pilih bit.
M1 - Mode bit 1.
M0 - Mode bit 0.
GERBANG
Setiap pengatur waktu memiliki cara untuk memulai dan menghentikan. Beberapa pengatur waktu melakukan ini dengan perangkat lunak, beberapa dengan perangkat keras, dan beberapa memiliki kontrol perangkat lunak dan perangkat keras. Timer 8051 memiliki kontrol perangkat lunak dan perangkat keras. Awal dan penghentian pengatur waktu dikontrol oleh perangkat lunak menggunakan instruksiSETB TR1 dan CLR TR1 untuk timer 1, dan SETB TR0 dan CLR TR0 untuk timer 0.
Instruksi SETB digunakan untuk memulainya dan dihentikan oleh instruksi CLR. Instruksi ini memulai dan menghentikan pengatur waktu selama GATE = 0 dalam register TMOD. Pengatur waktu dapat dimulai dan dihentikan oleh sumber eksternal dengan membuat GATE = 1 di register TMOD.
C / T (JAM / TIMER)
Bit dalam register TMOD ini digunakan untuk memutuskan apakah pengatur waktu digunakan sebagai a delay generator atau sebuah event manager. Jika C / T = 0, ini digunakan sebagai pengatur waktu untuk menghasilkan penundaan pengatur waktu. Sumber jam untuk menciptakan waktu tunda adalah frekuensi kristal pada 8051. Jika C / T = 0, frekuensi kristal yang terpasang pada 8051 juga menentukan kecepatan di mana pengatur waktu 8051 berdetak pada interval reguler.
Frekuensi pengatur waktu selalu 1/12 dari frekuensi kristal yang terpasang pada 8051. Meskipun berbagai sistem berbasis 8051 memiliki frekuensi XTAL 10 MHz hingga 40 MHz, kami biasanya bekerja dengan frekuensi XTAL 11,0592 MHz. Ini karena baud rate untuk komunikasi serial 8051.XTAL = 11,0592 memungkinkan sistem 8051 untuk berkomunikasi dengan PC tanpa kesalahan.
M1 / M2
M1 | M2 | Mode |
---|---|---|
0 | 0 | Mode pengatur waktu 13-bit. |
0 | 1 | Mode pengatur waktu 16-bit. |
1 | 0 | Mode muat ulang otomatis 8-bit. |
1 | 1 | Mode tumpah. |
Mode Pengatur Waktu yang Berbeda
Mode 0 (Mode Timer 13-Bit)
Baik Timer 1 dan Timer 0 dalam Mode 0 beroperasi sebagai pencacah 8-bit (dengan prescaler bagi-oleh-32). Register pengatur waktu dikonfigurasi sebagai register 13-bit yang terdiri dari 8 bit TH1 dan 5 bit TL1 yang lebih rendah. 3 bit teratas TL1 tidak dapat ditentukan dan harus diabaikan. Menyetel bendera run (TR1) tidak menghapus register. Bendera interupsi pengatur waktu TF1 disetel ketika hitungan bergeser dari semua 1 detik ke semua 0 detik. Operasi mode 0 sama untuk Timer 0 seperti untuk Timer 1.
Mode 1 (Mode Timer 16-Bit)
Mode Timer "1" adalah timer 16-bit dan merupakan mode yang umum digunakan. Ini berfungsi dengan cara yang sama seperti mode 13-bit kecuali bahwa semua 16 bit digunakan. TLx bertambah mulai dari 0 hingga maksimum 255. Setelah nilai 255 tercapai, TLx disetel ulang ke 0 dan kemudian THx bertambah 1. Sebagai pengatur waktu 16-bit penuh, pengatur waktu dapat berisi hingga 65536 nilai yang berbeda dan itu akan meluap kembali ke 0 setelah 65.536 siklus mesin.
Mode 2 (8 Bit Auto Reload)
Kedua register timer dikonfigurasi sebagai penghitung 8-bit (TL1 dan TL0) dengan reload otomatis. Overflow dari TL1 (TL0) menetapkan TF1 (TF0) dan juga memuat ulang TL1 (TL0) dengan konten Th1 (TH0), yang telah diatur sebelumnya oleh perangkat lunak. Reload meninggalkan TH1 (TH0) tidak berubah.
Manfaat mode reload otomatis adalah Anda dapat memiliki timer untuk selalu berisi nilai dari 200 hingga 255. Jika Anda menggunakan mode 0 atau 1, Anda harus memeriksa kode untuk melihat overflow dan, dalam hal ini, setel ulang timer ke 200. Dalam kasus ini, instruksi berharga memeriksa nilainya dan / atau dimuat ulang. Dalam mode 2, mikrokontroler menangani ini. Setelah Anda mengonfigurasi pengatur waktu dalam mode 2, Anda tidak perlu khawatir tentang memeriksa untuk melihat apakah pengatur waktu telah meluap, Anda juga tidak perlu khawatir tentang menyetel ulang nilainya karena perangkat keras mikrokontroler akan melakukan semuanya untuk Anda. Mode muat ulang otomatis digunakan untuk menetapkan baud rate umum.
Mode 3 (Mode Pengatur Waktu Terpisah)
Mode pengatur waktu "3" dikenal sebagai split-timer mode. Ketika Timer 0 ditempatkan dalam mode 3, ini menjadi dua timer 8-bit yang terpisah. Timer 0 adalah TL0 dan Timer 1 adalah TH0. Kedua penghitung waktu dihitung dari 0 hingga 255 dan jika terjadi luapan, reset kembali ke 0. Semua bit yang ada pada Timer 1 sekarang akan terikat ke TH0.
Ketika Timer 0 dalam mode split, Timer 1 yang sebenarnya (yaitu TH1 dan TL1) dapat diatur dalam mode 0, 1 atau 2, tetapi tidak dapat dimulai / dihentikan karena bit yang melakukan itu sekarang terhubung ke TH0. Timer nyata 1 akan bertambah dengan setiap siklus mesin.
Memulai Timer
Tentukan mode timer. Pertimbangkan pengatur waktu 16-bit yang berjalan terus menerus, dan tidak tergantung pada pin eksternal apa pun.
Inisialisasi TMOD SFR. Gunakan 4 bit terendah dari TMOD dan pertimbangkan Timer 0. Pertahankan dua bit, GATE 0 dan C / T 0, sebagai 0, karena kita ingin timer tidak bergantung pada pin eksternal. Karena mode 16-bit adalah mode timer 1, hapus T0M1 dan setel T0M0. Secara efektif, satu-satunya bit yang dihidupkan adalah bit 0 dari TMOD. Sekarang jalankan instruksi berikut -
MOV TMOD,#01h
Sekarang, Timer 0 dalam mode timer 16-bit, tetapi timer tidak bekerja. Untuk memulai pengatur waktu dalam mode berjalan, atur bit TR0 dengan menjalankan instruksi berikut -
SETB TR0
Sekarang, Timer 0 akan segera mulai menghitung, bertambah sekali setiap siklus mesin.
Membaca Timer
Pengatur waktu 16-bit dapat dibaca dengan dua cara. Baca nilai aktual pengatur waktu sebagai angka 16-bit, atau Anda mendeteksi ketika pengatur waktu meluap.
Mendeteksi Timer Overflow
Ketika pengatur waktu meluap dari nilai tertingginya ke 0, mikrokontroler secara otomatis mengatur bit TFx di register TCON. Jadi alih-alih memeriksa nilai pasti dari pengatur waktu, bit TFx dapat diperiksa. Jika TF0 diset, maka Timer 0 telah meluap; jika TF1 diset, maka Timer 1 telah meluap.
Interupsi adalah sinyal ke prosesor yang dipancarkan oleh perangkat keras atau perangkat lunak yang menunjukkan suatu peristiwa yang perlu perhatian segera. Setiap kali terjadi interupsi, pengontrol menyelesaikan eksekusi dari instruksi saat ini dan memulai eksekusi dari sebuahInterrupt Service Routine (ISR) atau Interrupt Handler. ISR memberi tahu prosesor atau pengontrol apa yang harus dilakukan ketika interupsi terjadi. Interupsi dapat berupa interupsi perangkat keras atau interupsi perangkat lunak.
Interupsi Perangkat Keras
Interupsi perangkat keras adalah sinyal peringatan elektronik yang dikirim ke prosesor dari perangkat eksternal, seperti pengontrol disk atau perangkat eksternal. Misalnya, ketika kita menekan tombol pada keyboard atau menggerakkan mouse, mereka memicu interupsi perangkat keras yang menyebabkan prosesor membaca tombol atau posisi mouse.
Interupsi Perangkat Lunak
Interupsi perangkat lunak disebabkan baik oleh kondisi luar biasa atau instruksi khusus dalam set instruksi yang menyebabkan interupsi saat dijalankan oleh prosesor. Misalnya, jika unit logika aritmatika prosesor menjalankan perintah untuk membagi angka dengan nol, menyebabkan pengecualian bagi-dengan-nol, sehingga menyebabkan komputer mengabaikan kalkulasi atau menampilkan pesan kesalahan. Instruksi interupsi perangkat lunak bekerja mirip dengan panggilan subrutin.
Apa itu Polling?
Status pemantauan berkelanjutan dikenal sebagai polling. Mikrokontroler terus memeriksa status perangkat lain; dan saat melakukannya, ia tidak melakukan operasi lain dan menghabiskan semua waktu pemrosesannya untuk pemantauan. Masalah ini dapat diatasi dengan menggunakan interupsi.
Dalam metode interupsi, pengontrol hanya merespon ketika terjadi interupsi. Dengan demikian, pengontrol tidak diharuskan untuk secara teratur memantau status (bendera, sinyal, dll.) Dari perangkat yang terhubung dan terpasang.
Interupsi v / s Polling
Berikut adalah analogi yang membedakan interupsi dari polling -
Mengganggu | Jajak pendapat |
---|---|
Sebuah interupsi seperti a shopkeeper. Jika seseorang membutuhkan layanan atau produk, dia mendatanginya dan memberi tahu dia tentang kebutuhannya. Jika terjadi interupsi, ketika flag atau sinyal diterima, mereka memberi tahu pengontrol bahwa mereka perlu diservis. | Metode polling seperti a salesperson. Penjual pergi dari pintu ke pintu sambil meminta untuk membeli produk atau layanan. Demikian pula, pengontrol terus memantau flag atau sinyal satu per satu untuk semua perangkat dan menyediakan layanan ke komponen mana pun yang membutuhkan layanannya. |
Rutin Layanan Interupsi
Untuk setiap interupsi, harus ada rutin layanan interupsi (ISR), atau interrupt handler. Ketika interupsi terjadi, mikrokontroler menjalankan rutinitas layanan interupsi. Untuk setiap interupsi, ada lokasi tetap dalam memori yang menyimpan alamat rutin layanan interupsi, ISR. Tabel lokasi memori yang disisihkan untuk menampung alamat ISR disebut sebagai Tabel Vektor Interupsi.
Menginterupsi Tabel Vektor
Ada enam interupsi termasuk RESET di 8051.
Interupsi | Lokasi ROM (Hex) | Pin |
---|---|---|
Interupsi | Lokasi ROM (HEX) | |
Serial COM (RI dan TI) | 0023 | |
Timer 1 interupsi (TF1) | 001B | |
Eksternal HW interrupt 1 (INT1) | 0013 | P3.3 (13) |
Interupsi HW eksternal 0 (INT0) | 0003 | P3.2 (12) |
Timer 0 (TF0) | 000B | |
Setel ulang | 0000 | 9 |
Saat pin reset diaktifkan, 8051 akan melompat ke lokasi alamat 0000. Ini adalah reset power-up.
Dua interupsi disisihkan untuk timer: satu untuk timer 0 dan satu lagi untuk timer 1. Lokasi memori masing-masing 000BH dan 001BH dalam tabel vektor interupsi.
Dua interupsi disisihkan untuk interupsi eksternal perangkat keras. Pin no. 12 dan Pin no. 13 di Port 3 adalah untuk interupsi perangkat keras eksternal, masing-masing INT0 dan INT1. Lokasi memori masing-masing adalah 0003H dan 0013H dalam tabel vektor interupsi.
Komunikasi serial memiliki satu interupsi yang dimiliki baik untuk menerima dan mengirim. Lokasi memori 0023H termasuk dalam interupsi ini.
Langkah-langkah untuk Melakukan Interupsi
Saat interupsi aktif, mikrokontroler melakukan langkah-langkah berikut -
Mikrokontroler menutup instruksi yang sedang dijalankan dan menyimpan alamat instruksi berikutnya (PC) di stack.
Ini juga menyimpan status saat ini dari semua interupsi secara internal (yaitu, bukan pada tumpukan).
Ini melompat ke lokasi memori dari tabel vektor interupsi yang menyimpan alamat rutin layanan interupsi.
Mikrokontroler mendapatkan alamat ISR dari tabel vektor interupsi dan melompat ke sana. Ia mulai menjalankan subrutin layanan interupsi, yaitu RETI (kembali dari interupsi).
Setelah menjalankan instruksi RETI, mikrokontroler kembali ke lokasi di mana ia diinterupsi. Pertama, ia mendapatkan alamat penghitung program (PC) dari tumpukan dengan memunculkan byte teratas dari tumpukan ke PC. Kemudian, itu mulai dijalankan dari alamat itu.
Edge Triggering vs. Level Triggering
Modul interupsi terdiri dari dua jenis - level-triggered atau edge-triggered.
Level Dipicu | Edge Triggered |
---|---|
Modul interupsi yang dipicu oleh level selalu menghasilkan interupsi setiap kali level sumber interupsi ditetapkan. | Modul interupsi yang dipicu tepi menghasilkan interupsi hanya ketika mendeteksi tepi yang menegaskan dari sumber interupsi. Tepi terdeteksi ketika tingkat sumber interupsi benar-benar berubah. Itu juga dapat dideteksi dengan pengambilan sampel berkala dan mendeteksi tingkat yang ditetapkan ketika sampel sebelumnya tidak dinyatakan. |
Jika sumber interupsi masih ditetapkan saat penangan interupsi firmware menangani interupsi, modul interupsi akan membuat ulang interupsi, menyebabkan penangan interupsi dipanggil lagi. | Modul interupsi yang dipicu tepi dapat segera dijalankan, tidak peduli bagaimana sumber interupsi berperilaku. |
Interupsi yang dipicu level merepotkan untuk firmware. | Interupsi yang dipicu tepi menjaga kompleksitas kode firmware tetap rendah, mengurangi jumlah kondisi firmware, dan memberikan lebih banyak fleksibilitas saat interupsi ditangani. |
Mengaktifkan dan Menonaktifkan Interupsi
Setelah Reset, semua interupsi dinonaktifkan meskipun diaktifkan. Interupsi harus diaktifkan menggunakan perangkat lunak agar mikrokontroler dapat merespons interupsi tersebut.
Register IE (interrupt enable) bertanggung jawab untuk mengaktifkan dan menonaktifkan interupsi. IE adalah register bitaddressable.
Interrupt Enable Register
EA | - | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
---|
EA - Aktifkan / nonaktifkan global.
- - Tidak ditentukan.
ET2 - Aktifkan Timer 2 interupsi.
ES - Aktifkan Interupsi port serial.
ET1 - Aktifkan Timer 1 interupsi.
EX1 - Aktifkan Eksternal 1 interupsi.
ET0 - Aktifkan Timer 0 interupsi.
EX0 - Aktifkan Eksternal 0 interupsi.
Untuk mengaktifkan interupsi, kami mengambil langkah-langkah berikut -
Bit D7 dari register IE (EA) harus tinggi agar register lainnya dapat diterapkan.
Jika EA = 1, interupsi akan diaktifkan dan akan ditanggapi, jika bit yang sesuai di IE tinggi. Jika EA = 0, tidak ada interupsi yang akan merespons, meskipun pin terkait di register IE tinggi.
Prioritas Interupsi pada 8051
Kita dapat mengubah prioritas interupsi dengan menetapkan prioritas yang lebih tinggi ke salah satu interupsi. Ini dilakukan dengan memprogram register yang disebutIP (prioritas interupsi).
Gambar berikut menunjukkan bit-bit register IP. Setelah disetel ulang, register IP berisi semua 0. Untuk memberikan prioritas yang lebih tinggi ke salah satu interupsi, kami membuat bit yang sesuai di register IP menjadi tinggi.
- | - | - | - | PT1 | PX1 | PT0 | PX0 |
---|
- | IP.7 | Tidak Diterapkan. |
- | IP.6 | Tidak Diterapkan. |
- | IP.5 | Tidak Diterapkan. |
- | IP.4 | Tidak Diterapkan. |
PT1 | IP.3 | Mendefinisikan tingkat prioritas interupsi Timer 1. |
PX1 | IP.2 | Mendefinisikan tingkat prioritas Interupsi Eksternal 1. |
PT0 | IP.1 | Mendefinisikan tingkat prioritas interupsi Timer 0. |
PX0 | IP.0 | Mendefinisikan tingkat prioritas External Interrupt 0. |
Interupsi di dalam Interrupt
Apa yang terjadi jika 8051 menjalankan ISR milik interupsi dan yang lain aktif? Dalam kasus seperti itu, interupsi berprioritas tinggi dapat mengganggu interupsi berprioritas rendah. Ini dikenal sebagaiinterrupt inside interrupt. Pada 8051, interupsi berprioritas rendah dapat diinterupsi oleh interupsi berprioritas tinggi, tetapi tidak oleh interupsi berprioritas rendah lainnya.
Memicu Interupsi oleh Perangkat Lunak
Ada kalanya kita perlu menguji ISR dengan cara simulasi. Ini dapat dilakukan dengan instruksi sederhana untuk mengatur tinggi interupsi dan dengan demikian menyebabkan 8051 melompat ke tabel vektor interupsi. Misalnya, atur bit IE sebagai 1 untuk timer 1. Sebuah instruksiSETB TF1 akan mengganggu 8051 dalam apa pun yang dilakukannya dan memaksanya untuk melompat ke tabel vektor interupsi.