Pokok Bahasan :
1.1
Sejarah Mikroprosesor dan Komputer
1.1.1
Komputer Generasi Pertama
Halo pembaca yang
budiman, bersyukurlah saat ini Anda diberi kesempatan untuk dapat membaca buku saya, karena pada Bab 1 ini akan
saya paparkan betapa pentingnya teknologi mikrokontroler pada berbagai aspek
kehidupan. Meskipun perkembangan mikrokontroler didahului dengan munculnya
mikroprosesor yang berdampak pada pesatnya pengembangan teknologi komputer,
mikrokontroler sangat dibutuhkan untuk menjadi pengontrol utama sistem
elektronika digital berukuran kecil dan menengah. Dengan memahami berbagai kelebihan dan
penerapan mikrokontroler, maka sesungguhnya banyak hal berguna yang dapat kita
lakukan untuk bangsa kita.
Jauh sebelum ditemukannya
transistor pada tahun 1947, sebenarnya komputer berukuran besar sudah digunakan
untuk melakukan komputasi data. Bahasa pemrograman juga sudah ada pada
sekitar tahun 1945 yang bernama
Plankalkul yang dibuat oleh ilmuwan Jerman bernama Konrad Zuse ( baca : Tsoo
zuh), namun belum sempat diterapkan karena kondisi pada saat itu sedang perang.
Gambar dibawah ini
merupakan foto dari Departemen Amerika yang menggunakan komputer digital
pertama bernama ENIAC (Electronic
Numerical Integrator and Computer). Digunakan untuk menghitung jarak tembakan
pada perang dunia ke 2. Komputer
tersebut menggunakan tabung vakum 19.000 buah setara dengan kecepatan
kalkulator standar kita.
Gambar 1.1 Komputer digital
pertama di US Army
Dengan ditemukannya transistor maka ukuran komputer
yang berukuran 1 ruangan besar dapat diperkecil. Ukuran komputer menjadi sangat kecil dikarenakan
penggunakan teknologi nano yang mampu menghasilkan chip yang terdiri dari
ribuan bahkan jutaan transistor.
Gambar 1.2 transistor generasi pertama
Gambar diatas menampilkan hasil penelitian John Barden
dan Walter Brattain di labolatorium Bell yang sedang melakukan penelitian crystal surfaces. Penelitian pada tahun 1947 menghasilkan kemajuan
dengan menggantikan material yang lebih baik, dihasilkan transistor yang berfungsi sebagai penguat
arus atau saklar elektronik. Transistor
inilah yang menjadi cikal bakal dihasilkannya chip yang yang mampu membuat
komputer kita menjadi seukuran jam tangan.
1.1.2
Prosesor
Pada sebuah komputer, terdapat mikroprosesor yang
digunakan untuk memproses data.
Mikroprosesor ialah suatu chip yang berfungsi sebagai pemroses data dari
input yang diterima pada suatu system digital.
Mikroprosesor paling mudah ditemukan pada Komputer (Central Processing Unit).
Mikroprosesor yang umum pada komputer biasanya bermerek INTEL, AMD, atau CYRIX. Saat ini kecepatan prosesor INTEL Pentium 4
sudah sampai 3 GHz. Semakin tinggi frekwensi prosesor dan lebar data (saat ini
mencapai 64 Bit) maka semakin cepat pemrosesan yang dilakukan prosesor.
Mikroprosesor merupakan bagian yang sangat penting di
dalam pengembangan ilmu pengetahuan dan teknologi. Pada tahun 1971, Intel
memperkenalkan mikroprosesor pertama di dunia dengan seri 4004, yang digunakan
untuk kalkulator. 4004 hanya mempunyai 2300 transistor dan merupakan chip 4
bit. Berselang 1 tahun kemudian, muncul mikroprosesor 8008, yang merupakan
mikroprosesor 8 bit pertama dengan 3300 transistor. 2 tahun kemudian
(tahun 1974) Intel memperkenalkan mikroprosesor general purpose, 8080 dengan 6000 transistor yang digunakan sebagai
mikroprosesor untuk komputer di rumah-rumah.
1.1.3
Processor 8086
Pada tahun 1978, Intel memperkenalkan mikroprosesor 16
bit bernama 8086, yang mana merupakan pengembangan dari mikroprosesor
sebelumnya yaitu 8080/8085.
8086 ialah mikroprosesor dengan lebar bus data sebesar
16 bit secara internal dan eksternal. Maksudnya ialah seluruh register
lebarnya 16 bit dan ada bus data selebar 16 bit untuk
mentransfer data ke dalam dan keluar CPU.
Karena masih ada perangkat keras yang hanya berukuran 8 bit serta harga
PCB dengan lebar 16 bit data yang sangat mahal, mikroprosesor ini
mengalami masalah dengan lebar datanya. Oleh karena itu Intel meluncurkan mikroprosesor 8088 yang mampu menangani data
16 bit juga 8 bit data. Oleh karena itu
pada tahun 1981 Intel mengubah komputer IBM menggunakan mikroprosesor 8088 yang
ternyata sangat sukses di pasaran karena kompatibilitasnya.
1.2 Peranan
Mikrokontroler pada Teknologi Elektronika
1.2.1 Munculnya Mikrokontroler
Dengan berkembangnya teknologi mikroprosesor 8 bit dan 16 bit, seiring dengan itu muncul pula kebutuhan agar perangkat elektronika dapat dikemas sekecil mungkin. Seperti Atari, Nintendo, Sega, dan peralatan hiburan serta peralatan rumah tangga seperti AC dan Audio/Video.
Untuk mendukung hal tersebut, tidak dapat dilakukan oleh mikroprosesor
standar. Hal ini dikarenakan
mikroprosesor membutuhkan komponen eksternal tambahan seperti Memori, pengolah
analog ke digital dan perangkat komunikasi serial misalnya. Oleh karena itu dikembangkanlah chip yang di
dalam kemasan tersebut sudah terdapat mikroprosesor, I/O Pendukung, Memori,
bahkan ADC yang dikenal dengan istilah mikrokontroler.
Mikrokontroler dapat
disebut sebagai “one chip solution” karena terdiri dari :
CPU (central processing unit)
CPU ialah bagian yang paling penting dari suatu mikroprosesor, ia melakukan pemrosesan data.
RAM (Random Access Memory)
RAM digunakan Untuk menimpan data sementara
EPROM/PROM/ROM (Erasable Programmable Read Only Memory)
ROM digunakan untuk menyimpan program yang bersifat permanent
I/O (input/output) - serial and parallel
Unit ini berfungsi agar mikrokontroler dapat berkomunikasi dalam format serial atau paralel, sehingga dapat berkomunikasi dengan mudah dengan PC dan devais standar digital lainnya.
Timers
Timer berguna untuk mengatur pwaktuan pada system berbasis mikrokontroler, misal untuk delay atau pencacah.
interrupt controller
Berfungsi
menangani suatu request pada saat mikrokontroler sedang running.
Memang benar,
bahwa mikrokontroler digunakan untuk orientasi pengontrolan, seperti pengontrol
temperature, penampil display LCD, pemroses sinyal digital, pemroses dan
pengontrol mesin-mesin industri dan sebagainya.
Dengan mikrokontroler, anda dapat membuat robot hanya sebesar genggaman
tangan anak / adik kita
1.2.2 Peranan Mikrokontroler saat ini
Mikrokontroler saat ini
sudah dikenal dan digunakan secara luas pada dunia industri. Banyak sekali penelitian atau tugas akhir
mahasiswa atau peneliti menggunakan berbagai versi mikrokontroler yang dapat
dibeli dengan murah dari harga 15.000 – 350.000. Hal ini dikarenakan produksi massal yang
dilakukan oleh para produsen chip seperti Atmel, Maxim dan Microchip. Mikrokontroler saat ini merupakan chip utama
pada hampir setiap peralatan elektronika canggih. Robot-robot canggih bun bergantung pada
kemampuan mikrokontroler dan ketekunan pembuat program mikrokntroler tersebut,
hal ini karena menentukan kecepatan eksekusi program pada mikrokontroler dan
kecerdasan pada mikrokontroler tersebut.
Mikrokontroler umumny
bekerja pada frekwensi sekitar 12 MHz hingga 40 MHz. Untuk meningkatkan kecerdasan pada
mikrokontroler tersebut, berbagai penelitian berbasis kecerdasan buatan telah
dilakukan. Salah satunya ialah
penggunaan algoritma genetik untuk mencari jalur terpendek pada gerakan robot
pencari sumber api. Jika anda tertarik
pada aplikasi mikrokontroler pada robot, sudah selayaknya Anda memperdalam
bidang ini, karena tiap tahun kita
mengadakan Kontes Robot Cerdas Indonesia yang melibatkan berbagai universitas
dan perusahaan di bidang elektronika.
Penyebaran ilmu pengetahuan mikrokontroler di Indonesia sangat tidak
merata. Berdasarkan pemantauan penulis,
banyak sekali para ahli mikrokontroler terpusat di Jawa timur, Jawa Barat dan Jakarta. Penulis sangat berharap, hadirnya buku ini
yang merupakan buku mikrokontroler terlengkap yang pernah ada dapat memperkecil
kesenjangan hal tersebut. Mungkin anda akan bertanya, apa perbedaan prosesor embedded
(prosesor yang dipasang pada system untuk tujuan tertentu)dengan mikrokontroler
? Saat ini mungkin sedikit sekali perbedaannya. Sebagai
contoh saat ini arsitektur standar proseror berubah menjadi seperti
mikrokontroler. Misalnya Motorola 68EC300, Intel
386 EX, and the IBM PowerPC 403GB. Chip-chip tersebut disebut sebagai super-microcontrollers.
1.3
berbagai Tipe
Mikrokontroler
1.3.1
Mikrokontroler ATMEL
Mikrokontroler keluaran
ATMEL dapat dikatakan sebagai mikrokontroler terlaris dan termurah saat
ini. Chip mikrokontroler ini dapat diprogram
menggunakan port paralel atau serial. Selain itu, dapat beroperasi hanya dengan
1 chip dan beberapa komponen dasar seprti kristal, resitor dan kapasitor.
Silahkan kunjungi situs www.atmel.com untuk
melihat dan mendowload informasi berbagai product dari ATMEL.
1.3.2
MikrokontrolerPIC
PIC ialah keluarga
mikrokontroler tipe RISC buatan Microchip
Technology. Bersumber dari PIC1650 yang
dibuat oleh Divisi Mikroelektronika General Instruments. Teknologi Microchip tidak menggukana PIC
sebagai akronim,melaikan nama brandnya ialah PICmicro. Hal ini karena PIC singkatan dari Peripheral Interface
Controller, tetapi General Instruments mempunyai akronim PIC1650 sebagai
Programmabel Intelligent Computer.
PIC pada awalnya dibuat menggunakan teknologi General Instruments 16 bit CPU yaitu CP1600. * bit PIC dibuat pertama kali 1975 untuk
meningkatkan performa sistem peningkatan pada I/). Saat ini PIC telah dilengkapi dengan
EPROM dan komunikasi serial, UAT, kernel
kontrol motor dll serta memori program dari 512 word hingga 32 word. 1 Word disini sama dengan
1 instruki bahasa assembly yang
bervariasi dari 12 hingga 16 bit, tergantung dari tipe PICmicro tersebut. Silahkan
kunjungi www.microchip.com untuk
melihat berbagai produk chip tersebut.
1.3.3
Maxim
Maxim
merupakan salah satu produsen chip yang fokus pada komponen digital dan
kompunikasi seperti mikrocontroler, akuisisi data dan komponen RF (Radio Frekwensi). Maxim cukup inovatif dengan meluncurkan
mikrokontroler yang mendukung jaringan komputer antara lain 80C400 dengan
kecepatan tinggi. Anda dapat mengunjungi situs www.maxim-ic.com untuk melihat berbagai
produk dan mendownload datasheet, atau contoh aplikasi. Beberapa chip
mikrokontroler juga mendukung penggunakan compiler berbasis bahsaa C antara lai
softwaqre Keil yang berfungsi sebagai compiler
C , macro assemblers, real-time kernels, debuggers, simulator pada lingkungan IDE (Interface
Design Environment) yang bagus.
1.4 Mikrokontroler
Generasi terbaru
1.4.1 Mikrokontroler AT89S52
Mikrokontroler 89S52
merupakan versi terbaru dibandingkan mikrokontroler AT89C51 yang telah banyak
digunakan saat ini. AT89S52 mmpunyai kelebihan yaitu mempunyai flash memori
sebesar 8K bytei, RAM 256 byte serta 2
buah data pointer 16 bit. Spesifikasinya :
1.4.2
Spesial Function Register
Mikrokontroler mempunyai sebuah peta memori yang
disebut sebagai Special Functin Register (SFR) seperti gambar dibawah ini.
1.4.3 Data Memori
AT89S52 menggunakan 256
bytes RAM dimaan 128 bytes bagian atas menempati alamat parallel ke special
function register (SFR). Artinya 128
bagian atas mempunyai alamat yang sama dengan SFR namun secara fisik terpisah dari
SFR. Ketika instruksi mengakses lokasi
internal diatas 7FH, mode alama tyang digunakan pada instruksi menentukan
apakah CPU mengakses 128 btyes atas atau SFR.
Instruksi yang menggunakan pengalamatan langsung akan mengakses ruang SFR.
1.5 Aplikasi Pengkonversi Analog/Digital
1.5.1
ADC Max158 , 8 channel 8 bit adc
1.5.2
DS1722 digital temperature (Harga IC 75.000)
di3039.txt
;*************************************************************************************************
;
; LISTING 1 - TURBO C FOR DATA-TRANSFER CYCLE
;
; "Parallel port provides high-resolution
temperature sensing," EDN, October 3, 2002, pg 90
;
;*************************************************************************************************
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <process.h>
#include <alloc.h>
#define VDD_ON
0x01 /* power to PIC through
VDD_ON on pin 2 (D0) */
#define SCK 0x02 /* serial clock for SPI provided by PC */
#define PCSDO 0x04 /* serial data out from PC on Data bit 2 */
#define PCSDI 0x20 /* note this is on Status register (bit
1) */
#define SSOUT 0x40 /* =CE, active high, not low as for PIC
SPI */
#define MCLR_HI 0x80
/* MCLR* on pin 9 (Data bit 7) normally high */
#define OPERATE VDD_ON | MCLR_HI /* normal operation of DS1722 */
/* adjust these to match the CPU speed */
#define DELTIME 10000 /* settling time after transfers
*/
#define SECDELA 10000000 /* to get about 1 s sampling */
void dodelay(long);
void outportd(unsigned char);
int dport,sport;
void main(void)
{
unsigned char LSB,transfer(unsigned char,unsigned
char);
char MSB; /* note this is signed */
void outportd(unsigned char outbyte);
int i,j,it;
float T;
/* LPT1 port addresses */
if(!(dport = peek(0x40,0x08)))
{
printf("\n\n\nLPT1 not available... aborting\n\n\n"); exit(1); }
sport = dport + 1; /*
status port address */
/* Initialize the Printer DATA Port for PIC operation
*/
/* includes putting SCK in the neutral 0 position: ~
is bitwise negation */
outportd(OPERATE&~SSOUT);
printf("hit key to stop list\n");
transfer(0x80,0xE8);
/* initialize DS1722 */
for(j=0;j<20;j++)
{ if(kbhit())
break;
printf("
config %X: ",transfer(00,0));
dodelay(SECDELA);
printf("
LSB %X: ",LSB=transfer(0x01,0)); dodelay(SECDELA);
printf("
MSB %X: ",MSB=transfer(0x02,0)); dodelay(SECDELA);
printf("T=%10.4f\n",T=MSB+(float)LSB/256.);
} /* for loop
*/
}
unsigned char transfer(unsigned char outbyte,unsigned
char outdata)
{ /* output address byte on Data2, data byte, getting
inbyte on Status5 */
unsigned char
outmask,inbyte,statusmask;
int ibit;
inbyte=0x00;
/* raise SSOUT for 2 byte transfer, SCK also in
lowered neutral position */
outportd(OPERATE|SSOUT);
for(ibit=0;ibit<8;ibit++)
/* output
outbyte */
{
outportd(OPERATE|SCK|SSOUT);
/* raise clock SCK */
outmask=outbyte&0x80; outbyte=outbyte<<1;
if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */
else
outportd(OPERATE|SCK|SSOUT);
/* of 0 on PCSDO */
if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */
else
outportd(OPERATE|SSOUT);
/* retaining data */
}
for(ibit=0;ibit<8;ibit++)
/* output
outdata */
{
/* & input inbyte */
outportd(OPERATE|SCK|SSOUT); /* raise clock SCK */
outmask=outdata&0x80; outdata=outdata<<1;
if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */
else
outportd(OPERATE|SCK|SSOUT);
/* of 0 on PCSDO */
if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */
else
outportd(OPERATE|SSOUT); /* retaining data */
statusmask=inportb(sport); /* read status port*/
statusmask=statusmask&PCSDI; /* mask input line */
inbyte=inbyte<<1; inbyte=inbyte&0xFE;
inbyte|=statusmask>>5;
}
/* lower SSOUT at end of 2 byte transfer, lower SCK to
neutral position */
outportd(OPERATE&~SSOUT);
return inbyte;
}
void outportd(unsigned char outbyte)
{
dodelay(DELTIME); outportb(dport,outbyte); dodelay(DELTIME); }
void dodelay(long deltime)
{ long i; for(i=0; i<deltime; i++) ; }
Mikrokontroler AT89S51/52
2.1 Mikrokontroler
AT89S51/52
2.1.1 Pendahuluan
Mikrokontroler 89S51/52 merupakan versi terbaru
dibandingkan mikrokontroler AT89C51 yang telah banyak digunakan saat ini. Mikrokontroler AT89S52 ialah mikrokomputer
CMOS 8 bit dengan 8KB Flash Programmable dan Erasable Read Only Memory
(PEROM). Mikrokontroler berteknologi memori non volatile kerapatan tingi
dari Atmel ini kompatibel dengan mikrokontroler standar industri MCS-51 baik
pin kaki IC maupun set instruksinya serta harganya yang cukup murah. Oleh
karena itu, sangatlah tepat jika kita mempelajari mikrokontroler jenis ini.
Anda juga diharapkan mempelajari versi lainnya
yang berdasarkan pengalaman penulis
lebih cepat di dalam pengisian program yaitu AT89S8252.
Pada buku ini saya fokuskan pada AT89S52 karena lebih powerfull meskipun
sedikit lebih mahal dibandingkan 89S51.
Spesifikasi penting AT89S52 :
- Kompatibel dengan keluarga mikrokontroler MCS51 sebelumnya
- 8 K Bytes In system Programmable (ISP) flash memori dengan kemampuan 1000 kali baca/tulis
- tegangan kerja 4-5.0V
- Bekerja dengan rentang 0 – 33MHz
- 256x8 bit RAM internal
- 32 jalur I/0 dapat diprogram
- 3 buah 16 bit Timer/Counter
- 8 sumber interrupt
- saluran full dupleks serial UART
- watchdog timer
- dual data pointer
- Mode pemrograman ISP yang fleksibel (Byte dan Page Mode)
Gambar 2.1 Bentuk
Chip AT 89S52
2.1.2 Spesial
Function Register
Mikrokontroler mempunyai sebuah peta memori yang
disebut sebagai Special Function Register (SFR) . Port 0 berada di alamat 80h, port
1 90h, port 2 A0h dan P3 di alamat B0h.
Sedangkan SBUF untuk komunikasi serial berada pada alamat 99h.
2.1.3 Data Memori
AT89S51/52 mempunyai memori yang disebut sebagai
Memori data internal. Memori data internal terdiri dari RAM internal sebesar 128 byte dengan alamat
00H-7FH dapat diakses menggunakan RAM address register. RAM Internal ini
terdiri dari Register Banks dengan 8
buah register (R0-R7). Memori lain yaitu
21 buah Special Function Register
dimulai dari alamat 80H-FFH. RAM ini beda lokasi dengan Flash PEROM dengan
alamat 000H -7FFH. Jika diperlukan,
memori data eksternal untuk menyimpan variabel yang ditentukan oleh user dapat ditambah berupa IC RAM atau ROM
maksimal sebesar 64KB.
|
|
Special Function Register
|
|
RAM Internal
|
Gambar 2.2 Ruang Memori data internal
AT89S52 menggunakan 256 bytes RAM dimana 128 bytes
bagian atas menempati alamat parallel ke special
function register (SFR). Artinya 128
bagian atas mempunyai alamat yang sama dengan SFR namun secara fisik terpisah
dari SFR. Ketika instruksi mengakses
lokasi internal diatas 7FH, mode alamat yang digunakan pada instruksi
menentukan apakah CPU mengakses 128 btyes atas atau SFR. Instruksi yang menggunakan pengalamatan
langsung akan mengakses ruang SFR.
Sebagai contoh, Port 0 berada diset pada alamat 80H, port 1 90H dan lain lain, informasi ini juga
dapat dilihat pada file MOD51 yang harus kita sertakan setiap membuat program
assembly dengan sebagian isinya sebagai berikut :
; REV.
1.0 MAY
23, 1984
P0 DATA
080H ;PORT 0
SP DATA
081H ;STACK POINTER
DPL DATA
082H ;DATA POINTER - LOW BYTE
DPH DATA
083H ;DATA POINTER - HIGH BYTE
PCON DATA
087H ;POWER CONTROL
TCON DATA
088H ;TIMER CONTROL
TMOD DATA
089H ;TIMER MODE
TL0 DATA
08AH ;TIMER 0 - LOW BYTE
TL1 DATA
08BH ;TIMER 1 - LOW BYTE
TH0 DATA
08CH ;TIMER 0 - HIGH BYTE
TH1 DATA
08DH ;TIMER 1 - HIGH BYTE
P1 DATA 090H
;PORT 1
Sebagai
perbandingan kapasitas memori, Tabel 2.1 menampilkan kapasitas memori
dari mikrokontroler seri AT89X.
Tabel 2.1 Kapasitas Memory Mikrokontroller seri AT89X
|
Type
|
RAM
|
Flash Memory
|
EEPROM
|
|
AT89C51/ AT89S51
|
8 X 128 byte
|
4 Kbyte
|
Tidak
|
|
AT89C52/ AT89S52
|
8 X 256 byte
|
8 Kbyte
|
Tidak
|
|
AT89C55
|
8 X 256 byte
|
20 Kbyte
|
Tidak
|
|
AT89S53
|
8 X 256 byte
|
12 Kbyte
|
Tidak
|
|
AT89S8252
|
8 X 256 byte
|
8 Kbyte
|
2 Kbyte
|
Pemrograman AT89S51/52
3.1 Bahasa Assembly di Mikrokontroler
3.1.1 Mengenal bahasa Assembly
Secara
fisik, mikrokontroler bekerja dengan membaca instruksi yang tersimpan di dalam
memori. Mikrokontroler menentukan
alamat dari memori program yang akan
dibaca, dan melakukan proses baca data
di memori. Data yang dibaca diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh mikrokontroler
di register, yang dikenal sebagai program counter. Instruksi ini
misalnya program aritmatika yang
melibatkan 2 register.
AT89S52 memiliki sekumpulan instruksi yang sangat lengkap. Jika anda telah
mempelajari bahasa assembly mikroprosesor keluarga intel (misal 8086), ada
sedikit perbedaan dengan bahasa assembly di mikrokontroler. Instruksi
MOV untuk byte dan bit dikelompokkan sesuai dengan mode pengalamatan (addressing
modes). Mode pengalamatan menjelaskan bagaimana
operand dioperasikan. Berikut
penjelasan dari berbagai mode pengalamatan. Bentuk program assembly yang umum ialah sebagai berikut :
(isi memori) (opcode)
4000 7430 MOV A, #35H
;kopi 35H ke akumulator A
Isi
memori
ialah bilangan heksadesimal yang dikenal oleh mikrokontroler kita, yang
merupakan representasi dari bahasa assembly yang telah kita buat. Mnemonic
atau opcode ialah kode yang akan melakukan aksi terhadap operand
. Operand ialah data yang
diproses oleh opcode. Sebuah opcode bisa membutuhkan 1,2 atau lebih operand,
kadang juga tidak perlu operand.Sedangkan komentar dapat kita berikan dengan
menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda
beda dalam suatu assembly.
CJNE
R5,#22H, aksi ;dibutuhkan 3 buah operand
MOVX
@DPTR, A ;dibutuhkan 2 buah operand
RL
A ;1 buah operand
NOP
; tidak memerlukan operand
Program yang telah selesai kita
buat dapat disimpan dengan ekstension .asm. Lalu kita buat program objek
menggunakan program ASM51 yang dapat
diperoleh secara gratis di internet. Berikut contoh mengkompile file tesppi.asm yang tersedia di dalam paket
DT-51 menggunakan ASM51, yang akan menghasilkan file tesppi.hex dan tesppi.lst.
File .hex inilah yang kita masukkan ke Flash PEROM mikrokontroler AT89S52 atau
ke eksternal memori seperti AT28C64B menggunakan program downloader.
Gambar 3.2 Tampilan file hasil kompilasi
Sedangkan file tesppi.lst merupakan file listing hasil dari proses assembly dan berisi informasi isi memori dan lain lain.
Gambar
3.3 Isi file tesppi.lst
3.1.2 Mendownload Program ke Mikrokontroler
Jika telah selesai anda dapat mendowload file hex anda ke Minimum System mikrokontroler anda menggunakan file dt51l.exe (berbasiskan DOS) atau dt51lwin.exe (berbasiskan windows ) sebagai berikut :
Gambar
3.4 DT-51 Windows Downloader v1.0
3.2 Mode Pengalamatan
3.2.1 Pengalamatan Langung
Pengalamatan langsung dilakukan dengan
memberikan nilai ke suatu register secara langsung, Untuk melaksanakan hal
tesersebut digunakan tanda #. Operand yang digunakan pada pengalamatan langsung
/immediate data dapat berupa bilangan bertanda mulai –256 hingga +256.
Contoh :
MOV A,#25H ;Isi akumulator dengan bilangan
25H
MOV DPTR, #20H :isi register DPTR dengan
bilangan 20H
MOV R1,10H : ; isi register R1 dengan
10H
MOV A,#-1 ; sama dengan MOV A,#0FFH
; karena 00H –1 menjadi FFH
3.2.2 Pengalamatan Tak Langung
Pada
pengalamatan ini, operand menunjuk ke sebuah register yang berisi lokasi alamat
memori yang akan digunakan dalam operasi.
Untuk melaksanakan pengalamatan tak langsung digunakan symbol @.
Pengalamatan jenis ini biasa digunakan untuk melakukan penulisan, pemindahan
atau pembacaan beberapa data dalam lokasi memori. AT89S51 mempunyai sebuah register 16 bit
(DPTR) yang dapat digunakan untuk melakukan pengalamatan tidak langsung.
Contoh :
ADD, A,R1 ;Tambahkan
isi RAM yang lokasinya ditunjukkan oleh register R1 ke
; akumulator
DEC @R1 ;Kurangi
satu isi RAM yang alamatnya ditunjukkan oleh register R1
MOVX, ADPTR, A :Pindahkan
isi dari akumulator ke memori luar yang lokasinya
; ditunjukkan oleh data pointer (DPTR)
Pengalamatan Data
Pengalamatan data terjadi pada sebuah perintah ketika
nilai operasi merupakan alamat dari data yang akan diisi atau yang akan
dipindahkan.
Contoh :
MOV
P1,A ;isi P1 dari Akumulator
MOV A, 00001001b ; isi A dengan data tsb
MOV
P2,FFH ;isi P2 dengan nilai FFH
3.2.3 Pengalamatan Kode
Pengalamatan kode terjadi ketika operand merupakan
alamat dari instruksi JUMP dan CALL. Berikut contoh ACALL yang memanggil label
Tunda, sehingga akan melompat ke lokasi memori bernama Tunda.
Contoh :
ACALL
Tunda
…
TUNDA:
MOV A,#FEH
LOOP:
DJNZ A, LOOP
RET
3.2.4 Pengalamatan Bit
Pengalamatan bit ialah penunjukkan alamat
lokasi bit baik dalam RAM internal atau perangkat keras menggunakan symbol
titik (.).
Contoh
:
SETB p1.7 ;Set bit port 1.7 aktif
SETB TR1 :Set TR1 (Timer 1 aktif)
SETB RXD ; memberikan logika 1 pada kaki RXD yang berada di port 3.0
3.3 Operator
Operator digunakan untuk melakukan aksi aritmatika, logika pergeseran bit dan lain-lainnya pada operand
.Beberapa operator yang tersedia diantaranya :
Ø
Operator Aritmatika
·
* untuk perkalian
·
/ untuk pembagian
·
+ untuk
penambahan
·
- untuk pengurangan
Contoh : MOV A, #25H+3H ; sama dengan MOV A,#28H
Ø Operator Logika
·
OR untuk poerasi
OR
·
AND untuk operasi
AND
·
XOR untuk operasi
XOR
·
EXOR untuk
operasi EXOR
·
NOT untuk operasi
invert
Contoh :
MOV
A, #20H OR 40H ;sama dengan MOV A,#60H
MOV
A,#10H AND 31H ;sama dengan MOV A, 10H
Ø Operasi Khusus
·
SHR 16 bit geser
ke kanan
·
SHL 16 bit geser
ke kiri
·
HIGH pilih bagian
tas bit
·
LOW pilih bagian
bawah bit
·
EQ = sama dengan
·
NET <>
tidak sama dengan
·
Lt < lebih
kecil
·
LE <= lebih kecil atau sama dengan
·
GT > lebih
besar
·
GE
>= lebih besar atau sama dengan
Dimana perlu anda perhatikan prioritas dari operator sebagai berikut :
()
HIGH , LOW
Z*/, MOD, SHL , SHR
+, -
EQ, NE, LT, LE, GT, GE,=,<>,<,<=,>,>=
NOT
AND
OR, XOR
3.4 Pengarah Pilihan
Segmen (Segment Selection Directives)
Ada 5
buah pengarah pilihan segmen yaitu CSEG, BSEG , DSEG ISEG dan XSEG yang menunjukkan salah satu
dari 5 buah area memori . Penjelasan dari masing-masing segmen sebagai berikut
:
Ø CSEG : untuk memilih lokasi memori program
Ø
BSEG : untuk meilih lokasi memori yang dapat
dialamati secara
pengalamatan bit
Ø DSEG : untuk memilih lokasi memori RAM Internal
Ø ISEG : untuk memilih lokasi memori RAM Internal
yang
dialamati secara tak langsung
Ø XSEG : untuk memilih lokasi memori eksternal
Namun perlu diingat,
penggunakan CSEG tidak wajib, jika kita memprogram mikrokontroler standar tanpa
menuliskan CSEG terlebih dahulu, mikrokontroler masih tetap mau jalan.
3.5 Vektor
Interupsi
Vector interrupt ialah nilai yang disimpan ke program
counter pada saat terjadi interupsi sehingga program akan menuju ke alamat yang
ditunjukkan oleh Program counter. Alamat vector interupsi ialah alamat yang
akan dituju oleh MCS-51 jika terjadi interupsi.
Interrupct service routine ialah rutin yang akan dijalankan pada saat
terjadi interupsi. Jika rutin yang akan
dijalankan sangat singkat, rutin tersebut dapat ditempatkan pada alamat yang
sama dengan alamat vector interupsi.
Namun penempatan Interrupt service routine pada alamat vector interupsi
tidak disarankan karena dapat menggangun alamat vector interupsi milik
interupsi lain terutama jika rutin yang diproses cukup panjang. Cara terbaik ialah dengan memindah Interrupt
service routine pada alamat lain dan memberikan instruksi untuk lompat ke
alamat tersebut tepat pada alamat vector interupsi yang bersangkutan. Untuk
keluar dari Interrupt service routine dapat dilakukan dengan instruksi RETI
(Return from interrupt).
Tabel 3.3
Alamat Vector interupsi
|
Interupsi
|
Flag
|
Alamat vektor
|
|
System
reset
|
Rst
|
0000h
|
|
Interupsi
eksternal 0
|
Ie0
|
0003h
|
|
Interupsi
timer 0
|
Tf0
|
000bh
|
|
Interupsi
eksternal 1
|
Ie1
|
0013h
|
|
Interupsi
timer 1
|
Tf1
|
001bh
|
|
Interupsi
serial
|
R1
atau ti
|
0023h
|
Masing –masing alamat vector mempunyai jarak yang
berdekatan sehingga akan timbul masalah jika diperlukan sebuah rutin layanan
interupsi yang cukup panjang., misal penggunakan interupsi eksternal 0 pada 0003h
dan interupsi timer 0 pada 000bh, solusinya dapat dilakukan dengan kerangka
sebagai berikut :
Org
4000h
Ljmp
start
Org
4003h
Ljmp
int0
Org
400bh
Ljmp
timer0
….
Start: ….;main program
Int0; …. ;int0
Reti
Timer0; …..
Reti
3.6 Mencoba Membuat Program
3.6.1 Persiapan Alat
Agar proses belajar Anda
berjalan sempurna, idealnya modul yang dibutuhkan :
- DT-51 Versi 3.0
- Trainer Board
- I2C ADDA
- LCD 2x16 atau LCD 2x20
- de-Kits LCD Grafik
- Software Hyper terminal di windows
- ASM51 dan DT51 loader (DT51l.exe)
- Sensor Suhu LM 35
- Catu daya 5 V dan 12 , min 3 A.
- Multitester analog/digital
- Card PPI 8255 ISA atau PCI (lebih mahal)
- ADC dan DAC
- Osiloskop Standar (opsional)
Modul –modul utama tersebut diatas dapat anda
pesan langsung ke penulis di situs www.toko-elektronika.com, sehingga anda tidak mengalami masalah
pada saat percobaan. Selain itu anda harus membuat beberapa kabel
diantaranya yang dibutuhkan ialah :
- 4 set ampenol 8x2
- 4 set ampenol 5x2
- Kabel pita selebar 16 jalur
- 4 set female pcb pin
- Kabel tunggal
Untuk
menghubungkan pin CONTROL dari DT51 ke pin
CONTROL Trainer board kabel 1 dan 2 harus dibalik, hal ini dikarenakan
posisi VCC dan GND pada DT-51 terbalik, kabel ini disebut sebagai kabel X.
Praktikum II : Port 1
sebagai input
Langkah-langkahnya:
- Hubungkan Port 1 DT-51 dengan “PORT INPUT” Dt-51 trainer Board
- Hubungkan Port A DT-51 dengan “PORT OUTPUT” DT-51 Trainer Board
- Hubungkan “CONTROL” DT-51 dengan “CONTROL” DT-51 Trainer Board menggunakan kabel tipe X
- Buat program berikut:
$mod51
CSEG
ORG
4000H
LJMP
START
ORG
4100H
START:
MOV
SP, 30H
INIT: MOV DPTR, #2003H
MOV
A,#80H
MOVX @DPTR, A
LABEL1: JB P1.4,
DISPLAY
DISPLAY2: MOV DPTR,#2000H
MOV
A, #00H
MOV
@DPTR, A
SJMP
LABEL1
DISPLAY: MOV
DPTR, #2000H
MOV
A, #10H
MOVX
@DPTR, A
SJMP
LABEL1
END
Jika program dijalankan, jika toggle
switch Bit 4 berlogika 0 maka semua LED
akan padam (masuk ke label DISPLAY2), jika toggle switch Bit 4 berlogika 1 maka
hanya LED Bit 4 yang menyala(masuk ke label DISPLAY). Sebagai catatan,
penggunaan P1.4 tidak mutlak, nilai 00H dan 10H dapat diganti dengan nilai lain
untuk output ke LED.
Praktikum III : Penggunaan Interupsi
Langkah-langkah :
·
Hubungkan Port 1 DT-51 dengan “PORT OUTPUT”
DT-51 Trainer Board
·
Hubungkan “CONTROL” DT-51 dengan “CONTROL“ DT-51
Trainer Board
·
Hubungkan “IS1” dengan “INT0” pada DT-51 Trainer
Board, karena kita ingin menggunakan interrupt eksternal (pin INT0 dan INT1)
·
Buat program berikut :
$mod51
CSEG
ORG
4000H
LJMP
START
ORG
4003H
RL
A
MOV
P1, A
MOV
R7, #04H
LOOPA: MOV R6,#0FFH
LOOPB: MOV R5,
#0FFH
DJNZ
R5, $
DJNZ R6, LOOPB
DJNZ R7, LOOPA
RETI
ORG 4200H
;inisialisasi
START: MOV SP, #30H
MOV
TCON, #01H
MOV
A, #01H
MOV
P1, #01H
MOV
IE, #81H
SJMP
$
END
Program diatas
akan menampilkan nyala LED dari Bit 0 dan bergeser ke kiri setiap ada penekanan
keypad “IS1”. Untuk mengunakan INT0 dengan falling
edge trigger maka INT0 (TCON.0) berlogika 1, sehingga TCON bernilai
00000001b(01H). Untuk mengaktifkan interrupt, maka EX0 (IE.0) dan EA(IE.7)
berlogika 1 sehingga IE bernilai 10000001b (81H), terlihat juga bahwa pada saat
interupsi program melompat ke alamat vector 0003H yang oleh DT-51 langsung
dipindah ke alamat 4003H. Fungsi DJNZ digunakan untuk mengurangi satu dan
lompat jika hasilnya bukan nol.
Praktikum IV : Penggunaan
Timer/Counter
Untuk
menggunakan Timer/Counter 0 sebagai timer mode 1, maka GATE,C/T dan M1 untuk
Timer 0 pada TMOD berlogika 0 dan M0 berlogika 1 sehingga TMOD bernilai 01H.
Sedangkan untuk menjalankan Timer 0, maka TR0 (TCON.4) berlogika 1 sehingga
TCON bernilai 10H. Pada contoh dibawah ini Timer 0 diberi nilai awal 2CH untuk
TH0 dan 00H untuk TLO sehingga Timer 0 akan selalu dimulai dari nilai 2C00H. Karena frekwensi timer tinggi, maka
digunakan faktor pengali 10H yang berada pada R0.
Langkah-langkah :
·
Hubungkan Port 1 DT-51 dengan “PORT OUTPUT”
DT-51 Trainer Board
·
Hubungkan “CONTROL” DT-51 dengan “CONTROL“ DT-51
Trainer Board
·
Buat program berikut :
$mod51
CSEG
ORG 4000H
LJMP START
ORG 400BH
COUNT: INC R0
CJNE R0,#10H,OUT1
SETB P1.5
LOOP: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,LOOP
CLR P1.5
MOV R0,#00H
OUT1: MOV TH0,#2CH
MOV TL0,#00H
RET1
;inisialisasi
ORG 4200H
START: MOV SP,#30H
MOV R0,#00H
MOV TMOD,#01H
MOV TH0,#2CH
MOV TL0,#00H
MOV TCON,#10H
MOV P1,#00H
MOV IE,#82H
SJMP $
END
Jika program
dijalankan, akan menampilkan nyala LED Bit 5 berkedip dimana baru akan
dinyalakan atau dipadamkan setelah interupsi oleh Timer 0 sebanyak 16 x.
Perhatikan pada saat interupsi, program akan melompat ke alamat vector 000BH
tetapi oleh DT51 akan langsung dipindah ke alamat 400BH.
3.6.1 Menulis program
Anda dapat menulis program di
mana saja seperti notepad, wordpad dan ALDS. ALDS ialah software yang dapat
kita gunakan membuat program dan melacak kesalahan.
3.6.2 Port
sebagai I/0
Program
pertama kita ialah Program yang menerima input dari Akumulator lalu menampilkan outputnya berlogika 1 atau 0
di port 1. Karena DT-51 menggunakan memori eksternal, maka dimulai dari alamat
4000H. Jika anda menggunakan kit buatan sendiri atau sistem minimum SMART52
produksi e-Technology, maka biasanya
original dimulai dari 00H karena program disimpan di chip mikrokontroler
tersebut.
Kode
selanjutnya ialah membuat sebuah label dengan nama MULAI, isi dari label
tersebut ialah menset data 0FH lalu
dikirim ke akumulator A menggunakan perintah MOV. Lalu data di Akumulator di
pindahkan ke P1 menggunakan fungsi MOV juga. Untuk terjadi perulangan terus
menerus, kita menggunakan fungsi JMP untuk loncat ke label MULAI. Program diakhiri menggunakan fungsi END.
Program menerima data 0FH dari Akumulator lalu dikirim ke port 1 (p1.asm)
$mod51
ORG
4000H ;
menggunakan alamat awal EEPROM DT51
MULAI: ; Label
MULAI
MOV A,#0FH ;
Kirim Data 0FH Ke Accumulator
MOV P1,A ;
Kirim Data pada Accumulator ke Port 1
JMP MULAI ;
Loncat Ke Label MULAI
END
Hubungkan keluaran p1 ke port input trainer
board. Kompilasi program ini menjadi file p1.hex lalu masukkan ke kit
DT-51 menggunakan dt51lwin.exe. Maka akan tampil data 4 led yang hidup di port
input trainer board. Jika anda
menggunakan system minimum 89S51 standar, dapat anda modifikasi dimana
akumulator A bersumber dari port2 misalnya sebagai berikut:
MOV A, P2 ; terima data dari port 2
MOV P1, A ; tampilkan ke port 1
Port 1 DT-51 umumnya digunakan sebagai port
input/output menggunakan perintah SETB untuk memberikan nilai 1 pada Bit,
sedangkan perintah CLR akan mengkosongkan bit menjadi 0. Kita menggunakan
fungsi SJMP untuk lompat secara Relative
Addressing.
Langkah
–langkah :
- Hubungkan Port 1 DT-51 dengan “PORT OUTPUT” DT-51 Trainer Board
- Hubungkan “CONTROL” DT-51 dengan “CONTROL” DT-51
- Hubungkan kabel port serial DT-51 dengan PC untuk menulis dan mengisi program.
- Buat program sebagai berikut :
Program
Mengeset P1(p1setb.asm)
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV SP, #30H
SETB P1.0
CLR P1.1
SETB P1.2
CLR P1.3
SETB P1.4
CLR P1.5
CLR P1.6
CLR P1.7
SJMP $
END
Jika program dijalankan maka akan menyebabkan output
LED Trainer Board Bit ke 0, 2 dan ke 4
menyala dan lainnya padam. SP dipindah ke alamat 30H karena alamat-alamat
sebelumnya umumnya masih dipakai, sedangkan SJMP $ pada program akan
menyebabkan program berputar / looping
pada alamat dimana perintah SJMP $ berada.
Program berikut akan mengetes port 1 di DT-51 Minimum
System. Output
di port 1 akan berlogika 1 dan 0 secara bergantian. Untuk melihat hasil output, kita menggunakan delay
agar perubahan logika di port tersebut dapat terlihat.
Program
Tes port 1 DT-51(tesport.asm)
$MOD51
$TITLE(TESPORT)
CSEG
ORG 4000H
AJMP
START
ORG
4100H
Delay:
MOV R2,#0FH
Del1 :
MOV R1,#0FFH
DJNZ R1,$
DJNZ R2,Del1
RET
START: MOV SP,#30H
XX: MOV P1,#0FFH
;semua pin di port 1 high
ACALL Delay
MOV P1,#00H
; set low
ACALL Delay
AJMP XX
END
Program selanjutnya ialah mengeset port 2.0 kelap
kelip menggunakan fungsi SETB dan
Tidak ada komentar:
Posting Komentar