MIkROkONTROLER
KELUARGA MCS-51
Jobsheet
Disusun oleh :BAGIAN
1
Kompetensi Keahlian Kontrol Proses
Sekolah Menengah Kejuruan Negeri 1 CIMAHI
Jl. Maharmartanegara No 48
Arsitektur Mikrokontroler dan Keluarga
MCS 51
Banyak vendor dan produsen yang telah memproduksi mikrokontroler dengan berbagai jenis dan kemampuan, secara umum mikrokontroler merupakan sebuah mikrokomputer dimana didalamnya terdiri dari CPU, RAM, ROM dan Input/output (I/O). ATMEL telah memproduksi mikrokontroler AT89S51 yang termasuk keluarga MCS-51. Beberapa fitur dari mikrokontroler AT89S51 antara lain mempunyai Flash PEROM dengan kapasitas 4 kilo Byte, 32 bit programmable I/O, 2 x16 bit timer/counter, 128 x 8 RAM internal dan beberapa fitur lain. Programming (Pengisian Flas PEROM) mikrokontroler jenis ini kompatibel dengan keluarga MCS-51.
Beberapa jenis mikrokontroler buatan ATMEL dengan kapasitasnya dapat dilihat dalam tabel 1.1 berikut.
Tabel 1.1 Tipe IC Mikrokontroler Keluarga Atmel
Mikrokontroler Jumlah
Kaki Flash PEROM Jumlah I/O
AT89C1051 20 1 kbyte 15 bit
AT89C2051 20 2 kbyte 15 bit
AT89C4051 20 3 kbyte 15 bit
AT89S51 40 4 kbyte 4X8 bit
AT89C52 40 8 kbyte 4X8 bit
AT89S8252 40 8 kbyte +2 kbyte
EEPROM 4X8 bit
AT89S53 40 12 kbyte 4X8 bit
AT89S55 40 20 kbyte 4X8 bit
Konfigurasi hardware mikrokontroler AT89S51 di gambar 1.1 akan diperlihatkan. Dalam perancangan sebuah sistem elektronika, mikrokontroler dapat difungsikan untuk berbagai tujuan, misalnya untuk pengendali mesin mainan anak-anak, pengendali robotic, otomasi sensor untuk pengukuran suhu, cahaya, kelembaban dan sebagainya, pengendali pengukuran jarak jauh atau telemetri dan lain-lain.
Efektivitas penggunaan mikrokontroler akan sangat dirasakan apabila anda merancang system elektronika yang berbasis digital, fungsi-fungsi digital mayoritas dapat diakomodasi oleh komponen ini, misalnya saja fungsi counter, timer, Flip-flop (memori), AND, OR, dan lain-lain.
Mikrokontroler merupakan komponen yang dapat dikembangkan penggunaan dan fungsinya dimana sangat tergantung pada kemampuan dan penguasaan mind programmer-nya atas kapasitas dan kapabilitas komponen
Gambar. 1.1 Blok Diagram seri AT89S51
dan algoritma bahasa pemrograman yang dapat digunakan untuk pemrograman mikrokontroler.
Tentang bahasa pemrograman dan set instruksi MCS 51 akan dibahas pada Bagian 2 Modul ini.
1.1 Organisasi Memori
Struktur Memori dalam konfigurasi AT89S51 terbagi menjadi memori program (hanya baca) dan memori data (baca/tulis). Pembagian alamatnya seperti gambar 1.2 berikut ini.
Memori data atau memori program dalam mikrokontroler dapat juga diakses dari memori eksternal dengan memfungsikan strobe (tanda)PSEN
(Program Store Enable), RD(read), dan WR (write).
MemoriAT Program, Flash on chipAT89S51 sebesar 4 KB yang
alamatnya selalu 16 bit. Flash PEROM (Programmable and Erasable Read only
Memory) merupakan ROM yang dapat ditulis ulang atau dihapus menggunakan
sebuah perangkat programmer. Program yang ada pada flash PEROM akan dijalankan pada saat system di-reset, untuk keamanan program yang ada pada Flash PEROM AT89S51 mempunyai fasilitas lock bit yang terdiri dari:
Lock bit 1, instruksi MOVC yang diseksekusi dari memori eksternal untuk membaca isi Flash tidak dapat dilakukan.
Lock bit 2, sama dengan lock bit 1, tetapi isi dari flash PEROM tidak dapat diverivikasi oleh AT89S51 Programmer.
Lock bit 3, sama dengan lock bit 2, tetapi akses ke memori eksternal tidak dapat dilakukan.
Memori Data, RAM (Random Access Memory) internal pada AT89S51
terdiri atas :
Register Banks (bank register)
AT89S51 mempunyai delapan buah register yaitu R0 sampai dengan R7, kedelapan register ini selalu terletak pada alamat 00H hingga 07H pada setiap kali system direset.
Bit Addressable RAM
RAM pada alamat 20H hingga 2FH dapat diakses secara pengalamatan bit (per bit) sehingga hanya dengan sebuah instruksi saja setiap bit dalam area ini dapat di set, clear, AND dan OR.
RAM Keperluan Umum
RAM keperluan umum dimulai dari alamat 30H hingga 7FH dan dapat diakses dengan pengalamatan langsung maupun tidak langsung. Pengalamatan langsung dilakukan ketika salah satu operand dalam instruksi merupakan bilangan yang menunjukkan lokasi yang dialamati.
1.2 Special Function Registers (SFR)
Register Fungsi Khusus (SFR) pada mikrokontroler AT89S51 terlihat dalam tabel 1.2 berikut ini.
Tidak semua alamat pada SFR ini digunakan tetapi terdapat alamat-alamat yang tidak dipergunakan tidak diimplementasikan dalam chip.
SFR pada AT89S51 terdapat pada alamat antara 80H sampai FFH, beberapa dari register-hregister ini juga dapat dialamati per bit sehingga dapat dioperasikan seperti yang ada pada RAM yang lokasinya dapat dialamati dengan pengalamatan bit.
Berikut ini SFR –SFR ini akan dijelaskan sekilas. Akumulator
ACC atau akumulator yang menempati alamat E0H digunakan sebagai register untuk mengolah data pada operasi aritmatika dan logika dan menyimpanannya secara sementara, dalam program, instruksi mengacunya sebagai A (bukan ACC).
Tabel 2.1 Special Functions Registers AT89S51
128 bytes F8 FF F0 B F7 E8 EF E0 ACC E7 D8 DF D0 PSW D7
C8 (TCON) (T2MOD) (RCAP2L) (RCAP2H) (TL2) (TH2) CF
C0 C7 B8 IP BF B0 P3 B7 A8 IE AF A0 P2 A7 98 SCON SBUF 9F 90 P1 97 88 TCON TMOD TL0 TL1 TH0 TH1 8F 80 P0 SP DPL DPH PCON 87
Gambar 1.3 Program Status Word Register B
Register B (Lokasi F0H) dapat digunakan seperti register A pada operasi perkalian dan pembagian, untuk instruksi lain dapat diperlakukan sebagai register scratch pad (“papan corat-coret”) lainnya.
Program Status Word (PSW)
Register PSW (lokasi D0H) mengandung informasi status program, dalam PSW status yang tersimpan meliputi: carry bit, the auxiliary carry untuk operasi BCD), dua bit pemilih bank register, overflow flag, sebuah bit paritas dan dua flag status yang bias didefinisikan sendiri (user definable).
Stack Pointer
Register SP ini lokasinya 81H merupakan register dengan panjang 8 bit, digunakan dalam proses simpan dan ambil ke stack. Nilainya akan dinaikkan sebelum data disimpan menggunakan instruksi PUSH dan CALL.
Data Pointer
Data Pointer atau DPTR mengandung DPTR untuk byte tinggi (DPH) dan byte rendah (DPL) yang masing-masing berada dilokasi 83H dan 82H, bersama-sama membentuk register yang mampu menyimpan alamat 16 bit. Dapat dimanipulasi sebagai register 16 bit atau sebagai dua register 8 bit terpisah.
Port 0, Port 1, Port 2 dan Port 3
P0, P1,P2 dan P3 masing-masing pada lokasi 80H, 90H, A0H, dan B0H merupakan pengunci-pengunci (latches), yang digunakan untuk menyimpan data yang akan dibaca atau ditulis dari/ke port, untuk masing-masing Port 0, Port 1, Port2 dan Port 3.
Serial Data Buffer
SBUF atau serial data buffer (lokasi 99H) sebenarnya terdiri dari dua register yang terpisah yaitu penyangga pengirim (transmit buffer) dan penyanga penerima (receive buffer). Pada saat data disalin ke SBUF, maka data
BAGIAN
2
sesungguhnya dikirim ke penyangga pengirim sekaligus mengawali transmisi data serial. Sedangkan pada saat data disalin dari SBUF, maka sebenarnya data tersebut berasal dari penyangga penerima.
Timer Register
Pasangan register (TH0, TL0) dilokasi 8CH dan 8AH, (TH1 dan TL1) dilokasi 8DH dan 8BH serta (TH2, TL2) dilokasi CDH dan CCH merupakan register-register pencacah 16 bit untuk masing-masing Timer 0, Timer 1 dan Timer 2.
Control Register
Register register IP, IE, TMOD, TCON, T2CON, T2MOD, SCON dan PCON berisi kontrol dan status untuk sistem interupsi, Pencacah/Pewaktu dan port serial, akan dijelaskan pada pembahasan selanjutnya.
Pemrograman Assembly MCS51 dan Instruction Set
2.1 Teknik Merancang Program
Kriteria program yang baik adalah selain program dapat berjalan dengan baik, juga harus dapat ditelusuri untuk mempermudah pengembangan. Dalam prakteknya, pembuatan program biasanya diawali dengan membuat flowchart atau diagram alir, kemudian pseudo code dalam bahasa yang lebih dimengerti (misalnya pascal atau C) dan bahasa assembler (bahasa mesin).
Diagram alir digunakan untuk mengetahui terlebih dahulu apa yang harus dikerjakan sebelum mulai membuat program. Contoh diagram alir pada gambar 2.1 berikut.
Pseudo Code dari diagram alir diatas seperti berikut ini : ProsesX; If Hasil = X Then Begin ProsesX End Else Begin ProsesY End;
Struktur rancangan program biasanya terdiri dari:
Statement(pernyataan), menunjukkan dasar mekanisme dari “melakukan sesuatu” , seperti pemberian nilai pada variable atau memanggil sub rutin
Contoh :
Mov A,#00H ;memberi nilai pada akumulator Acall serOut ;memanggil sub ruti SerOut
Loops (Putaran), struktur putaran dilakukan untuk melakukan sebuah operasi yang dilakukan berulang-ulang. Berbagai macam struktur putaran biasanya dibentuk oleh While/Do atau Repeat/Until.
Gambar 2.2 Contoh Flowchart
While/Do
Contoh:
Psuedo Code dari Flowchart disamping sebagai berikut:
[jumlah = 0]
While [panjang>0] do begin [jumlah = jumlah +@pointer] [increment pointer] Decrement panjang] Program Assemmbly: Jumlah: Clr A Loop: Cjne R7,#0, Pernyataan Ajmp Keluar Pernyataan: Add A,”R0 Inc R0 Dec R7 Ajmp Loop Keluar: Ret
Choose (Pilihan), dua buah pernyataan seringkali digunakan dalam struktur ini adalah If/Then/Else dan Case/Of.
2.2 Pemrograman Assembly
Penulisan program Assembly terdiri dari beberapa bagian, berikut ini satu contoh penulisan program sumber Assembly
IsiMemori: Movx @DPTR,A ;Isi Akumulator ke alamat yang ditunjuk DPTR
Pembuatan program assembly dapat dilakukan dengan menggunakan software teks editor seperti Notepad, Editor DOS, Crimson Editor atau sejenisnya. Kumpulan baris-baris perintah kemudian disimpan (di-save) dengan ekstension “ .ASM”.
Penjelasan dari bagian-bagian program Assembly diatas seperti berikut ini:
Label
Label sangat berguna untuk memberi nama pada alamat-alamat yang dituju, pembuat program tidak harus mengetahui nilai alamat yang akan dituju
Label Mnemonic Operand1
cukup menunjuk label maka rutin atau baris perintah (instruksi) sudah dapat dilaksanakan. Terdapat beberapa ketentuan dalam pembuatan label yaitu :
Harus diawali dengan huruf
Tidak diperbolehkan terdapat label yang sama dalam satu program assembly
Maksimal 16 karakter
Tidak diperbolehkan adanya karakter spasi dalam penulisan label.
Mnemonic
Mnemonic atau operation code (opcode) adalah kode-kode yang akan dikerjakan oleh program assembler yang ada pada computer maupun mikrokontroler. Pada mikrokontroler instruksi yang akan dikerjakan tergantung dari jenis mikrokontroler yang digunakan.
Sedang Asembler directive sangat tergantung pada program assembler yang digunakan.
Operand
Operand merupakan pelengkap dari mnemonic, operand yang diperlukan oleh sebuah mnemonic bisa lebih dari satu, atau tidak memerlukan operand sama sekali.
Komentar
Komentar tidak mutlak diperlukan dalam sebuah program, tetapi seringkali komentar diperlukan untuk menjelaskan proses-proses kerja dari program atau catatan-catatan tertentu pada bagian-bagian program.
2.3 Ekspresi Assembler
Basis Bilangan, dalam pembuatan program operand dapat diekspresikan dalam berbagai bentuk, mikroprosesor Intel misalnya menggunakan akhiran “B” untuk ekspresi bilangan biner, “Q” untuk octal, “H” untuk heksa dan “D” untuk decimal. Misalnya 10 Desimal dapat diekspresikan dengan menuliskan :
00010101B ;biner 12Q ;octal
10D atau 10 (tanpa akhiran) ;decimal 0AH ;heksa
String Karakter, ekspresi string dilakukan dengan memberikan tanda „x„ diantara nilai yang diinginkan. Ekpresi ini sangat berguna untuk pembuatan program yang membutuhkan perintah dengan nilai ASCII dari suatu operand.
Misalnya : Mov A,#’B’
Operator Logika, ekspresi ini diperlukan dalam penulisan program yang memerlukan operasi logika. Operator logika itu antara lain
OR untuk operator logika OR AND untuk operator logika AND XOR untuk operator logika XOR
NOT untuk operator logika komplemen Contoh :
Mov A, #39H AND OFH adalah sama dengan Mov A,#9 Mov A,#-3 adalah sama dengan Mov A,#NOT 3 Operator Khusus, operator-operator ini terdiri dari: SHR untuk menggeser ke kanan
Contoh :
Mov A,#00001000B SHR 1 sama dengan Mov A,#00000100B
SHL untuk menggeser ke kiri Contoh:
Mov A,#00001000B SHL 1 sama dengan Mov A,#00010000B
HIGH untuk mengambil nilai byte tinggi
Mov A,#HIGH 1234H sama dengan Mov A,#12H
LOW untuk mengambil nilai byte rendah Contoh:
Mov A,#LOW 1234H sama dengan Mov A,#34H
() untuk operasi yang harus didahulukan Contoh:
Mov A,#(10+4) * 3 bilangan 10 desimal terlebih dahulu
dijumlahkan dengan 4 sebelum dikalikan dengan 3 karena adanya operator ().
2.4 Assembler Directive
Assembler Directive (Pengarah Assembler) merupakan mnemonic yang akan diproses oleh program Assembler. Berikut ini pengarah assembler yang biasa digunakan untuk program-program assembler.
ORG (Origin)
ORG digunakan untuk menunjukkan lokasi memori tempat instruksi atau perintah yang ada dibawahnya disimpan. Bentuk dari ORG adalah:
ORG ekspresi
Contoh : ORG 2000H
MOV DPTR,#4000H
Maka perintah MOV DPTR,#4000H yang berada dibawah ORG #2000H akan terletak dialamat 2000H.
END biasanya diletakkan diakhir baris dari file program sumber assembler sebagai tanda akhir pernyataan bagi program assembler dalam melakukan proses pemograman.
EQU (Equate)
EQU digunakan untuk mendefinisikan sebuah simbol atau lambang assembler secara bebas.
Contoh:
Bilangan EQU 50H
Mov A,#Bilangan
Bilangan pada instruksi “Mov A,#Bilangan” berisi 50H. BIT
Pengarah BIT digunakan untuk mendefinisikan suatu lambang yang menunjuk ke suatu lokasi bit pada memori yang dapat dialamati secara per bit.
Contoh:
Flag Bit 0 ;lambang Flag menunjuk ke lokasi 0 secara pengalamatan bit
DATA
Pengarah DATA digunakan untuk menyatakan secara langsung alamat pada memori internal dengan sebuah lambang. Alamat yang dimulai dari 00 hingga 7FH menunjukkan RAM internal dan alamat 80H hingga FFH menunjukkan alamat dari Register Fungsi Khusus.
Contoh :
BUFFER DATA 32H ;lambang Buffer menunjukkan alamat 32H IDATA
Sama seperti DATA tapi untuk pengalamatan tidak langsung. XDATA
Digunakan untuk menyatakan alamat yang ada pada memori eksternal alamatnya maksimal FFFFH.
CSEG, digunakan untuk memilih lokasi memori program
BSEG, untuk memilih lokasi memori yang dapat dialamati dengan pengalamatan bit
DSEG, digunakan untuk memilih lokasi memori RAM internal.
ISEG, digunakan untuk memilih lokasi RAM internal untuk pengalamatan tak langsung.
XSEG, digunakan untuk memilih lokasi di memori eksternal. DB (Define Byte)
Digunakan untuk memberi nilai tertentu pada memori di lokasi tersebut, contoh:
ORG 3000H DB 50H,51H
DB terletak di bawah ORG 3000H, data 50H dan 51H akan menempati lokasi di alamat 3000H dan 3001H.
DW (Define Word)
Biasanya diikuti dengan label dan berfungsi untuk memberi nilai 2 byte pada lokasi memori tempat DW dituliskan. Nilai 2 byte berasal dari alamat tempat label diberikan. Contoh:
ORG 2100H Lokasi1 : ORG 3000H
DW Lokasi1 ; alamat 3000H dan 3001H diisi dengan data 21H dan 00H.
DS (Define String)
DS selalu diikuti dengan angka dan berfungsi untuk menyediakan tempat sebesar angka tersebut dimulai dari alamat assembler directive ini berada. Contoh:
DSEG
ORG 50H
Memori1 DS 2 ; disediakan tempat sebesar 2 byte ; Mulai dari alamat 50H dari RAM DBIT
Digunakan untuk menyediakan tempat pada segmen Bit dan dapat digunakan jika segmen yang aktif adalah BSEG, contoh:
BSEG ; pilih segmen
PetaIO: DBIT 32 ; sediakan 32 bit buffer untuk i/o.
2.5 Sitem Pengalamatan
Sistem pengalamatan dalam pemrograman mikrokontroler terdiri dari beberapa jenis, berikut ini penjelasannya.
Pengalamatan Segera (immediately addressing)
Pengalamatan ini terjadi pada sebuah perintah ketika nilai operand merupakan data yanga akan diproses, biasanya selalu diawali dengan tanda ”#” (kres). Contoh:
Mov A,#05H ; data didefinisikan bernilai 05H Mov A,#data ; data dapat diisi dengan suatu angka
misalnya dengan Data EQU 5 Pengalamatan Langsung (direct addressing)
Digunakan untuk menunjuk data yang ada pada suatu lokasi memori dengan cara menyebut lokasi memori itu berada, misalnya perintah Mov A,50H instruksi ini berarti data yang berada pada lokasi 50H disalin ke akumulator.
Pengalamatan Tidak Langsung (indirect addressing)
Pengalamatan ini digunakan untuk mengakses data yang berada di dalam memori, tetapi memori tidak disebutkan secara langsung melainkan dititipkan ke register lain. Misalnya:
Mov A,@R0 ;memori yang alamat lokasinya ; tersimpan
; di R0 isinya disalin ke akumulator. Pengalamatan Register (register addressing)
pengalamatan ini menjadikan register serbaguna R0 sampai R7 sebagai tempat menyimpan data. Contoh :
Mov A,R0 ; data di R0 disalin ke akumulator Pengalamatan Kode (code addressing)
Pengalamatan ini dilakukan ketika operand merupakan alamat dari instruksi JUMP dan CALL (ACALL, JMP, LJMP dan LCALL). Biasanya operand tersebut akan menunjuk ke suatu alamat yang telah diberi label sebelumnya.
Misalnya:
Acall Delay ……….
Delay:
Mov B,#0FFH
Pada saat dijalankan program akan lompat menuju sub-rutin berada pada lokasi memori yang telah diberi label Delay.
Pengalamatan BIT (BIT addressing)
Digunakan untuk menunjuk alamat pada memori atau Register Fungsi Khusus yang mempunyai kemampuan diakses per bit.
Misalnya:
Setb P3.0 ;memberikan logika 1 pada bit ke 0 pada P3.
2.6 Instruction Set
Secara keseluruhan MCS-51 mempunyai 255 macam instruksi, instruksi-instruksi tersebut dikelompokkan manjadi sebagai berikut.
2.6.1 Kelompok Penyalinan Data
Instruksi dasar untuk kelompok ini adalah MOV, jika perintah MOV A,R7
ini selesai dikerjakan berarti data yang ada di akumulator A sama dengan data yang ada di R7 yang sebelumnya tersimpan di R7.
Pada memori data MOV dituliskan seperti berikut
Mov A,20H ;salin isi lokasi memori 20H ke ;akumulator
Mov A,@R1 ;salin isi lokasi yang ditunjuk R1 ;ke A
Untuk pemakain pada memori program penulisannya menjadi:
Movc A,@A+DPTR ;DPTR sebagai register tak langsung Movc A,@A+PC ;PC sebagai register tak langsung
Untuk memori eksternal hanya berlaku bagi mikrokontroler yang mendukung penggunaan memori eksternal, hanya ada 6 buah instruksi, yaitu:
Movx A,@DPTR Movx A,@R0 Movx A,@R1 Movx @DPTR,A Movx @R0,A Movx @R1,A
2.6.2 Kelompok Instruksi Aritmetik
Instruksi ADD dan ADDC
Kedua instruksi ini selalu melibatkan akumulator, jika isi akumulator dijumlahkan dengan suatu bilangan maka hasilnya akan kembali ditampung di akumulator. Perbedaan ADD dan ADDC apabila ADD melakukan operasi yang melebihi kapasitas 1 byte, maka Carry Flag di PSW akan menunjukkan angka 1. sedangkan ADDC nilai bit carry sebelumnya ikut dijumlahkan. Contoh penulisan instruksi ini sebagai berikut:
ADD A,R0 ; melalui register serbaguna R0 ADD A,#23H ; langsung dengan suatu bilangan ADD A,@R0 ; dengan isi memori yang ditunjuk R0 ADD A,P1 ; dengan isi register P1
Instruksi SUBB
Isi akumulator A dikurangi dengan satu bilangan (1 byte) beserta dengan bit Carry, hasil pengurangan akan ditampung kembali di Akumulator. Jika terjadi nilai pengurangan kurang dari „0‟ maka bit Carry akan bernilai „1‟. Contoh penulisannya adalah:
SUBB A,R0 ;A=A-R0-Carry SUBB A,#23H ;A=A-23H
SUBB A,@R1 ;A=A-[R1] R1 artinya isi dari R1 SUBB A,P0 ;A=A-P0
Instruksi DA A
Digunakan untuk mengubah nilai biner 8 bit yang tersimpan dalam akumulator menjadi 2 digit dalam format BCD digunakan setelah instruksi ADD, ADDC, atau SUBB.
Instruksi MUL AB
Bilangan biner dalam akumulator A dikalikan dengan bilangan biner 8 bit pada register B, hasil perkalian berupa bilangan biner 16 bit disimpan di B untuk 8 bit bagian atas (high byte) dan di akumulator A untuk 8 bit bagian bawah (low byte). Bit Overflow (OV) di PSW akan bernilai 1 jika register B bernilai bukan 00H. contoh operasinya:
Mov A,#20 Mov B,#10 MUL AB
Instruksi DIV AB
Instruksi pembagian bilangan di A oleh bilangan di B, OV akan bernilai „1‟ jika register B sebelumnya bernilai.
Instruksi DEC dan INC
DEC digunakan untuk menurunkan suatu nilai (I byte), yang tersimpan di A, register, nilai langsung atau tak langsung yang melalui register sebesar 1.
INC sebaliknya dari DEC yaitu menaikan nilainya sebesar 1. Contoh :
DEC A ; artinya A=A-1 DEC R0 ; artinya R0 = R0-1
DEC #50H ; artinya jumlahnya adalah 4FH DEC @R1 ; artinya R1-1
INC A ; artinya A=A+1 INC R0 ; artinya R0 = R0+1
INC #50H ; artinya jumlahnya adalah 51H INC @R1 ; artinya R1+1
2.6.3 Kelompok Instruksi Logika
Intstruksi yang terdapat pad kelompok ini antara lain operasi AND (ANL), OR (ORL), XOR (XRL), operasi clear (CLR), komplemen (CPL), pergeseran kanan atau kiri (RR, RL, RRC, dan RLC) serta instruksi penukaran data (SWAP). 2.6.4 Kelompok Instruksi JUMP
Instruksi dalam kelompok ini ada tiga yaitu LJMP (long jump), AJMP (absolute jump) dan SJMP (short jump) perbedaan dari ketiga jenis instruksi tersebut terletak pada luas jangkauan dalam memori program, dimana LJMP mampu menjangkau 64 Kilobyte sedangkan AJMP menjangkau daerah di 2 Kilobyte yang sama, dan SJMP menjangkau antara -128 sampai +127 byte. Nilai negative dapat digunakan untuk melompat ke instruksi sebelumnya. Proses yang dilakukan oleh ketiga instruksi ini persis sama.
2.6.5 Kelompok Instruksi Sub Rutin
Untuk berbagai pertimbangan mungkin saja dalam satu rutin program diperlukan rutin yang menyimpan potongan program, untuk memanggil sub-rutin dapat menggunakan instruksi LCALL, ACALL, dan SCALL jangkauannya setara dengan instruksi JUMP. Untuk kembali pada program sebelumnya setelah instruksi terakhir sub-rutin digunakan instruksi RET.
2.6.5 Kelompok Instruksi Lompatan Bersyarat
Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if Not Zero) instruksi Jump untuk memantau nilai akumulator, perhatikan contoh berikut ini:
MOV A,#0 JNZ BukanNol JZ Nol ……… BukanNol: ……… Nol: ………….
Dalam contoh tersebut MOV A,#0 menjadika akumulator berisi „0‟, hal ini mengakibatkan instruksi JNZ Bukan Nol tidak dikerjakan, sedangkan JZ Nol akan terus dikerjakan karena syaratnya dipenuhi.
Instruksi JC/JNC
Instruksi JC (Jump on Carry) /JNC (Jump on Not Carry) digunakan untuk memantau bit Carry pada Program Status Word (PSW).
Instruksi JB / JNB / JBC
Instruksi JB (Jump on Bit Set), JNB (Jump on Not Bit set) dan JBC (Jump
on Bit Set Then Clear Bit) digunakan untuk memantau bit-bit tertentu, bisa
berupa register-register status tertentu atau bit masukan mikrokontroler.
Instruksi DJNZ dan CJNE
DJNZ (Decrement and Jump if Not Zero) merupakan instruksi yang akan mengurangi 1 nilai register serbaguna (R0 sampai R7) atau memori data dan akan melompat ke memori program yang dituju jika setelah 1 tersebut hasilnya belum nol. Berikut ini contoh penulisannya:
MOV R0,#23H DJNZ R0,$
R0 akan dikurangi 1 hingga R0 belum nol maka pengurangan akan terus diulangi.
CJNE (Compare And Jump If Not Equal) membandingkan dua nilai yang disebut MCS dan akan melompat ke memori program yang dituju jika kedua nilai tersebut tak sama.
Lebih lengkap mengenai instruction set MCS-51 dapat dibaca dalam lampiran tentang MCS51 Set Instruction.
2.7 Microcontroller USB-MCS51 Software dan ProsesPemograman Source
Code
Software ini dikembangkan oleh Thomas Fischl yang dapat secara lengkap didownload baik aplikasi dan rangkaiannya pada alamat
http://www.fischl.de/usbasp/ berfungsi sebagai downloader program
yang berbasiskan antarmuka (interface) USB pada PC kedalam mikrokontroler. Berikut ini langkah-langkah pembuatan dan download program source: 1. Jalankan aplikasi Pinnacle51, Mide51, atau aplikasi programmer lainnya
BAGIAN
3
2. Buat folder baru didalam windows explorer, khusus untuk program mikrokontroler.
3. Membuat Program sumber (source program) dengan bahasa Assembler pada text editor seperti Notepad, Pinnacle51, Mide51 Crimson Editor, dll. 4. Simpan program sumber yang sudah dibuat pada pada folder yang
khusus mikrokontroler dengan extention file”.asm”.
5. Lakukan proses kompilasi dengan compileryang tersedia pada aplikasi Pinnacle sehingga menghasilkan file Heksa dengan extention file”.hex” 6. Jalankan aplikasi progisp v1.68 Software portable yang ada dalam folder
windows explorer.
7. Buka folder dimana program berkestensi “.hex”. disimpan,
8. Lakukan proses flash programmer dengan menekan toolbar”write to chip “ pada aplikasi progisp v1.68.
Aplikasi Port Paralel Mikrokontroler AT89S51
Dan Percobaan
Pada bagian ini kita akan mencoba mengaplikasikan mikrokontroler AT89S51 yang telah terintegrasi dalam modul MDSR Ver. 0, modul disiapkan untuk melakukan percobaan pemrograman mikrokontroler, beberapa komponen yang di-interfacing dengan AT89S51 ini antara lain LED, Seven Segmen, Switch dan Keypad.
Tetapi sebelum memasuki percobaan kita akan melihat sekilas tentang konfigurasi pin mikrokontroler AT89S51 untuk mengetahui pola pengawatan (wiring) dalam Modul MDSR ver. 0 ini.
3.1 Konfigurasi Pin AT89S51
AT89S51 terdiri dari beberapa bentuk package, seperti gambar diatas, tetapi yang banyak dipasaran berbentuk PDIP 40 pin. Fungsi dari pin-pin tersebut bisa dijelaskan dalam table berikut ini:
Tabel 3.1 Tabel Fungsi Pin AT89S51 Gambar 3.1 Konfigurasi Pin AT89S51
20 VCC Tegangan supply bagi mikrokontroler
GND Ground
Port 0 (P0) Port I/O dua arah 8 bit dengan konfigurasi open drain, umumnya memerlukan pull-up
Port 1 & Port 2 (P1 &P2)
Port I/O dua arah 8 bit dengan internal pull-up
Port 3 (P3) Port I/O dengan 8 bit dan internal pull-up, tetapi mempunyai fungsi alternatif yaitu :
P3.0 RXD (port input serial) P3.1 TXD (port output serial) P3.2 INT0 (interrupt eksternal 0) P3.2 INT1 (interrupt eksternal 1) P3.4 T0 (input eksternal timer 0) P3.5 T1 (input eksternal timer 1)
P3.6 WR (strobe penulisan untuk memori data eksternal) P3.7 RD (strobe pembacaan untuk memori data eksternal)
RST Input reset, kondisi high selama dua siklus mesin akan mengembalikan program pada alamat 0000H
XTAL1, XTAL2 Input untuk internal clock, pin ini dihubungkan dengan kristal
EA Eksternal Akses, untuk memfungsikan memori internal maka pin ini diberi logaki high dan apabila mengakses memori eksternal pin ini diberi logika low 3.2 Blok Diagram MODUL DASAR
Secara umum modul MDSR Ver.0 ini mempunyai blok diagram seperti berikut ini:
3.3 Blok Diagram MODUL ADVANCE Ver. 0
Gambar 3.2 Diagram Blok MDSR Ver.0
P0.0 – P0.7
ADC0804 LCD 16 Char Kolom LED Marix
(P0.0-P0.4) P1.0 – P1.7
Baris LED Matrix (P1.0 – P1.6)
SEKOLAH MENENGAH KEJURUAN NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri Jurusan Kontrol Proses
No. Form. : F:ISO-KUR-06
Job Sheet Mikrontroler Dasar 1
Jl. Mahar Martanegara No. 48 Kota Cimahi
Pemrograman LED 8 Bit 1. Tujuan Kegiatan Belajar
- Siswa dapat memahami penggunaan port pada AT89S51 sebagai output - Siswa mampu merancang program assembler untuk mengendalikan LED
- Siswa mampu membuat minimum system pengendali LED dengan menggunakan AT89S51
2. Materi
Seperti digambarkan pada diagram blok diatas LED terhubung dengan Port 0 (P0.0 sampai dengan P0.7), contoh program berikut ini dibuat untuk LED pada posisi Port 0. P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 vcc
Gambar 3.3. Hubungan led terhadap port I/O mikrokontroller
Lampu flip-flop pada Port 0
Program1
$mod51
org 0
Mulai: mov P0,#0 ; Led nyala
call Delay ; panggil subrutin Delay
mov P0,#0ffh ; Led padam
call Delay ; panggil subrutin Delay
jmp Mulai ; lompat ke label mulai
Delay: mov R7,#50 ; Isi register R7 dengan 50
Delay1: mov R6,#100 ; Isi register R6 dengan 100
Delay2: mov R5,#100 ; Isi register R5 dengan 100
Delay3: djnz R5,Delay3 ; kurangi R5 dengan 1, bila hasil
ke Delay3
djnz R6,Delay2 ; kurangi R6 dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay2
djnz R7,Delay1 ; kurangi Rl dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay1
ret ; Keluar dari subrutin
end
Lampu flip-flop nible atas dan nible bawah Program2
$mod51
ORG 0H
MULAI: Mov P0,#00001111B ; LED P0.4 s/d P0.7 nyala
CALL DELAY ; panggil subrutin Delay
Mov P0,#11110000B ; LED P3.0 s/d P3.3 nyala
CALL DELAY ; panggil subrutin Delay
Sjmp MULAI ; lompat ke label mulai
;
Delay: mov R7,#50 ; Isi register R7 dengan 50
Delay1: mov R6,#100 ; Isi register R6 dengan 100
Delay2: mov R5,#100 ; Isi register R5 dengan 100
Delay3: djnz R5,Delay3 ; kurangi R5 dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay3
djnz R6,Delay2 ; kurangi R6 dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay2
djnz R7,Delay1 ; kurangi Rl dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay1
ret ; Keluar dari subrutin
end
Running led dari kanan ke kiri
Program3
$mod51 org 0 Mulai:
mov a,#0ffh ; Isi register accumulator dengan
; FFh
clr c ; Nolkan carry flag
Loop: mov P0,a ; Pindahkan isi register
; accumulator ke P0
call Delay ; Panggil subrutin Delay
rlc a ; Geser ke kiri isi register
; accumulator dengan carry
Delay: mov R7,#50 ; Isi register R7 dengan 50
Delay1: mov R6,#100 ; Isi register R6 dengan 100
Delay2: mov R5,#100 ; Isi register R5 dengan 100
Delay3: djnz R5,Delay3 ; kurangi R5 dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay3
djnz R6,Delay2 ; kurangi R6 dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay2
djnz R7,Delay1 ; kurangi Rl dengan 1, bila hasil
; belum sama dengan 0 maka lompat ke Delay1
ret ; Keluar dari subrutin
end
3. Langkah Kerja
- Buat program 1 pada text editor (notepad, pinnacle, crimson editor), kemudian simpan file tersebut dengan nama file LED dengan ekstensi .asm pada folder khsusus*.
- Lakukan pengkonversian (meng-compile) file tersebut ke bentuk hexa (.hex) dengan menggunakan ASM51.exe atau langsung pada aplikasi yang telah tersedia compilernya.
- Hubungkan AT89S51 downloader ke PC melalui port parallel / serial. - Jalankan aplikasi Atmel ISP programmer pada PC.
- Download file yang berekstensi .hextersebut ke dalam IC AT89S51 dengan menggunakan aplikasi Atmel ISP programmer.
- Run target pada Atmel ISP programmer untuk menjalankan hasil yang telah deprogram.
- Ulangi langkah di atas untuk mencoba program 2 dan 3.
4. Analisa
- Catat perubahan yang dikeluarkan setelah program 1, 2 dan 3 dijlankan**. - Buat program running led dari kiri ke kanan**!
- Buat program running led secara pingpong**!
- Buat program running led dari luar ke dalam dan dari dalam keluar**! - Buat program kombinasi dari seluruh program yang telah dibuat**.
5. Kesimpulan
Buat kesimpulan yang diperoleh pada saat praktek**
Keterangan:
* Folder baru yang di dalamnya terdapat file ASM51.exe dan file Mod51 ** Dibuat dalam bentuk laporan praktikum
SEKOLAH MENENGAH KEJURUAN NEGERI 1 CIMAHI
Kelompok : Teknologi & Industri Jurusan Teknik Pendinginan & Tata Udara Jl. Mahar Martanegara No. 48 Kota Cimahi
Job Sheet Mikrontroler Dasar 2
Pemrograman Display Seven Segmen 1. Tujuan Kegiatan Belajar
- Siswa dapat memahami penggunaan port pada AT89S51 sebagai output - Siswa mampu merancang program assembler untuk mengendalikan 7-Segmen - Siswa mampu membuat minimum system pengaturan display 7-Segmen dengan
menggunakan AT89S51 2. Materi P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 a b c d e g f dot vcc vcc
Gambar 3.4. Susunan hubungan 7 segmen dengan port I/O mikrokontroller
Program menampilkan angka 0-9 Program1
$mod51
org 0
Mulai:
mov P2,#0c0h ; keluarkan data angka nol ke P2
call delay ; panggil sub rutin delay
mov P2,#0f3h ; keluarkan data angka satu ke P2
call delay ; panggil sub rutin delay
mov P2,#089h ; keluarkan data angka dua ke P2
call delay ; panggil sub rutin delay
mov P2,#0a1h ; keluarkan data angka tiga ke P2
call delay ; panggil sub rutin delay
mov P2,#0b2h ; keluarkan data angka empat ke P2
call delay ; panggil sub rutin delay
call delay ; panggil sub rutin delay
mov P2,#084h ; keluarkan data angka enam ke P2
call delay ; panggil sub rutin delay
mov P2,#0f1h ; keluarkan data angka tujuh ke P2
call delay ; panggil sub rutin delay
mov P2,#080h ; keluarkan data angka delapan ke
P2
call delay ; panggil sub rutin delay
mov P2,#0a0h ; keluarkan data angka sembilan ke P2
call delay ; panggil sub rutin delay
sjmp Mulai delay: mov r7,#100 delay_1: mov r6,#100 delay_2: mov r5,#100 djnz r5,$ djnz r6,delay_2 djnz r7,delay_1 ret end
Program menampilkan angka 0-9 dengan metode Look Up Table Program2
$mod51
org 0
Mulai:
mov R4,#10 ; isi register R4 dengan 10
mov Dptr,#Tabel_Data ; isi register DPTR dengan alamat
; yang ditunjukkan label Tabel_Data Loop:
clr a ; nolkan isi akumulator
movc a,@a+dptr ; copy data ke akumulator dari ; lokasi
; memori program yang ditunjukkan ; oleh isi akumulator ditmbah ; dengan isi DPTR
mov p2,a ; keluarkan data ke P2
call delay ; panggil sub rutin delay
inc dptr ; isi DPTR +1
djnz r4,Loop ; kurangkan isi R4 dengan 1 dan
; lompat ke label Loop jika isi R4 ; tidak nol
sjmp Mulai Tabel_Data:
db
delay: mov r7,#100 delay_1: mov r6,#100 delay_2: mov r5,#100 djnz r5,$ djnz r6,delay_2 djnz r7,delay_1 ret end
Program menampilkan angka A-F dengan metode Look Up Table Program3 $mod51 org 0 mov R4,#6 mov Dptr,#Tabel_Data Loop: clr a movc a,@a+dptr mov p2,a call delay inc dptr djnz r4,Loop sjmp 0 ; Tabel_Data: db 090h,086h,0cch,83h,8ch,9ch ; delay: mov r7,#100 delay_1: mov r6,#100 delay_2: mov r5,#100 djnz r5,$ djnz r6,delay_2 djnz r7,delay_1 ret end 3. Langkah Kerja
- Buat program 1 pada text editor (notepad, pinnacle, crimson editor), kemudian simpan file tersebut dengan nama file Seven-Segment dengan ekstensi .asm pada folder khsusus*.
- Lakukan pengkonversian (meng-compile) file tersebut ke bentuk hexa (.hex) dengan menggunakan ASM51.exe atau langsung pada aplikasi yang telah tersedia compilernya.
- Hubungkan AT89S51 downloader ke PC melalui port parallel / serial. - Jalankan aplikasi Atmel ISP programmer pada PC.
- Download file yang berekstensi .hextersebut ke dalam IC AT89S51 dengan menggunakan aplikasi Atmel ISP programmer.
- Run target pada Atmel ISP programmer untuk menjalankan hasil yang telah deprogram.
- Ulangi langkah di atas untuk mencoba program 2 dan 3.
4. Analisa
- Catat perubahan yang dikeluarkan setelah program 1, 2 dan 3 dijlankan**. - Buat program menampilkan hitungan mundur**.
- Buat program menampilkan hitungan 0-99**.
5. Kesimpulan
Buat kesimpulan yang diperoleh pada saat praktek**
Keterangan:
* Folder baru yang di dalamnya terdapat file ASM51.exe dan file Mod51 ** Dibuat dalam bentuk laporan praktikum
NEGERI 1 CIMAHI
Kelompok : Insrtrumentasi Industri Jurusan Kontrol Proses
Jl. Mahar Martanegara No. 48 Kota Cimahi
Job Sheet Mikrontroler Dasar 3
Pemrograman Input Switch 1. Tujuan Kegiatan Belajar
- Siswa dapat memahami penggunaan port pada AT89S51 sebagai I/O
- Siswa mampu merancang program assembler untuk mengendalikan LED dan 7-Segmen dengan input switch
- Siswa mampu membuat minimum system pengaturan LED dan display 7-Segmen dengan menggunakan AT89S51
2. Materi P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 vcc
Gambar 3.5. Susunan hubungan switch I/O dengan port I/O mikrokontroller
Program menghidup-matikan led dengan switch I/O Program1
$mod51
org 0
Mulai:
mov a,P3 ; copy data P3 ke akumulator
cjne a,#0fbh,Terus ; bandingkan isi akumulator
; dengan FBh
; dan lompat ke label Terus
; jika tidak sama,jika sama
; eksekusi program dibawahnya
mov P0,#0 ; nyalakan led
sjmp Mulai ; lompat ke awal program
Terus:
cjne a,#0f7h,Mulai ; bandingkan isi akumulator
; dan lompat ke label Mulai
; jika tidak sama,jika sama
; eksekusi program dibawahnya
mov P0,#0ffh ; matikan led
sjmp Mulai ; lompat ke awal program
end
Progam toggle switch Program2
$mod51
org 0
Mulai:
mov a,P3 ; copy data P3 ke a
cjne a,#0fbh,Mulai ; bandingkan isi akumulator
dengan FBh
; dan lompat ke label Mulai
; jika tidak sama,jika sama
; eksekusi program dibawahnya
cjne r0,#0,Terus ; bandingkan isi R0 dengan 0 dan
lompat ke
; label Terus jika tidak sama, ; jika sama
; eksekusi program dibawahnya
mov r0,#1 ; isi R0 dengan 1
mov P0,#0 ; nyalakan led
Tunggu:
mov a,P3 ; copy data P3 ke a
cjne a,#0ffh,Tunggu ; tunggu hingga tombol-tekan dilepas
sjmp Mulai ; lompat ke awal program
Terus:
mov r0,#0 ; isi R0 dengan 0
mov P0,#0ffh ; matikan led
sjmp Tunggu ; lompat ke label tunggu
end P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 a b c d e f g dot vcc vcc
Gambar 3.6. Susunan switch I/O dengan port I/O mikrokontroller dan 7 seg
Program counter berdasarkan input switch Program3 $mod51 org 0 mov r0,#0 Mulai: mov a,P3 cjne a,#0fbh,Mulai call Delay Tunggu: mov a,P3 cjne a,#0ffh,Tunggu call Delay inc r0 cjne r0,#10,Lanjut mov r0,#0 Lanjut: cjne r0,#0,Banding1 mov P2,#0c0h sjmp Mulai Banding1: cjne r0,#1,Banding2 mov P2,#0f3h sjmp Mulai Banding2: cjne r0,#2,Banding3 mov P2,#089h sjmp Mulai Banding3: cjne r0,#3,Banding4 mov P2,#0a1h sjmp Mulai Banding4: cjne r0,#4,Banding5 mov P2,#0b2h sjmp Mulai Banding5: cjne r0,#5,Banding6 mov P2,#0a4h sjmp Mulai Banding6: cjne r0,#6,Banding7 mov P2,#084h sjmp Mulai
Banding7: cjne r0,#7,Banding8 mov P2,#0f1h sjmp Mulai Banding8: cjne r0,#8,Banding9 mov P2,#080h sjmp Mulai Banding9: cjne r0,#9,Mulai mov P2,#0a0h sjmp Mulai Delay: mov r7,#100 Delay1: mov r6,#200 djnz r6,$ djnz r7,Delay1 ret end 3. Langkah Kerja
- Buat program 1 pada text editor (notepad, pinnacle, crimson editor), kemudian simpan file tersebut dengan nama file Switch dengan ekstensi .asm pada folder khsusus*.
- Lakukan pengkonversian (meng-compile) file tersebut ke bentuk hexa (.hex) dengan menggunakan ASM51.exe atau langsung pada aplikasi yang telah tersedia compilernya.
- Hubungkan AT89S51 downloader ke PC melalui port parallel / serial. - Jalankan aplikasi Atmel ISP programmer pada PC.
- Download file yang berekstensi .hextersebut ke dalam IC AT89S51 dengan menggunakan aplikasi Atmel ISP programmer.
- Run target pada Atmel ISP programmer untuk menjalankan hasil yang telah deprogram.
- Ulangi langkah di atas untuk mencoba program 2 dan 3.
4. Analisa
- Catat perubahan yang dikeluarkan setelah program 1, 2 dan 3 dijlankan**.
- Buat program running led dari kanan ke kiri jika salah salah satu switch ditekan dan running led dari kiri ke kanan jika switch lainnya ditekan.
- Buat program nyala led per step jika salah satu switch ditekan dan padam led per step jika switch lainnya ditekan.
- Buat program Up-Down binary counter (4 bit) ditampilkan di LED. - Buat program Up-Down decade counter ditampilkan ke 7 segmen.
5. Kesimpulan
Keterangan:
* Folder baru yang di dalamnya terdapat file ASM51.exe dan file Mod51 ** Dibuat dalam bentuk laporan praktikum
SEKOLAH MENENGAH KEJURUAN NEGERI 1 CIMAHI
Kelompok : Insrtrumentasi Industri Jurusan Kontrol Proses
Jl. Mahar Martanegara No. 48 Kota Cimahi
No. Form. : F:ISO-KUR-06
Job Sheet Mikrontroler Dasar 4
Pemrograman Keypad 1. Tujuan Kegiatan Belajar
- Siswa mampu merancang program assembler untuk mengendalikan 7-Segmen dengan input keypad
- Siswa mampu membuat minimum system pengaturan display 7-Segmen melalui keypad dengan menggunakan AT89S51
2. Materi P1.0 P1.1 P1.2 P1.3 P3.4 P3.5 P3.6 P3.7 1 2 3 A B C D E 0 F 4 5 6 7 8 9
Gambar 3.7. Susunan konfigurasi keypad matrik
P1.0 P1.1 P1.2 P1.3 P3.4 P3.5 P3.6 P3.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 a b c d e f g dot vcc vcc
Gambar 3.8. Susuna keypad matrik dengan 7 segmen
Program menampilkan 0-9 dan A-F Program1 $mod51 org 0 Mulai: mov P1,#0f7h jb P3.7,Key1 mov P2,#0f3h sjmp Mulai Key1:
jb P3.6,Key2 mov P2,#089h sjmp Mulai Key2: jb P3.5,Key3 mov P2,#0a1h sjmp Mulai Key3: jb P3.4,Key4 mov P2,#090h sjmp Mulai Key4: mov P1,#0fbh jb P3.7,Key5 mov P2,#0b2h sjmp Mulai Key5: jb P3.6,Key6 mov P2,#0a4h sjmp Mulai Key6: jb P3.5,Key7 mov P2,#084h sjmp Mulai Key7: jb P3.4,Key8 mov P2,#086h sjmp Mulai Key8: mov P1,#0fdh jb P3.7,Key9 mov P2,#0f1h sjmp Mulai Key9: jb P3.6,Key10 mov P2,#080h sjmp Mulai Key10: jb P3.5,Key11 mov P2,#0a0h sjmp Mulai Key11: jb P3.4,Key12 mov P2,#0cch sjmp Mulai Key12: mov P1,#0feh jb P3.7,Key13 mov P2,#09ch sjmp Mulai Key13: jb P3.6,Key14
mov P2,#0c0h sjmp Mulai Key14: jb P3.5,Key15 mov P2,#08ch ljmp Mulai Key15: jb P3.4,Key16 mov P2,#083h ljmp Mulai Key16: ljmp Mulai end
Program menampilkan 0-9 dan A-F dengan metode Look Up Table Program2 $mod51 org 0 Mulai: mov 73h,#4 mov r5,#0f7h mov DPTR,#Angka mov 71h,#0 Ulang: mov 70h,#07fh mov 72h,#0 Ulang1: mov P1,r5 mov a,P3 call delay mov a,P3 cjne a,70h,Geser1 mov a,72h add a,71h movc a,@a+DPTR mov P2,a sjmp Mulai Geser1: inc 72h mov a,70h RR a mov 70h,a mov a,72h cjne a,#4,Ulang1 NextScan: mov a,71h add a,#4 mov 71h,a
mov a,r5 RR a mov r5,a djnz 73h,Ulang mov P0,#0ffh ljmp mulai Delay: mov r7,#50 Delay1: mov r6,#100 djnz r6,$ djnz r7,Delay1 ret Angka: db 0f3h,89h,0a1h,090h db 0b2h,0a4h,84h,086h db 0f1h,80h,0a0h,0cch db 9ch,0c0h,8ch,83h end 3. Langkah Kerja
- Buat program 1 pada text editor (notepad, pinnacle, crimson editor), kemudian simpan file tersebut dengan nama file Keypad dengan ekstensi .asm pada folder khsusus*.
- Lakukan pengkonversian (meng-compile) file tersebut ke bentuk hexa (.hex) dengan menggunakan ASM51.exe atau langsung pada aplikasi yang telah tersedia compilernya.
- Hubungkan AT89S51 downloader ke PC melalui port parallel / serial. - Jalankan aplikasi Atmel ISP programmer pada PC.
- Download file yang berekstensi .hextersebut ke dalam IC AT89S51 dengan menggunakan aplikasi Atmel ISP programmer.
- Run target pada Atmel ISP programmer untuk menjalankan hasil yang telah deprogram.
- Ulangi langkah di atas untuk mencoba program 2.
4. Analisa
- Catat perubahan yang dikeluarkan setelah program 1, 2 dijalankan**.
- Buat program penampilan angka 0-9 dan huruf A-F pada display 7 segmen sebagaimana susunan keypad pada pesawat telepon.
5. Kesimpulan
Keterangan:
* Folder baru yang di dalamnya terdapat file ASM51.exe dan file Mod51 ** Dibuat dalam bentuk laporan