Memahami apa itu mikrokontroler, membedakannya dengan mikroprosesor, mempelajari arsitektur 8051 sebagai contoh klasik, mengenali mikrokontroler modern seperti ATmega328P (Arduino Uno), serta memahami konsep embedded system sebagai penerapan utama mikrokontroler.
Capaian Pembelajaran Bab Ini
Setelah mempelajari bab ini, mahasiswa mampu menjelaskan perbedaan fundamental antara mikroprosesor dan mikrokontroler serta alasan mengapa mikrokontroler lebih cocok untuk tugas embedded; mendeskripsikan arsitektur internal 8051 termasuk CPU, memori, port I/O, dan timer; memahami peran Arduino sebagai platform pembelajaran mikrokontroler modern; dan menjelaskan konsep embedded system beserta contoh aplikas mikrokontroler di kehidupan sehari-hari.
Sepanjang semester ini kita fokus pada mikroprosesor 8086 yang mewakili komputer generasi awal. Namun di dunia nyata, prosesor modern seperti Intel Core dan AMD Ryzen hanyalah evolusi dari arsitektur x86 yang dimulai dari 8086. Di sisi lain, ada kelas perangkat yang jauh lebih banyak jumlahnya tetapi jarang terlihat secara langsung: mikrokontroler yang tertanam di mana-mana — dari remote TV hingga kamera ke mobil.
⚙
15 miliar+
Mikrokontroler terjual per tahun (estimasi)
⚙
98%+
Perangkat elektronik mengandung mikrokontroler
⚙
Arduino Uno
Platform belajar mikrokontroler paling populer
Bab ini mempersiapkan Anda untuk memahami dunia embedded system — domain di mana mikrokontroler adalah raja. Pemahaman 8086 yang telah Anda pelajari memberikan fondasi kuat untuk memahami bagaimana CPU bekerja. Sekarang kita melihat bagaimana seluruh sistem (CPU + memori + I/O) bisa muat dalam satu chip kecil.
Apa itu Embedded System?
Embedded system (sistem tertanam) adalah sistem komputer yang dirancang untuk menjalankan fungsi tertentu di dalam perangkat yang lebih besar, bukan sebagai komputer umum yang dapat diprogram bebas. Contoh: kontrol mesin cuci, sistem ABS di mobil, thermostat pintar cerdas, remote TV, drone, dan bahaya microwave — semuanya mengandung mikrokontroler di dalamnya.
15.2 Apa Itu Mikrokontroler?
Mikrokontroler (Microcontroller Unit / MCU) adalah sebuah sistem komputer lengkap dalam satu chip yang mencakup CPU, memori, dan peripheral I/O. Berbeda dengan mikroprosesor yang membutuhkan komponen eksternal, mikrokontroler bisa berdiri sendiri — cukup diberi tegangan dan clock.
Analogi Sederhana
Mikrokontroler seperti otak kecil — bayangkan sebuah kamera digital. Di dalamnya ada "otak" yang memproses gambar, "memori" yang menyimpan foto, "mata" (kamera), dan "tangan" (tombol, layar). Semua dalam satu chip kecil.
Analogi Teknis
Secara teknis, mikrokontroler = CPU + RAM + ROM/Flash + Timer + UART + GPIO + ADC + DAC + (opsional) DSP. "GPIO" adalah pin I/O umum yang bisa dikonfigurasi sebagai input atau output oleh programmer. "ADC" mengkonversi sinyal analog ke digital; "DAC" sebaliknya. "UART" untuk komunikasi serial.
15.3 Mikroprosesor vs Mikrokontroler
Perbandingan ini penting untuk memahami posisi mikrokontroler dalam dunia komputasi. Meskipun batas antara keduanya semakin blur di era modern (SoC modern bisa dilihat sebagai "mikroprosesor dengan I/O terintegrasi"), secara konseptual perbedaannya tetap fundamental.
C/C++, Wiring/Processing (Arduino), Assembly, C bare-metal
Analogi "Restoran"
Mikroprosesor = Kepala Chef di Dapur Besar
Membutuh asisten terpisah untuk setiap stasi kerja (RAM = asisten bahan, ROM = resep, I/O = piring). Sangat fleksibel tapi butuh banyak ruang dan biaya.
Mikrokontroler = Chef di Dapur Kecil
Satu orang mengelola semua stasi: memasak, memasak, mencuci, menyajikan. Lebih kecil tapi cukup untuk dapur kecil. Mandiri, lengkap, dan murah.
15.4 Pengenalan 8051
Intel 8051 (dibuat oleh Intel pada tahun 1980) adalah salah satu mikrokontroler 8-bit yang paling bersejarah dan banyak dijadikan referensi dalam pendidikan. Meskipun sudah sangat lawas, arsitekturnya menjadi fondasi bagi hampir semua mikrokontroler modern.
Spesifikasi
Nilai (8051)
Nilai (ATmega328P)
Bit CPU
8 bit
8 bit (AVR)
Clock Maks (versi asli)
12 MHz
16 MHz (Arduino Uno)
ROM (program)
4 KB internal
32 KB Flash
RAM (data)
128 byte internal
2 KB SRAM
Timer
2 × 16-bit
2 × 8-bit
Port I/O
4 port × 8 bit (32 pin)
3 port × 8 bit (24 pin)
UART
1 × serial
1 × serial
Tegangan
+5V
2.7–5.5V
Pin
40 pin (DIP)
28 pin (DIP) / 32 pin (TQFP)
Mengapa Masih Belajar 8051 di Era Arduino? Karena 8051 mengajarkan konsep fundamental yang tidak berubah: register, instruksi assembly, memori, I/O port, timer, dan interupsi. Pemahaman 8051 membuat Anda siap memahami ATmega328P (Arduino) secara mendalam — hanya perlu mempelajari fitur tambahan seperti Flash, PWM, ADC, dan instruksi RISC yang berbeda.
15.5 Arsitektur Internal 8051
CPU 8051
ALU
8-bit
Accumulator
A register
B Register
B register
DPTR
Data Pointer
PC
Program Counter
Bus Internal
Data Bus (8-bit) + Address Bus (16-bit)
ROM
4 KB
RAM
128 B
SFR
21 byte
Port 0
8 pin I/O
Port 1
8 pin I/O
Port 2
8+8 pin
Timer 0
16-bit
Timer 1
16-bit
Serial
UART
Oscillator
Internal / XTAL1-XTAL2
Control
CU + Flags
INT
2 sumber
Gambar 15.1: Diagram blok arsitektur internal 8051 menunjukkan CPU, memori (ROM, RAM, SFR), dan peripheral (Port, Timer, Serial) yang terintegrasi dalam satu chip.
15.6 Memori pada 8051
Berbeda dengan 8086 yang memiliki megabytes RAM dan storage eksternal, 8051 hanya memiliki memori internal yang sangat terbatas. Namun untuk aplikasi embedded, ukuran ini sering sudah mencukupi.
ROM (4 KB)
Menyimpan program tetap (non-volatile)
Diisi saat manufaktur, tidak bisa diubah saat runtime
Vector interrupt disimpan di sini (alamat 0003h)
RAM (128 Byte)
Menyimpan data sementara saat program berjalan (volatile)
Hilang saat power dimatikan
Digunakan untuk stack dan variabel
SFR (21 Byte)
Special Function Register — kontrol peripheral
Port 0–3, Timer 0–1, Serial, Interrupt, Power Control
Dibaca/ditulis seperti memori biasa (alamat 80h–FFh)
15.7 Komunikasi Serial (UART) pada 8051
8051 memiliki UART (Universal Asynchronous Receiver Transmitter) internal yang memungkinkannya berkomunikasi serial secara asinkron. Ini adalah fitur yang sangat penting karena memungkinkan mikrokontroler berkomunikasi dengan PC, mikroprosesor lain, modul wireless, dan sensor.
Asinkron Serial
Tidak menggunakan sinyal clock bersama antara pengirim dan penerima
Menggunakan baud rate generator internal yang disetelarasih di kedua sisi
Data dikirim sebagai paket bit-serial dengan start bit, data, parity, stop bit
Contoh: RS-232, UART Arduino
Sinkron Serial
Menggunakan sinyal clock bersama (disediakan oleh satu pihak)
Data dikirim dalam blok frame yang tersinkronisasi oleh clock
Lebih efisien untuk transfer blok data besar
Contoh: SPI, I²C
Contoh: Kirim karakter 'A' melalui serial port 8051
; Kirim karakter 'A' via serial (Port 0, SBUF); Pastikan baud rate sudah dikonfigurasi via Timer 1 terlebih dahulu; Untuk Arduino, cukup gunakan Serial.print('A');; Versi 8051 murni (dalam emulator EMU8051):; Pastikan SCON = 0x50 (Mode 1: 8-bit UART, baud rate menyesuaikan TH1, TR1, TMOD); Kirim data ke SBUF (alamat SBUF = 0x99)MOVSBUF, #0A9h; SBUF = SFR alamat 99h; Tunggu transmit selesai (bit TI di SCON menjadi 1, lalu 0)wait_tx:JNBTI; jika TI=0, ulangiSJMPwait_tx; ulangi sampai selesai; --- Terima data dari serial port ---; Pastikan RI=1 (Receive Enable) di SCON; Tunggu data masuk (bit RI di SCON menjadi 1)wait_rx:JNBRI; jika RI=0, ulangiSJMPwait_rx; Baca dari SBUFMOVA, SBUF; baca data ke register A; Kirim balik via serial; Pastikan TXE=1 (Transmit Enable) di SCONMOVSBUF, Await_tx2:JNBTISJMPwait_tx2
Kode 15.1: Komunikasi serial sederhana pada 8051 — kirim data, lalu terima balikannya.
15.8 Port I/O pada 8051
8051 memiliki 4 port I/O 8-bit yang terhubung langsung ke pin fisik chip. Port 0 dan Port 1 adalah bit-addressable — setiap pin dapat dikonfigurasi sebagai input ATAU output secara individual. Port 2 (P2) dan Port 3 (P3) memiliki karakteristik khusus.
Port
Pin
Bit-Addressable?
Karakteristik
Port 0
P0.0 – P0.7
Ya
8 pin I/O fleksibel (semua bisa diatur in/out), tidak memiliki fungsi alternatif
Port 1
P1.0 – P1.7
Ya
8 pin I/O fleksibel, sama seperti Port 0
Port 2 (P2)
P2.0 – P2.7
Ya
8 pin I/O fleksibel, sama seperti Port 0 dan Port 1
Port 2 (P3)
P3.0 – P3.7
Sebagian (P3.0–P3.2: input only)
P3.3–P3.7 = fungsi khusus (RXD, TXD, INT0, T0, T1, WR, RD). P3.2 (INT0) bisa I/O tapi hati-hati
Catatan untuk Arduino Uno (ATmega328P): Pada Arduino, P3.0=RXD, P3.1=TXD, P3.2=INT0, P3.3=PWM, P3.4–P3.7 = SPI (hardware SPI), P3.5=PWM (OC1B), P3.6=PWM (OC1A), P3.7=PWM (OC2A). Jangan mengubah pin ini ke I/O biasa karena sudah terhubung ke fungsi spesifik!
15.9 Timer/Counter pada 8051
8051 memiliki dua timer 8-bit (Timer 0 dan Timer 1) yang dapat dikonfigurasi secara independen. Timer 1 secara default dikonfigurasi sebagai baud rate generator untuk komunikasi serial. Timer 0 bebas digunakan untuk delay, event counting, atau mode lainnya.
Aspek
Timer 0
Timer 1
Mode Operasi
Tersedia
Lebar Counter
16 bit (2 register: TH0 + TL0)
16 bit (2 register: TH1 + TL1)
Mode 0 — Interrupt on Terminal Count
✓
✓
Mode 1 — Programmable One-Shot
✓
— (tidak tersedia)
Mode 2 — Rate Generator
✓
✓
Mode 3 — Square Wave Generator
✓
— (tidak tersedia)
Mode 4 — Software Strobe
✓
— (tidak tersedia)
Mode 5 — Hardware Strobe
— (tidak tersedia)
✓
Penggunaan Utama
Delay, event counter
Baud rate untuk UART (Mode 2 auto-reload)
Perbedaan Timer 8051 vs Timer 8253
Aspek
Timer 8051
Timer 8253
Jumlah Timer
2 (Timer 0 & 1)
3 (Counter 0, 1, 2)
Lebar Counter
8 bit × 2 = 16 bit
16-bit × 3 = 48 bit (Counter 2 hanya 16 bit)
Mode Auto-reload
Mode 2 saja (Timer 1 default)
Mode 0 dan Mode 2 (semua counter)
Interaksi dengan CPU
Register SFR (dibaca/ditulis oleh CPU)
Via port I/O (IN/OUT dari CPU)
Konfigurasi
Melalui register TMOD dan TCON
Melalui Control Word Register (CWR)
Max Clock
f_cpu / 12 (divide-by-12 prescaler)
f_input langsung (tanpa prescaler)
Catatan: Timer 8253 beroperasi pada frekuensi clock input penuh, sementara Timer 8051 menggunakan prescaler untuk mengurangi frekuensi clock sebelum masuk ke counter — sehingga cocok untuk frekuensi rendah seperti 9600 Hz (baud rate standar 9600) meski clock CPU 12 MHz.
15.10 Pengenalan Arduino (ATmega328P)
Arduino Uno menggunakan chip ATmega328P dari Microchip (sebelumnya Atmel). Ini adalah mikrokontroler AVR 8-bit RISC yang menjadi platform pembelajaran mikrokontroler paling populer di dunia berkatang karena kemudahan dan ekosistem yang sangat matang.
Spesifikasi
Nilai (ATmega328P)
Arsitektur
8-bit AVR (RISC, Harvard dimodifikasi + LPM)
Clock
16 MHz (Arduino Uno)
Flash (Program)
32 KB (bisa di-erase dan diulang)
SRAM (Data)
2 KB
EEPROM
1 KB
GPIO
23 pin I/O digital (termasuk 6 analog input)
ADC
6 channel 10-bit
Kommunikasi
1 UART (RX/TX), 1 SPI, 1 I²C
PWM
3 channel
Pin
28 pin (DIP) / 32 pin (TQFP)
Tegangan
2.7V – 5.5V
Harga (Uno clone)
~Rp 70.000
Mengapa Arduino "lebih mudah" dari 8051 pemrograman langsung? Arduino menyederhanakan bahasa Wiring (berbasis C++) yang memudahkan pembacaan dan penulisan I/O menjadi sangat sederhana. digitalWrite(13, HIGH) menyalakan LED, digitalRead(A0) membaca tombol, Serial.begin(9600) memulai komunikasi serial. Semua detail register (PORTx, DDRx, TCCR, UCSRC, SREG) diabstraksi. Meski bisa diprogram langsung dalam C, Arduino tetap membuktuhkan Anda lebih dekat ke hardware dibandingkan Assembly 8051 murni.
15.11 Contoh: Program Assembly 8051 Sederhana
Berikut contoh program Assembly 8051 untuk mengedipkan LED yang terhubung ke Port 1 sebanyak 3 kali. Program ini menulis nilai #0FFh ke Port 1 (LED nyala semua), lalu #00h (LED mati semua) secara bergantian. Berbeda dengan 8086 yang memerlukan instruksi OUT untuk menulis ke port, pada 8051 port I/O dipetakan sebagai SFR sehingga bisa ditulis langsung dengan MOV.
ORG0000h; Mulai dari alamat resetmulai:; === Inisialisasi Stack Pointer ===MOVSP, #30h; SP = 30h (di atas area bit-addressable); === Ulangi kedipan 3 kali ===MOVR2, #03h; R2 = counter kedipanloop_kedip:; --- Hidupkan LED ---MOVP1, #0FFh; Port 1 = FFh (semua bit = 1, LED nyala)ACALLdelay; panggil rutin delay; --- Matikan LED ---MOVP1, #00h; Port 1 = 00h (semua bit = 0, LED mati)ACALLdelay; panggil rutin delay; --- Decrement counter, ulangi jika belum nol ---DJNZR2, loop_kedip; R2--; jika R2 ≠ 0, lompat ke loop_kedipselesai:SJMPselesai; loop tak terhingga (program berhenti di sini); ============================================; Rutin delay sederhana (nested loop); ============================================delay:MOVR0, #0FFh; loop luar: R0 = 255delay_luar:MOVR1, #0FFh; loop dalam: R1 = 255delay_dalam:DJNZR1, delay_dalam; R1--; ulangi jika R1 ≠ 0DJNZR0, delay_luar; R0--; ulangi jika R0 ≠ 0RET; kembali ke pemanggil (ACALL)END; akhir program
Kode 15.1: Program 8051 sederhana — menghidup-matikan LED berkedip 3 kali menggunakan DJNZ (setara LOOP pada 8086) dan rutin delay bersarang.
15.12 Soal Latihan
Kerjakan soal-soal berikut untuk menguji pemahaman Anda. Klik "Lihat jawaban" setelah mencoba menjawab sendiri.
Soal 1. Jelaskan perbedaan mendasar antara mikroprosesor dan mikrokontroler. Mengapa mikrokontroler lebih cocok untuk aplikasi embedded?
▶ Lihat jawaban
Mikroprosesor hanyalah CPU saja dalam satu chip — membutuhkan RAM, ROM, dan chip I/O eksternal untuk berfungsi. CPU, RAM, ROM, dan I/O berada di chip yang terpisah. Cocok untuk sistem komputasi umum yang membutuhkan fleksibilitas tinggi dan daya komputasi besar.
Mikrokontroler mengintegrasikan CPU, RAM, ROM (Flash), I/O port, timer, dan UART dalam satu chip tunggal. Cocok untuk tugas spesifik yang sifatnya tetap (embedded), membutuhkan biaya rendah, ukuran kecil, dan konsumsi daya rendah. Kekurangannya: daya komputasi terbatas, RAM/ROM kecil, tidak mudah di-upgrade.
Soal 2. Apa perbedaan antara arsitektur Harvard dan Von Neumann yang digunakan pada mikrokontroler modern seperti ATmega328P (Arduino Uno)?
▶ Lihat jawaban
ATmega328P menggunakan arsitektur Harvard yang dimodifikasi. Memori program (Flash) dan memori data (SRAM) berada di ruang alamat terpisah dengan instruksi yang di-fetch oleh CPU. Ini memungkinkan CPU mengambil instruksi dan membaca/menulis data secara simultan, menghilangkan bottleneck Von Neumann. Namun ATmega juga menyediakan mekanisme LPM (Load Program Memory) untuk mengakses memori data seolah-olah dalam ruang kode — menawarkan fleksibilitas keduanya.
Soal 3. Mengapa Arduino menjadi sangat populer sebagai platform pembelajaran mikrokontroler, padahal ada banyak mikrokontroler yang lebih canggih seperti STM32 atau ESP32?
▶ Lihat jawaban
Beberapa alasan utama: (1) Kemudahan pemulaan: Arduino menggunakan bahasa pemrograman Wiring/Processing yang sangat mudah dibandingkan dengan C/Assembly murni. (2) Ekosistem matang: Arduino IDE, library, dan ribuan contoh proyek mempercepat proses belajar. (3) Hardware murah dan tersedia luas: board Arduino Uno hanya ~Rp70.000 dan bisa dibeli di mana saja. (4) Konektivitas sederhana: plug-and-play via USB, tanpa perlu programmer hardware. Meskipun STM32/ESP32 lebih canggih (32-bit, WiFi, BLE), kompleksitas awalnya jauh lebih tinggi dan kurang cocok untuk mahasiswa yang baru mengenal konsep mikrokontroler.
Soal 4. Jelaskan fungsi Port 1 (Port 1) dan Port 2 (Port 2) pada 8051. Apa perbedaan keduanya?
▶ Lihat jawaban
Port 1 (Port 1): Merupakan 8 pin I/O bidireksional yang sepenuhnya bit-addrresable. Setiap pin dapat dikonfigurasi sebagai input ATAU output secara individual menggunakan register khusus. Sangat fleksibel untuk berbagai konfigurasi rangkaian.
Port 2 (Port 2): Terdiri dari dua bagian: Port 2 (P2.0–P2.7, 8 pin, bit-addressable I/O) dan Port 2 (P3.0–P3.7, 8 pin, multifungsi). Bagian Port 2 (P2) sama seperti Port 1. Bagian Port 2 (P3) berfungsi ganda: sebagai I/O biasa ATAU sebagai sinyal kontrol eksternal (RXD, TXD, INT0, INT1, T0, T1, WR, RD). Pada Arduino Uno, P3.0–P3.2 digunakan sebagai RXD, TXD, dan P3.2 sebagai INT0.
Soal 5. Apa fungsi Timer 0 dan Timer 1 pada 8051? Berapa diperlukan dua timer?
▶ Lihat jawaban
Timer 0: Timer 16-bit yang digunakan terutama sebagai timer generik untuk delay, menghitung event, atau menghasilkan baud rate untuk komunikasi serial. Dapat dioperasikan dalam 4 mode (Mode 0–3).
Timer 1: Timer 16-bit yang secara default dikonfigurasi sebagai timer baud rate generator untuk UART (komunikasi serial). Menghasilkan clock serial secara otomatis pada Mode 2 (auto-reload). Meskipun bisa dioperasikan seperti Timer 0, mengubahnya biasanya mengganggu komunikasi serial. Kehadiran dua timer memungkinkan delay (Timer 0) berjalan bersamaan dengan komunikasi serial (Timer 1) secara simultan.
Soal 6. Bandingkan 8051 dengan ATmega328P (Arduino Uno) dalam hal arsitektur internal.
▶ Lihat jawaban
8051 (Intel 8051): CPU 8-bit, arsitektur CISC, 4 KB ROM, 128 byte RAM, 2 timer 16-bit, 4 port I/O 8-bit, 1 UART. Dikembangkan tahun 1980. Arsitektur Harvard asli.
ATmega328P (Arduino Uno): CPU 8-bit AVR RISC, 32 KB Flash (bisa di-rewrite), 2 KB SRAM, 2 timer 8-bit, 3 port I/O, 1 UART, 6 channel ADC 10-bit, SPI, I2C, PWM. Dikembangkan tahun 2005 (Atmel, sekarang Microchip). Arsitektur Harvard dimodifikasi dengan LPM untuk fleksibilitas.
Kesamaan: keduanya 8-bit, memiliki timer dan UART. Perbedaan utama: ATmega jauh lebih modern dengan Flash yang bisa diulang, memori lebih besar, ADC built-in, lebih banyak peripheral, dan arsitektur RISC yang lebih efisien per instruksi.
15.13 Kuis Bab 15
Uji pemahaman Anda. Pilih satu jawaban yang paling tepat. Setelah memilih, jawaban benar akan ditandai dan penjelasan muncul.
1. Apa keunggulan utama mikrokontroler dibandingkan mikroprosesor?
Mikrokontroler menggabungkan CPU, memori, dan I/O dalam satu chip sehingga harganya lebih murah, ukurannya kecil, dan tidak memerlukan rangkaian tambahan. Meskipun tidak lebih cepat, kelebihan ini membuatnya ideal untuk embedded system.
2. Arduino Uno menggunakan mikrokontroler apa?
Arduino Uno menggunakan chip ATmega328P dari Microchip (sebelumnya Atmel). Ini adalah mikrokontroler 8-bit AVR RISC dengan 32 KB Flash, 2 KB SRAM, dan berbagai peripheral. 8086 dan 6800 adalah mikroprosesor, bukan mikrokontroler.
3.
Embedded system (sistem tertanam) adalah sistem komputasi yang dirancang untuk menjalankan satu atau beberapa fungsi spesifik di dalam perangkat yang lebih besar (mikrowave, mobil, sensor, IoT device). Mikrokontroler adalah otak dari sebagian besar embedded system modern.
4.
5.
Pin P3.0–P3.7 pada 8255 memiliki fungsi ganda. Saat dikonfigurasi sebagai I/O biasa, pin tertentu (P3.0=RXD, P3.1=TXD pada Arduino) TIDAK bisa diubah ke I/O karena sudah terhubung ke fungsi spesifik. Pin P3.2 (INT0) juga memiliki fungsi kontrol khusus. Namun pin P2.0–P2.7 (Port 2 proper) sepenuhnya bisa dikonfigurasi sebagai I/O.
6.
ATmega328P menyimpan program di Flash memory internal berukuran 32 KB (dapat di-erase dan ditulis ulang). Ini adalah jenis EEPROM Flash yang non-volatile. SRAM internal (2 KB) digunakan sebagai data sementara selama program berjalan. RAM/ROM eksternal TIDAK diperlukan karena sudah terintegrasi di dalam chip.