Anda di halaman 1dari 35

Teknologi Mikrokontroler Terkini

Pokok Bahasan : Sejarah Mikroprosesor dan Komputer Peranan Chip Mikrokontroler pada Teknologi Elektronika Berbagai Tipe Mikrokontroler Mengenal AT89S52

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 mesinmesin 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 supermicrocontrollers.

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 :

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 jarul I/) dapat deprogram 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)

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 #define PCSDO #define PCSDI #define SSOUT 0x02 /* serial clock for SPI provided by PC 0x04 /* serial data out from PC on Data bit 2 0x20 /* note this is on Status register (bit 1) */ 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 #define SECDELA 10000000 /* settling time after transfers */ /* 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); outmask=outbyte&0x80; outbyte=outbyte<<1;

/* raise clock SCK */

if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */ else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */ /* lower clock SCK */

if(outmask)outportd(OPERATE|PCSDO|SSOUT); else outportd(OPERATE|SSOUT); } for(ibit=0;ibit<8;ibit++) {

/* retaining data */

/* output outdata */ /* & input inbyte */

outportd(OPERATE|SCK|SSOUT); outmask=outdata&0x80; outdata=outdata<<1;

/* raise clock SCK */

if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */ else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */ /* lower clock SCK */

if(outmask)outportd(OPERATE|PCSDO|SSOUT); else outportd(OPERATE|SSOUT); statusmask=inportb(sport); statusmask=statusmask&PCSDI;

/* retaining data */ /* read status port*/ /* 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.

FFh

80h 7Fh

00h

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 :

; P0 SP DPL DPH PCON TCON TMOD

REV. DATA DATA DATA DATA DATA DATA DATA

1.0 080H 081H 082H 083H 087H 088H 089H

MAY 23, 1984 ;PORT 0 ;STACK POINTER ;DATA POINTER - LOW BYTE ;DATA POINTER - HIGH BYTE ;POWER CONTROL ;TIMER CONTROL ;TIMER MODE

TL0 TL1 TH0 TH1 P1

DATA DATA DATA DATA DATA

08AH 08BH 08CH 08DH 090H

;TIMER 0 - LOW BYTE ;TIMER 1 - LOW BYTE ;TIMER 0 - HIGH BYTE ;TIMER 1 - HIGH BYTE ;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 AT89C51/ AT89S51 AT89C52/ AT89S52 AT89C55 AT89S53 AT89S8252 RAM 8 X 128 byte 8 X 256 byte 8 X 256 byte 8 X 256 byte 8 X 256 byte Flash Memory 4 Kbyte 8 Kbyte 20 Kbyte 12 Kbyte 8 Kbyte EEPROM Tidak Tidak Tidak Tidak 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 :

Label

mnemonic

operand1 operand2

komentar

(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 MOVX @DPTR, A RL A NOP

;dibutuhkan 3 buah operand ;dibutuhkan 2 buah operand ;1 buah operand ; 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 DT51 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 MOV DPTR, #20H MOV R1,10H : MOV A,#-1 ;Isi akumulator dengan bilangan 25H :isi register DPTR dengan bilangan 20H ; isi register R1 dengan 10H ; 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 :Pindahkan isi dari akumulator ke memori luar yang lokasinya ; ditunjukkan oleh data pointer (DPTR)

MOVX, ADPTR, A

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 MOV A, 00001001b MOV P2,FFH ;isi P1 dari Akumulator ; isi A dengan data tsb ;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 SETB TR1 SETB RXD ;Set bit port 1.7 aktif :Set TR1 (Timer 1 aktif) ; 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 BSEG DSEG ISEG XSEG : untuk memilih lokasi memori program : untuk meilih lokasi memori yang dapat dialamati secara pengalamatan bit : untuk memilih lokasi memori RAM Internal : untuk memilih lokasi memori RAM Internal yang dialamati secara tak langsung : 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 System reset Interupsi eksternal 0 Interupsi timer 0 Interupsi eksternal 1 Interupsi timer 1 Interupsi serial Flag Rst Ie0 Tf0 Ie1 Tf1 R1 atau ti Alamat vektor 0000h 0003h 000bh 0013h 001bh 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; . Reti

;int0

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, INIT: 30H

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: LOOPB: MOV R6,#0FFH 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 MULAI: MOV A,#0FH MOV P1,A JMP MULAI END ; menggunakan alamat awal EEPROM DT51 ; Label MULAI ; Kirim Data 0FH Ke Accumulator ; Kirim Data pada Accumulator ke Port 1 ; Loncat Ke Label MULAI

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 MOV P1, A

; terima data dari port 2 ; 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 START: MOV SP, #30H SETB P1.0 CLR P1.1 4100H

SETB P1.2 CLR P1.3

SETB P1.4

CLR CLR CLR

P1.5 P1.6 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 alamatalamat 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 AJMP ORG 4000H START 4100H

Delay: Del1 :

MOV MOV DJNZ DJNZ RET

R2,#0FH R1,#0FFH R1,$ R2,Del1

START: XX:

MOV MOV ACALL MOV ACALL AJMP

SP,#30H P1,#0FFH ;semua pin di port 1 high Delay P1,#00H ; set low Delay XX

END

Program selanjutnya ialah mengeset port 2.0 kelap kelip menggunakan fungsi SETB dan

Anda mungkin juga menyukai