Minggu 15 Pengayaan

Bab 15: Pengantar Mikrokontroler

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.

15.1 Mengapa Perlu Belajar Mikrokontroler?

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.

AspekMikroprosesor (8086)Mikrokontroler (8051 / AVR)
Komponen di chipHanya CPU (ALU, CU, Register)CPU + RAM + ROM/Flash + Timer + UART + GPIO + (opsional: ADC, DAC, I2C, SPI, PWM)
Memori EksternalWajib (RAM, ROM)Tidak wajib (sudah terintegrasi)
Chip I/OTidak ada (perlu chip terpisah: 8255, 8253, dll.)Sudah terintegrasi (pin GPIO)
Ukuran FisikBesar (40+ pin, perlu heatsink)Kecil (8–64 pin, DIP/SOP/QFN)
Harga per unitMahal (jutaan Rupiah)Murah (ribuan hingga puluhan ribu Rupiah)
Konsumsi DayaTinggi (65–125 Watt)Sangat rendah (mW, bisa battery-powered)
Aplikasi UtamaPC, laptop, server, workstationEmbedded: IoT, robotika, otomotif, sensor, IoT
OS yang dibutuhkanWindows, Linux (OS kompleks)Bare-metal / RTOS kecil (atau tanpa OS)
PemrogramanC/C++, Java, Python, dsb.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.

SpesifikasiNilai (8051)Nilai (ATmega328P)
Bit CPU8 bit8 bit (AVR)
Clock Maks (versi asli)12 MHz16 MHz (Arduino Uno)
ROM (program)4 KB internal32 KB Flash
RAM (data)128 byte internal2 KB SRAM
Timer2 × 16-bit2 × 8-bit
Port I/O4 port × 8 bit (32 pin)3 port × 8 bit (24 pin)
UART1 × serial1 × serial
Tegangan+5V2.7–5.5V
Pin40 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)
    MOV  SBUF, #0A9h           ; SBUF = SFR alamat 99h
    ; Tunggu transmit selesai (bit TI di SCON menjadi 1, lalu 0)
wait_tx:
    JNB  TI           ; jika TI=0, ulangi
    SJMP  wait_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:
    JNB  RI           ; jika RI=0, ulangi
    SJMP  wait_rx

    ; Baca dari SBUF
    MOV  A, SBUF           ; baca data ke register A

    ; Kirim balik via serial
    ; Pastikan TXE=1 (Transmit Enable) di SCON
    MOV  SBUF, A           
wait_tx2:
    JNB  TI           
    SJMP  wait_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.

PortPinBit-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.

AspekTimer 0Timer 1
Mode OperasiTersedia
Lebar Counter16 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 UtamaDelay, event counterBaud rate untuk UART (Mode 2 auto-reload)

Perbedaan Timer 8051 vs Timer 8253

AspekTimer 8051Timer 8253
Jumlah Timer2 (Timer 0 & 1)3 (Counter 0, 1, 2)
Lebar Counter8 bit × 2 = 16 bit16-bit × 3 = 48 bit (Counter 2 hanya 16 bit)
Mode Auto-reloadMode 2 saja (Timer 1 default)Mode 0 dan Mode 2 (semua counter)
Interaksi dengan CPURegister SFR (dibaca/ditulis oleh CPU)Via port I/O (IN/OUT dari CPU)
KonfigurasiMelalui register TMOD dan TCONMelalui Control Word Register (CWR)
Max Clockf_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.

SpesifikasiNilai (ATmega328P)
Arsitektur8-bit AVR (RISC, Harvard dimodifikasi + LPM)
Clock16 MHz (Arduino Uno)
Flash (Program)32 KB (bisa di-erase dan diulang)
SRAM (Data)2 KB
EEPROM1 KB
GPIO23 pin I/O digital (termasuk 6 analog input)
ADC6 channel 10-bit
Kommunikasi1 UART (RX/TX), 1 SPI, 1 I²C
PWM3 channel
Pin28 pin (DIP) / 32 pin (TQFP)
Tegangan2.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.

ORG  0000h            ; Mulai dari alamat reset

mulai:
    ; === Inisialisasi Stack Pointer ===
    MOV  SP, #30h        ; SP = 30h (di atas area bit-addressable)

    ; === Ulangi kedipan 3 kali ===
    MOV  R2, #03h        ; R2 = counter kedipan

loop_kedip:
    ; --- Hidupkan LED ---
    MOV  P1, #0FFh       ; Port 1 = FFh (semua bit = 1, LED nyala)
    ACALL delay           ; panggil rutin delay

    ; --- Matikan LED ---
    MOV  P1, #00h        ; Port 1 = 00h (semua bit = 0, LED mati)
    ACALL delay           ; panggil rutin delay

    ; --- Decrement counter, ulangi jika belum nol ---
    DJNZ R2, loop_kedip  ; R2--; jika R2 ≠ 0, lompat ke loop_kedip

selesai:
    SJMP selesai           ; loop tak terhingga (program berhenti di sini)

; ============================================
; Rutin delay sederhana (nested loop)
; ============================================
delay:
    MOV  R0, #0FFh       ; loop luar: R0 = 255
delay_luar:
    MOV  R1, #0FFh       ; loop dalam: R1 = 255
delay_dalam:
    DJNZ R1, delay_dalam ; R1--; ulangi jika R1 ≠ 0
    DJNZ R0, delay_luar  ; R0--; ulangi jika R0 ≠ 0
    RET                    ; 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?

2. Arduino Uno menggunakan mikrokontroler apa?

3.

4.

5.

6.