Dasar MikroKontroller Pengenalan Mikrokontroler AT89C51 Mikrokontroler AT89C51 ialah mikrokomputer CMOS 8 bit dengan 4KB 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 (seperti mikrokontroler 8031 yang terkenal dan banyak digunakan beberapa waktu lalu) 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 terbaru yaitu berseri AT89S51. Informasi lebih detail mengenai interfacing dan penerapan aplikasi pada mikrokontroler 89C51 dapat Anda temukan pada buku Saya sebelumnya. AT89C51 mempunyai memori yang 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 Register dimulai dari alamat 80H-FFH. RAM ini beda lokasi dengan Flash PEROM dengan alamat 000H -7FFH.
Sebagai perbandingan kapasitas memori , Tabel 16.1 menampilkan kapasitas memori dari mikrokontroler seri AT89X. Tabel 1 Kapasitas Memory Mikrokontroler seri AT89X Flash EEPROM Type RAM Memory 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
ama Pin-pin AT89C51 N ama
Blok Diagram AT89C51
Diposkan oleh syauginaifa di 23.03 0 komentar SEKILAS Secara
TENTANG MICROCONTROLLER K ELUAR GA AVR
histories microcontroller seri AVR pertama kali diperkenalkan ke pasaran sekitar t ahun 1997 oleh perusahaan Atmel, yaitu sebuah perusahaan yang sangat terkenal dengan produk microcontroller seri AT89S51/52-nya yang sampai sekarang masih banyak digunakan di lapangan. Tidak seperti microcontroller seri AT89S51/52 yang masih mempertahankan arsitektur dan set instruksi dasar microcontroller 8031 dari perusahaan INT EL. Microcontroller AVR ini diklaim memiliki arsitektur dan set instruksi yang benar-benar baru da n berbeda dengan
arsitektur microcontroller sebelumnya yang diproduksi oleh perusahaan tersebut. Tetapi walaupun demikian, bagi para programmer yang sebelumnya telah terbiasa dengan microcontroller seri AT89S51/52, dan berencana untuk beralih ke microcontroller AVR, maka secara teknis tidak akan banyak kesulitan yang berarti, hal ini dikarenakan selain konsep dan istilah-istilah dasarnya hampir sama, pe mrograman level assembler-nya pun relative tidak jauh berbeda. Berdasarkan arsitekturnya, AVR merupakan microco ntroller RISC (Reduce Instruction Set Computer) dengan lebar bus data 8 bit. Berbeda dengan sistem AT89S51/52 yang memiliki frekuensi kerja seperduabelas kali frekuensi oscilator, frekuensi kerja microcontroller AVR ini pada dasarnya sama dengan frekuensi oscilator, sehingga hal tersebut menyebabkan kecepatan kerja AVR untuk frekuensi oscilator yang sama, akan dua belas kali lebih cepat dibandingkan dengan microcontroller keluarga AT89S51/52. Dengan instruksi yang sangat variatif (mirip dengan sistem CISC-Complex Instruction Set Computer) serta jumlah register serbaguna (general Purpose Reg ister) sebanyak 32 buah yang semuanya terhubung secara langsung ke ALU (Arithmetic Logic Unit), kecepatan operasi microcontroller AVR ini dapat mencapai 16 MIPS (enam belas juta instruksi per detik) ²sebuah kecepatan yang sangat tinggi untuk ukuran microcontroller 8 bit yang ada di pasaran sampai saat ini. Untuk memenuhi kebutuhan dan aplikasi industri yang sangat beragam, microcontroller keluarga AVR ini muncul di pasaran dengan tiga seri utama: tinyAVR, ClasicAVR (AVR), megaAVR. Berikut ini beberapa seri yang dapat anda jumpai di pasaran: -ATtiny13 AT90S2313 ATmega103 -ATtiny22 AT90S2323 ATmega128 -ATtiny22L AT90S2333 ATmega16 -ATtiny2313 AT90S4414 ATmega162 -ATtiny2313V AT90S4433 ATmega168 -ATtiny26 AT90S8515 ATmega8535 Keseluruhan seri AVR ini pada dasarnya memiliki o rganisasi memori dan set instruksi yang sama (sehingga dengan demikian jika kita telah mahir menggunakan salah satu seri AVR, untuk beralih ke seri yang lain akan relative mudah). Perbedaan antara tinyAVR, AVR dan megaAVR pada kenyataannya hanya merefleksikan tambahan-tambahan fitur yang ditawarkannya saja (misal adanya tambahan ADC internal pada seri AVR tertentu, jumlah Port I/O serta memori yang berbeda, dan sebagainya). Diantara ketiganya, megaAVR umumnya memiliki fitur yang paling lengkap, disusul oleh AVR, dan terakhir tinyAVR. Untuk memberi gambaran yang lebih jelas, tabel 1.1 berikut memperlihatkan perbedaan ketiga seri AVR ditinjau dari jumlah memori yang d imilikinya. Table 1.1. Perbedaan seri AVR berdasarkan jumlah memori Microcontroller AVR Memori (byte) Jenis Paket IC Flash EEPROM SRAM TinyAVR 8±32 pin 1 ± 2K 64 ± 128 0 ± 128 AVR (classic AVR) 20± 44 pin 1 ± 8K 128 ± 512 0 ± 1 K MegaAVR 32±64 pin 8 ± 128 K 512 ± 4 K 512 ± 4 K Seperti
terlihat pada tabel tersebut, Semua jenis AVR ini telah dilengkapi dengan memori flash sebagai memori program. Tergantung serinya, kapasitas memori flash yang dimiliki bervariasi dari 1K sampai 128 KB. Secara teknis, memori jenis ini dapat diprogram melalui saluran
antarmuka yang dikenal dengan nama Serial Peripheral Interface (SPI) yang terdapat pada setiap seri AVR tersebut. Dengan menggunakan perangkat lunak programmer (downloader) yang tepat, pengisian memori Flash dengan menggunakan saluran SPI ini dapat dilakukan bahkan ketika chip AVR telah terpasang pada sistem akhir (end system), sehingga dengan demikian pemrogramannya sangat fleksibel dan tidak merepotkan pengguna (Secara praktis metoda ini dikenal dengan istilah ISP-In System Programming ± sedangkan perangkat lunaknya dinamakan In System Programmer). Untuk penyimpanan data, microcontroller AVR menyediakan dua jenis memori yang berbeda: EEPROM (Electrically Erasable Programmable Read Only Memory) dan SRAM (Static Random Access memory). EEPROM umumnya digunakan untuk menyimpan data-data program yang bersifat permanen, sedangkan SRAM digunakan untuk menyimpan data variabel yang dimungkinkan berubah setiap saatnya. Kapasitas simpan data kedua memori ini bervariasi tergantung pada jenis AVR-nya (lihat tabel 1). Untuk seri AVR yang tidak memiliki SRAM, penyimpanan data variabel dapat dilakukan pada register serbaguna yang terdapat pada CPU microcontroller tersebut. Selain seri-seri diatas yang sifatnya lebih umum, Perusahaan At mel juga memproduksi beberapa jenis microcontroller AVR untuk tujuan yang lebih khusus dan terbatas, seperti seri AT86RF401 yang khusus digunakan untuk aplikasi wireless remote control dengan menggunakan gelombang radio (RF), seri AT90SC yang khusus digunakan untuk peralatan sistem-sistem keamanan kartu SIM GSM, pembayaran via internet, dan lain sebagainya. Diposkan oleh syauginaifa di 21.10 0 komentar PERK EMBANGAN
MIKROKONTROLLER
Pada awal perkembangannya (yaitu sekitar tahun 1970-an), sumber daya perangkat keras serta perangkat lunak microcontroller yang beredar masih sangat terbatas. Saat itu, sistem microcontroller hanya dapat diprogram secara khusus dengan perangkat yang dinamakan EPROM programmer. Sedangkan perangkat lunak yang digunakan umumnya berbasis bahasa assembler yang relatif sulit dipelajari. Seiring dengan perkembangan teknologi solid state dan perangkat lunak komputer secara umum, saat ini pemrograman sistem microcontroler dirasakan relatif mudah dilakukan,terutama dengan digunakannya metode pemrograman ISP (In system Programming). Dengan menggunakan metode ini kita dapat memprogram sistem microcontroller sekaligus mengujinya pada sistem minimum atau papan pengembang (development board) secara langsung tanpa perlu lagi perangkat ³pembakar³ program atau emulator secara terpisah. Selain itu, ditinjau dari aspek perangkat lunak pemrogramannya, dewasa ini banyak alternatif bahasa aras tinggi dari pihak ketiga, baik gratis maupun komersil yang dapat digunakan. Penggunaan bahasa aras tinggi ini (seperti Pascal, C, basic dan sebagainya) selain akan menghemat waktu pengembangan, kode program yang disusun juga akan bersifat lebih modular dan terstruktur. Bagi para pemula yang berminat memperdalam microcontroller baik sekedar untuk tujuan penyaluran hobi atau kelak untuk tujuan yang lebih profesional, dewasa ini banyak microcontroller dari berbagai vendor yang dapat dijadikan sarana untuk berlatih (misal microcontroller PIC produk Microchip, COP-8 produk National, AT89S51/52 dan AVR produk Atmel, HC11 produk Motorola dan lain sebagainya). Untuk memutuskan microcontroller mana yang akan dijadikan sarana berlatih dan akan diperdalam secara serius, ada baiknya hal-hal berikut ini dijadikan bahan pertimbangan :
- Apakah microcontroller tersebut mudah dijumpai dipasaran - Apakah banyak dukungan pihak ketiga dalam penggunaan microcontroller tersebut, (misalnya perusahaan-perusahaan pembuat papan pengembang, pemasok compiler serta debbuger untuk pemrogramannya, dan sebagainya) - Apakah banyak referensi dan contoh-contoh program untuk panduan anda berlatih (misalnya dari sumber-sumber internet dan buku) - Apakah banyak forum-forum diskusi (terutama di Internet) tempat anda dan programer lain berbagi pengalaman. Dengan berbagai macam kelebihan yang dimiliki serta hal-hal yang menjadi bahan pertimbangan diatas, dewasa ini microcontroller AVR 8 bit produk perusahaan Atmel adalah salah satu microcontroller yang banyak merebut minat kalangan profesional dan juga cocok dijadikan sarana berlatih bagi para pemula. Hal ini selain karena ragam fitur yang ditawarkan, juga disebabkan kemudahan untuk memperoleh microcontroller tersebut (berikut papan pengembangnya) di pasaran dengan harga yang relatif murah. Selain itu berkaitan dengan rancangan arsitekturnya, microcontroller AVR ini juga cocok diprogram dengan menggunakan bahasa pemrograman aras tinggi (terutama bahasa C). Diposkan oleh syauginaifa di 21.03 0 komentar
Mode Pengalamatan 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
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. AT89C51 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 ;K urangi satu isi RAM yang alamatnya ditunjukkan oleh 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 P2,FFH ;isi P2 dengan nilai FFH
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
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
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 Pengarah Pilihan Segmen
(S egment S election 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
Diposkan oleh syauginaifa di 20.25 0 komentar
Kelompok Instruksi Pemograman mikrokontroller Kelompok Instruksi Aritmatika
ADD A,Rn (Add register to A). ADD A, (direct Add direct byte to A). ADD A, @Ri (Add indirect RAM to A). ADD A,#data (Add immediate data to A). ADDC A,Rn (Add register to A with Carry). ADDC A (direct Add direct byte to A with Carry). ADDC A,@Ri (Add indirect RAM to A with Carry). ADDC A,#data (Add immediate data to A with Carry).
SUBB
A,Rn (Subtract register from A with Borrow). SUBB A,direct (Subtract direct byte from A with Borrow). SUBB A,@Ri (Subtract indirect RAM from A with Borrow). SUBB A,#data (Subtract immediate data from A with Borrow0). INC A (Increment A). INC Rn (Increment register). INC direct (Increment direct byte). INC @Ri (Increment indirect RAM). DEC A (Decrement A). DEC Rn (Decrement register). DEC direct (Decrement direct byte). DEC @Ri (Decrement indirect RAM). INC DPTR (Increment Data Pointer). MUL AB (Multiply A & B (A x B => BA)). DIV AB (Divide A by B (A/B => A + B)). DA A (Decimal Adjust A).
Kelompok Instruksi Logika .
ANL A,Rn (AND register to A). ANL A,direct (AND direct byte to A). ANL A,@Ri (AND indirect RAM to A). ANL A,#data (AND immediate data to A). ANL direct,A (AND A to direct byte). ANL direct,#data (AND immediate data to direct byte). ORL A,Rn OR (register to A). ORL A,direct (OR direct byte to A). ORL A,@Ri (OR indirect RAM to A). ORL A,#data (OR immediate data to A). ORL direct,A (OR A to direct byte). ORL direct,#data (OR immediate data to direct byte). XRL A,Rn (Exclusive-OR register to A). XRL A,direct (Exclusive-OR direct byte to A). XRL A,@Ri (Exclusive-OR indirect RAM to A). XRL A,#data (Exclusive-OR immediate data to A). XRL direct,A (Exclusive-OR A to direct byte). XRL direct,#data (Exclusive-OR immediate data to direct byte). CLR A (Clear A). CPL A (Complement A). RL A (Rotate A Left). RLC A (Rotate A Left through Carry). RR A (Rotate A Right 1 1 RR C A (Rotate A Right through Carry). SWAP A (Swap nibbles within A).
Kelompok Instruksi Penyalinan Data.
MOV A,Rn (Move register to A). MOV A,direct (Move direct byte to A). MOV A,@Ri (Move indirect RAM to A). MOV A,#data (Move immediate data to A) MOV Rn,A (Move A to register). MOV Rn,direct (Move direct byte to register). MOV Rn,#data (Move immediate data to register). MOV direct,A (Move A to direct byte). MOV direct,Rn (Move register to direct byte). MOV direct,direct (Move direct byte to direct byte). MOV direct,@Ri (Move indirect RAM to direct byte). MOV direct,#data (Move immediate data to direct byte). MOV @Ri,A (Move A to indirect RAM). MOV @Ri,direct (Move direct byte to indirect RAM). MOV @Ri,#data (Move immediate data to indirect RAM). MOV DPTR,#data16 (Load Data Pointer with 16-bit constant). MOVC A,@A+DPTR (Move Code byte relative to DPTR to A). MOVC A,@A+PC (Move Code byte relative to PC to A) MOVX A,@Ri (Move External RAM (8-bit addr) to A). MOVX A,@DPTR (Move External RAM (16-bit addr) to A) MOVX @Ri,A (Move A to External RAM (8-bit addr)) MOVX @DPTR,A (Move A to External RAM (16-bit addr)). PUSH direct (Push direct byte onto stack). POP direct (Pop direct byte from stack). XCH A,Rn (Exchange register with A). XCH A,direct (Exchange direct byte with A). XCH A,@Ri (Exchange indirect RAM with A). XCHD A,@Ri (Exchange low-order Digit indirect RAM with A). Kelompok Instruksi Bit dan Bit-test . CLR C (Clear Carry
flag). CLR bit (Clear direct bit). SETB C (Set Carry flag). SETB bit (Set direct bit). CPL C (Complement Carry flag). CPL bit (Complement direct bit). ANL C,bit (AND direct bit to Carry flag). ANL C,/bit (AND complement of direct bit to Carry flag). ORL C,bit (OR direct bit to Carry flag). ORL C,/bit (OR complement of direct bit to Carry flag). MOV C,bit (Move direct bit to Carry flag). MOV bit,C (Move Carry flag to direct bit).
Kelompok Instruksi Percabangan .
ACALL addr11 (Absolute subroutine call). LCALL addr16 (Long subroutine call). RET (Return from subroutine). RETI (Return from interrupt). AJMP addr11 (Absolute Jump). LJMP addr16 (Long Jump). SJMP rel ( Short Jump (relative addr)). JMP @A+DPTR (Jump indirect relative to DPTR). JZ rel (Jump if A is Zero). JNZ rel (Jump if A is Not Zero). JC rel (Jump if Carry flag is set). JNC rel (Jump if No Carry flag). JB bit,rel (Jump if direct Bit is set). JNB bit,rel (Jump if direct Bit is Not set) JBC bit,rel (Jump if direct Bit is set & Clear bit). CJNE A,direct,rel (Compare direct to A & Jump if Not Equal). CJNE A,#data,rel (Compare immediate to A & Jump if Not Equal). CJNE Rn,#data,rel (Compare immed. to reg. & Jump if Not Equal). CJNE @Ri,#data,rel (Compare immed. to ind. & Ju mp if Not Equal). DJNZ Rn,rel (Decrement register & Jump if Not Zero). DJNZ direct,rel (Decrement direct byte & Jump if Not Zero). NOP (No operation). Diposkan oleh syauginaifa di 20.19 0 komentar
Daftar Instruksi Bahasa Assembly MC S-51 Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program: 1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program) 2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler dengan melakukan operasi tertentu sesuai dengan daftar yang sudah tertanam dalam CPU) Daftar Assembly Directive Assembly Directive
Keterangan
EQU
Pendefinisian konstanta
DB
Pendefinisian data dengan ukuran satuan 1 byte
DW
Pendefinisian data dengan ukuran satuan 1 word
DBIT
Pendefinisian data dengan ukuran satuan 1 bit
DS
Pemesanan tempat penyimpanan data di RAM
ORG
Inisialisasi alamat mulai program
END
Penanda akhir program
CSEG
Penanda penempatan di code segment
XSEG
Penanda penempatan di external data segment
DSEG
Penanda penempatan di internal direct data segment
ISEG
Penanda penempatan di internal indirect data segment
BSEG
Penanda penempatan di bit data segment
CODE
Penanda mulai pendefinisian program
XDATA
Pendefinisian external data
DATA
Pendefinisian internal direct data
IDATA
Pendefinisian internal indirect data
BIT
Pendefinisian data bit
#INCLUDE
Mengikutsertakan file program lain
Daftar Instruksi Instruksi
Keterangan Singkatan
ACALL
Absolute Call
ADD
Add
ADDC
Add with Carry
AJMP
Absolute Jump
ANL
AND Logic
CJNE
Compare
CLR
Clear
CPL
Complement
DA
Decimal Adjust
DEC
Decrement
DIV
Divide
DJNZ
Decrement and Jump if Not Zero
INC
Increment
JB
Jump if Bit Set
JBC
Jump if Bit Set and Clear Bit
and Jump if Not Equal
JC
Jump if Carry Set
JMP
Jump to Address
JNB
Jump if Not Bit Set
JNC
Jump if Carry Not Set
JNZ
Jump if Accumulator Not Zero
JZ
Jump if Accumulator Zero
LCALL
Long Call
LJMP
Long Jump
MOV
Move from Memory
MOVC
Move from Code Memory
MOVX
Move from Extended Memory
MUL
Multiply
NOP
No Operation
ORL
OR Logic
POP
Pop Value From Stack
PUSH
Push Value Onto Stack
RET
Return From Subroutine
RETI
Return From Interrupt
RL
Rotate Left
RLC
Rotate Left through Carry
RR
Rotate Right
RR C
Rotate Right through Carry
SETB
Set
SJMP
Short
SUBB
Subtract With
SWAP
Swap
XCH
Exchange Bytes
XCHD
Exchange Digits
XRL
Exclusive OR Logic
Bit Jump Borrow
Nibbles
Diposkan oleh syauginaifa di 20.16 0 komentar
Bahasa Assembly di Mikrokontroler
Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus pembacaan 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. AT89C51 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, #30H ;kirim 30H ke akumulator A Isi memori ialah bilangan heksadesimal yang dikenal oleh mikrokontroler kita, yang merupakan representasi dari bahasa assembly yang telah kita buat. M nemonic atau o pcode 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 AT89C51 atau ke eksternal memori seperti AT28C64B menggunakan program downloader.