MICROCONTROLLER
SEMESTER GANJIL TAHUN AKADEMIK 2014-2015
FAKULTAS TEKNIK ELEKTRONIKA DAN KOMPUTER UKSW
Topik 1 Pengenalan Microcontroller Keluarga MCS-51 (Looping dan aritmatika)
1. TUJUAN
a. Mahasiswa memahami arsitektur microcontroller keluarga MCS-51.
b. Mahasiswa dapat membuat skema dan board untuk microcontroller MCS-51.
c. Mahasiswa memahami pemrograman dasar microcontroller keluarga MCS-51.
2. DASAR TEORI
a. Pendahuluan
Microcontroller merupakan sebuah microprocessor yang telah diintegrasikan dengan
peripheral lain (ROM, RAM, I/O, dll) menjadi sebuah IC.Salah satu microcontroller yang
masih sangat popular saat ini adalah keluarga MCS-51. Pada praktikum kali ini, kita akan
menggunakan tipe AT89S52 yang merupakan microcontroller keluarga MCS-51 buatan
Atmel. Pada praktikum ini kita tidak akan menggunakan board minimum sistem AT9S52,
tapi akan kita simulasikan dengan program ISIS Proteus. Sedikit penjelasan tentang ISISProteus berada pada lampiran.
Gambar 1. Konfigurasi
Pin AT89S52
AT89S52 memiliki
4 port I/O yang
masing-masing memiliki
8 pin, yaitu Port 0, Port
1, Port 2, dan Port 3.
Selain sebagai I/O,
masing-masing port juga
memiliki fungsi yang
berbeda-beda. Port 0
(P0.0
P0.7)
merupakan
8-bitopendrain bidirectional I/O.
Port ini dapat digunakan
untuk
mengakses
address/data busmemori
program atau data
eksternal.
Untuk
keperluan baca/tulis ke
memori
eksternal,
AT89S52 memiliki pin
ALE (Address Latch
Enable, pin 30) dan
PSEN (Program Store
Enable,
pin
29).
PSENakan mengeluarkan
sinyal
0
selama
pengambilan data dari
memori eksternal. Pin
ini biasanya dihubungkan dengan pin OE (Output Enable) dari memori eksternal. Sedangkan
ALE akan mengeluarkan sinyal 1 selama Port 0 mengeluarkan address dan akan
mengeluarkan sinyal 0 selama Port 0mengeluarkan data. ALE digunakan untuk
memberitahu piranti memori eksternal tentang jenis keluaran Port 0 (address atau data).
Selain itu, juga ada pin EA (External Address, pin 31) yang digunakan untuk mengatur
apakah program akan diakses dari memori internal / eksternal. Jika program diambil dari
memori internal maka EA di-set 1 dan 0 jika program dari memori eksternal.Perlu
diperhatikan bahwa Port 0 tidak memiliki pull-up internal.
1
Port 1 (P1.0 P1.7) merupakan 8-bit bidirectional I/O yang sudah dilengkapi dengan
pull-up internal.Port 1 dapat dipakai untuk berkomunikasi dengan piranti eksternal. Selain
itu, Port 1 memiliki beberapa fungsi khusus untuk pin tertentu, yaitu:
- P1.0 : T2 (external count input to Timer/Counter 2), clock-out
- P1.1 : T2EX (Timer/Counter 2 capture/reload trigger and direction control)
- P1.5 : MOSI (untuk In-System Programming)
- P1.6 : MISO (untuk In-System Programming)
- P1.7 : SCK (untuk In-System Programming)
Port 2 (P2.0 P2.7)juga merupakan 8-bit bidirectional I/O yang sudah dilengkapi
dengan pull-up internal. Port ini biasanya juga digunakan untuk address bus jika digunakan
penambahan memori eksternal.
Port 3 (P3.0 P3.7) juga hampir sama dengan Port 1 dan 2. Bedanya, Port ini
memiliki beberapa fungsi khusus, yaitu:
- P3.0 : RXD (serial input port)
- P3.1 : TXD (serial output port)
- P3.2 : INT0 (external interrupt 0)
- P3.3 : INT1 (external interrupt 1)
- P3.4 : T0 (timer 0 external input)
- P3.5 : T1 (timer 1 external input)
- P3.6 : WR (external data memory write strobe)
- P3.7 : RD (external data memory read strobe)
Selain port-port dan beberapa pin yang telah dibahas, AT89S52 juga memiliki
beberapa pin lain, yaitu:
- VCC, GND
- XTAL1 , XTAL2
Kedua pin ini digunakan untuk mengatur siklus kerja microcontroller. Kedua pin
ini dihubungkan dengan kristal osilator dengan frekuensi (biasanya) 12 MHz.
Karena MCS-51 mempunyai siklus kerja 1/12 frekuensi osilator maka satu
siklus kerja AT89S52 + 1s.
-
RST
Pin ini dipakai untuk me-resetmicrocontroller. MCS-51 menggunakan reset high
dengan waktu reset setidaknya 2 siklus kerja.
dan ruang alamat memori data eksternal dialamati dari alamat 0000h sampai FFFFh.
Sedangkan memori data internal dialamati dari alamat 00h sampai FFh. Rinciannya adalah
alamat 00h sampai 7Fh dipakai untuk mengalamati RAM internal dan alamat 80h sampai
FFh dipakai untuk mengalamati SFR.
Dalam penulisan program, memori-memori ini bisa langsung disebut sebagai R0, R1,
R2, R3, R4, R5, R6 dan R7, tidak lagi dengan nomor memori. Dengan cara ini instruksi
yang terbentuk bisa lebih sederhana dan bekerja lebih cepat.
Pengertian ini bisa diperjelas dengan contoh 2 instruksi berikut :
MOV A,04h
MOV A,R4
Instruksi pertama mempunyai makna isi memori-data pada alamat 04h di-copy- kan ke
AkumulatorA, sedangkan instruksi kedua artinya isi R4di-copy-kan ke Akumulator A.
Karena R4menempati memori-data nomor 4, jadi kedua instruksi itu berakibat sama bagi
Akumulator A.Tapi saat diterjemahkan ke kode mesin, intruksi pertama diubah menjadi E5
04(heksadesimal) dan instruksi kedua menjadi E6(heksadesimal). Jadi, instruksi kedua lebih
sederhana dari instruksi pertama.
Selain itu, khusus untuk Register 0 dan Register 1 (R0 dan R1) masih mempunyai
kemampuan lain. Kedua register ini bisa dipakai sebagai register penampung alamat yang
dipakai dalam pengakesesan memori secara tidak langsung(indirect memori
addressing).Empat kelompok Register Serba Gunaitu tidak bisa dipakai
secarabersamaan.Setelah microcontroller di-reset maka yang aktif adalah Kelompok
Register 0(Register Bank 0).
Kalau yang diaktifkan adalah Kelompok Register 1, maka yang dianggap sebagai
R0bukan lagi memori-data nomor 0 melainkan memori-data nomor 8.Demikian pula kalau
yang diaktifkan Kelompok Register 3maka memori-data nomor 18h yang menjadi R0.
Kelompok Register yang aktif dipilih dengan cara mengatur bit RS0dan RS1yang ada di
dalam Register PSW(Program Status Word).
d. Bit-addressable Memori
Memori data internal pada alamat 20hsampai 2Fhbisa dipakai menampung informasi
dalam level bit. Setiap byte memori di daerah ini bisa dipakai menampung 8 bit informasi
yang masing-masing dinomori tersendiri.Dengan demikian dari 16 byte memori yang ada
bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) yang dialamati dengan alamat 00hsampai
7Fh. Informasi dalam level bit tersebut masing-masing bisa di-1-kan atau di-0-kan
dengan instruksi. Pengertian di atas bisa dipikirkan seolah-olah MCS51 mempunyai jenis
memori yang lain. Tetapi sesungguhnya kedua jenis memori itu tetap sama, hanya saja cara
pengaksesannya saja yang berlainan.
Instruksi SETB 00hmengakibatkan memori bitalamat 0h menjadi 1 atau sama
dengan membuat bit nomor 0 dari memori datapada alamt 20hmenjadi 1, sedangkan bit-bit
lainnya dalam alamat memori 20htidak berubah nilai. Sedangkan instruksi CLR
7Fhmengakibatkan memori bitalamat 7Fhmenjadi 0, atau sama dengan membuat bit
nomor 7 dari memori datapada alamat 2Fhmenjadi 0, sedangkan bit-bit lainnya dalam
alamat memori 2Fhtidak berubah nilai.
Pengertian ini dipertegas dengn intsruksi-instruksi berikut:
MOV 21h,#0Fh
Membandingkan kedua instruksi di atas bisa dimengerti dalam segi penulisan program
SFRdiperlakukan persis sama dengan memori data. Meskipun demikian, dalam mengakses
memori databisa dipakai dua cara, yakni pengaksesan alamat memori secara langsung(direct
memory addressing) dan pengaksesan alamat memori secara tidak langsung(indirect
memoryaddressing) lewat bantuan R0dan R1. Tetapi untuk SFRhanya bisa dipakai
penyebutan nomor memori secara langsung(direct memory addressing) saja.
f. Register Dasar MCS-51
Akumulator
Sesuai dengan namanya, Akumulatoradalah sebuah register yang berfungsi
untuk menampung (accumulate) hasil-hasil pengolahan data dari banyak instruksi
MCS51. Akumulator bisa menampung data 8 bit (1 byte) dan merupakan register
yang paling banyak kegunaannya, lebih dari setengah instruksi-instruksi MCS51
melibatkan Akumulator. Instruksi-instruksi berikut memperjelas pengertian di atas
:
MOV A,#20h
ADD A,#30h
Register B
Merupakan register dengan kapasitas 8 bit, merupakan register pembantu
Akumulatorsaat menjalankan instruksi perkalian dan pembagian.
EQU 000H
BIT 090H
DATA 040H
DATA 041H
DATA 042H
DATA 043H
ORG 200H
TABEL ANIMASI :
DB 081H,042H,024H,018H,024H,042H
ORG 400H
START :
MOV DPTR,#TABEL ANIMASI
MOV COUNTD,#06H
ULANG ANIMASI:
MOV A,#0H
MOVC A,@A+DPTR
MOV P1,A
INC DPL
DJNZ COUNTD,ULANG_ANIMASI
AJMP START
END
$MOD52 adalah berisi definisi alamat register beserta pin-pin dari AT89S52,register
sendiri terdapat di memori internal mikrokontroler.Sebenarnya kita juga bisa mendefinisikan
pin dan register kita sendiri. Yang perlu diingat alamat 0-32byte pertama digunakan untuk
stack memori, jadi jangan diutak-atik. Sedangkan alamat 80h keatas digunakan untuk IO dan
setting lainnya.Jadi kita meempunyai alamat dari 20-7F total 95 byte kosong untuk dapat
difungsikan sebagai variabrl bebas. Tanpa #MOD52,kita masih bisa membuat
program,hanya saja kita harus tahu alamat fisik dari register yang akan kita manfaatkan,
misal:
P0
P1
P2
Nama port 0 bisa kita ganti sesuai keinginan kita. Misal kita memakai port 0 untuk
lcd,maka kita bisa definisikan dengan kode berikut:
LCD
MOV COUNTD,#06h.
Tanda # pada 06h berarti 06h adalah immediate data,yang berarti instruksi ini akan
mengisi variable COUNTD dengan nilai 06h. Sedangkan MOV COUNTD,06hberarti variable
MOVC berarti mengambil data dari ROM(code),dari alamat sesuai dengan nilai dari
A+DPTR.
Bagaimana untuk menuilis secara dinamis di RAM?
Dengan MOV @R1,A
Misal kita ingin menuilis di RAM alamat 60h,maka bisa memakai kode berikut
MOV R1,#80h
MOV @R1,A
Demikian yang dapat saya sampaikan tentang MCS-51. Untuk hal-hal lain akan dibahas
pada topic berikutnya. Selain itu, praktikan juga harap mempelajari handout, buku acuan
maupun datasheet AT89S52 sebagai persiapan mengikuti praktikum.
Selamat belajar dan mencoba.Tuhan memberkati.
Orang LUAR BIASA itu SEDERHANA dalam UCAPAN,tetapi HEBAT dalam TINDAKAN.
- unknown -
3. Pada Keywoard kita masukkannama komponen atau devices yang kita inginkan. Yang kita
inginkan adalah mikrokontroler AT89S52, namun karena tidak ada pada library kita
masukkan saja AT89C52. Secara umum kedua mikrokontroler tersebut sama saja, hanya
berbeda pada metode pemrograman mikrokontoler tersebut. AT89S52 mendukung
pemrograman dengan metode ISP (In System Programming), sementara AT89C52 tidak.
Namun karena kita menggunakan ISIS untuk mensimulasikannya, kita tidak perlu
memikirkan metode pemrograman mikrokontrolernya.
4. Pada workspace kita klik pada area kosong maka chip mikorokontroler AT89C52akan
muncul.
Mikrokontroler AT89C52
5. Untuk menambahkan komponen lain caranya sama saja seperti langkah 3 dan 4. Komponen
yang kita gunakan akan muncul pada kotak DEVICES. Berikut adalah daftar komponen
untuk membuat rangkaian minimum system at89s52/at89c52
Jendela Devices
6. Untuk memunculkan terminal VCC dan GND, pada toolbar dibagian kiri kita klik tombol
Terminal Mod, kemudian pilih POWER /GROUND kemudian klik lagi pada workspace.
Untuk menyambung kaki-kaki antar komponen tinggal klik kaki komponen yang diinginkan
kemudian tarik ke kaki komponen yang lain.
7. Berikut adalah rangkaian minimum system dari AT89C52 yang sudah selesai dirancang.
Semua mikrokontroler 51 atmel memilki osilator on-chip yang dapat digunakan sebagai
sumber clock ke CPU. Untuk menggunakannyadi antara kaki XTAL1 dan XTAL2
dihubungkan resonator kristal atau keramik dengan kapasitor yang terhubung ke ground.
Biasa digunakan kristal dengan frekuensi 12 MHz atau 11.0592 MHz. Satu siklus mesin
paling lama dikerjakan dalam 12 periode osilator. Jika digunakan kristal 12 MHz, maka
untuk satu siklus mesin dibutuhkan waktu 1s.
Pada PORT 0 dipasang resistor pull up eksternal karena PORT 0 tidak memilki pull up
inernal. Pada pin reset dipasang rangkaian untuk mereset mikrokontroler jika switch ditekan.
Min-System AT89S52/AT89C52
8. Berikut adalah rangkaian minimum system dari AT89C52 yang sudah selesai dirancang
beserta modul LED indicator pada semua PORT nya:
10. Untuk mesimulasikan, kita klik tombol play yang berada di kiri bawah work space. Simuasi
dapat dihentikan dengan menekan tombol stop, atau dihentikan sementara dengan tombol
pause. Simulasi juga dapat djalankan per step.
Tombol Play, Step, Pause, dan Stop
Lampiran 1
CONTOH PROGRAM ASSEMBLY
Contoh1 :
ORG 000H
JMP PROGRAM
ORG 100H
PROGRAM:MOV A,#0H
ULANG: MOV P1,A
CALL DELAY
INC A
JMP ULANG
DELAY: MOV R0,#00H
MOV R1,#00H
ULANG1: INC R1
ULANG2: INC R0
CJNE R0,#0FFH,ULANG2
CJNE R1,#040H,ULANG1
RET
SELESAI: NOP
END
Program di atas kalau dijalankan akan membentuk sebuah penghitung (counter) 8 bit pada port1.
Contoh 2 :
ORG 000H
JMP MULAI
ORG 100H
MULAI: MOV P1,#0FFH
ULANG: JNB P0.0,ULANG
MOV P1,#00H
END
Program di atas akan menunggu masukan pada pin P0.0 diberi masukan high, lalu dia akan
mengeluarkan nilai 00h ke seluruh pin port 1 (P1.0-P1.7).
Contoh 3 :
ORG 000H
JMP PROGRAM
ORG 100H
PROGRAM:MOV P1,#0FFh
ULANG1: MOV C,P1.0
MOV P1.1,C
JMP ULANG1
END
Program di atas akan memindahkan keadaan logika (misal diberi masukan 1) pada pin P1.0 ke pin
P1.1 melalui register C.
Contoh 4:
ORG 000H
JMP PROGRAM
ORG 100H
PROGRAM:MOV A,#01H
ULANG: MOV P1,A
RL A
CALL DELAY
JMP ULANG
DELAY: MOV R0,#00H
MOV R1,#00H
ULANG1: INC R1
ULANG2: INC R0
CJNE R0,#0FFH,ULANG2
CJNE R1,#040H,ULANG1
RET
SELESAI: NOP
END
Program di atas jika dijalankan akan membentuk animasi LED sederhana pada port1 jika keluaran
port 1 (pin P1.0 sampai P1.7) dihubungkan dengan LED. Animasi LED yang dibentuk adalah jenis
running LED.