FAKULTAS TEKNOLOGI KOMUNIKASI DAN INFORMATIKA
UNIVERSITAS NASIONAL
SPESIFIKASI PERALATANHARDWARE
- PC Minimal P3-450 atau Laptop
- Modul Mikrokontroller (Dz - USB AVR+MCS ISP MKII) + Kabel Downloader
SOFTWARE
- Sistem Operasi Windows (98, Me atau XP SP2)
- Topview Simulator
SPESIFIKASI MIKROKONTROLLER (MCS-51)
Mikrokontroller AT89XX (MCS-51) memiliki spesifikasi sebagai berikut :
• 4 x 8 bit port I/O
• RAM internal 128 bytes
• Memiliki 2 buah Timer
• 1 buah port serial
• 5 sumber kendali interupsi
• Memiliki register-register fungsi khusus (SFR)
Susunan pin-pin dari mikrokontroller AT89XX dapat dilihat dari gambar berikut.
Konfigurasi PIN Mikrokontroller AT89XX
1. Kode Instruksi Mikrokontroller Type MCS-51 (256 Kode Instruksi)A. Pemindahan Data
Menyalin data dari suatu lokasi (sumber) ke lokasi lain (tujuan), tanpa terjadi perubahan isi data
pada lokasi sumber. Contoh : Mov
B. Aritmatika
Melaksanakan operasi aritmatika, meliputi penjumlahan, pengurangan, penambahan satu
(increment), pengurangan satu (decrement), perkalian dan pembagian.
Contoh : ADD, SUBB, INC, DEC
C. Logika dan Manipulasi Bit
Melaksanakan operasi-operasi logika pada accumulator dan manipulasi bit.
Contoh : AND, OR, CPL.
D. Percabangan
Mengubah urutan pelaksanaan program. Instruksi ini dibedakan atas percabangan bersyarat
(Contoh : CJNE) dan percabangan tanpa syarat (Contoh : ACALL).
E. Stack, I/O, dan Kontrol
Mengatur penggunaan stack, baca/tulis I/O, serta pengontrolan.
2. Teknik Pengalamatan Mikrokontrollera. Pengalamatan Langsung
Teknik pengalamatan langsung dilakukan dengan memberikan nilai ke suatu register secara
langsung. Pengalamatan langsung menggunakan simbol ”#”.
Contoh instruksi : MOV A,#01Hb. Pengalamatan Tidak Langsung
Teknik pengalamatan tidak langsung menunjuk ke sebuah register yang berisi lokasi alamat
memori yang akan digunakan dalam operasi. Lokasi yang sebenarnya tergantung pada isi register
saat instruksi dijalankan. Pengalamatan tidak langsung menggunakan simbol ”@”.
Contoh instruksi: ADD A,@R0 MOV @R0,#30H
c. Pengalamatan Bit
Teknik pengalamatan bit adalah penunjukkan alamat lokasi memori secara bit. Untuk melakukan
pengalamatan bit digunakan simbol titik ”.”.
Contoh instruksi: SETB P2.0 atau CLR P2.1
3. Perangkat Instruksi Mikrokontroller
1. ACALL (Absolute Call)
Instruksi ini digunakan untuk memanggil sub-sub rutin program
Format :
ACALL (alamat kode)
2. ANL (Logical AND Immediate Data)
Instruksi ini sebagai instruksi gerbang logika and, yang berfungsi sebagai
pengali data terhadap nilai yang ditentukan.
Format :
ANL A,#DATA
Contoh : ANL A,#0001000B
Ini berarti data acumulator akan dikalikan dengan 00010000 Biner
- Jika A bernilai 11100001 maka hasilnya adalah 00000000
- Jika A bernilai 11110001 maka hasilnya adalah 00010000
3. CJNE (Compare Indirect Address to Immediate Data)
Instrksi ini akan membandingkan data langsung dengan lokasi memori
yang dialamati oleh register R atau Akumulator A. apabila tidak sama
maka instruksi akan menuju ke alamat kode.
Format :
CJNE R,#data,Alamat kode atau CJNE A,#data,Alamat kode
4. CLR (Clear Accumulator)
Instruksi ini akan mereset data akumulator menjadi 00H.
Format :
CLR A
5. DEC (Decrement Indirect Address)
Instruksi ini akan mengurangi isi lokasi memori yang ditujukan oleh
register R dengan 1, dan hasilnya disimpan pada lokasi tersebut.
6. DJNZ (Decrement Register And Jump Id Not Zer)
Instruksi ini akan mengurangi nilai register dengan 1 dan jika hasilnya
sudah 0 maka instruksi selanjutnya akan dieksekusi. Jika belum 0 akan
menuju ke alamat kode.
Format : DJNZ Rr,Alamat Kode
7. INC (Increment Indirect Address)
Instruksi ini akan menambahkan isi memori dengan 1 dan menyimpannya
pada alamat tersebut.
Format : INC Rr
8. JB (Jump if Bit is Set)
Instruksi ini akan membaca data per satu bit, jika data tersebut adalah 1
maka akan menuju ke alamat kode dan jika 0 tidak akan menuju ke alamat
kode.
Format : JB alamat bit,alamat kode
9. JNB (Jump if Bit is Not Set)
Instruksi ini akan membaca data per satu bit, jika data tersebut adalah 0
maka akan menuju ke alamat kode dan jika 1 tidak akan menuju ke alamat
kode.
Format : JNB alamat bit,alamat kode
10. JMP (Jump to sum of Accumulator and Data Pointer)
Instruksi untuk memerintahkan loncat kesuato alamat kode tertentu.
Format : JMP alamat kode.
11. MOV
Instruksi ini untuk memindahkan isi akumulator/register atau data dari nilai
luar atau alamat lain.
Format :
- MOV a,#data (Memindahkan data ke accumulator)
- MOV R,A (Memindahkan Accumulator ke Register)
- MOV Px,Px (Memindahkan data port ke port)
12. ORL (Logical OR Immediate Data to Accumulator)
Instruksi ini sebagai instruksi Gerbang logika OR yang akan
menjumlahkan Accumulator terhadap nilai yang ditentukan.
Format : ORL A,#data
Contoh : ORL A,#0001000B
Ini berarti data acumulator dijumlahkan dengan 00010000 Biner
- Jika A bernilai 11100001 maka hasilnya adalah 11110001
- Jika A bernilai 11110001 maka hasilnya adalah 11110001
13. RET (Return from subroutine)
Intruksi untuk kembali dari suatu subrutin program ke alamat terakhir
subrutin tersebut di panggil.
Format : RET
14. SETB (Set Bit)
Instruksi untuk mengaktikan atau memberikan logika 1 pada sebuat bit
data.
Format : SETB P1.1 (memberikan logika 1 pada Port 1 bit ke 1)
15. CLRB (Clear Bit)
Instruksi untuk memberikan logika 0 pada sebuat bit data.
Format : CLR P1.1 (memberikan logika 0 pada Port 1 bit ke 1)
4. Struktur Program Assembler
$Mod51Org 00h…
………End
* Beberapa contoh aplikasi menggunakan LED (output)• Program membuat 1 bit LED berkedip
$Mod51Org 00hStart:
Setb P2.0Acall Two_Seconds_DelayClr P2.0Acall Two_Seconds_DelayAjmp Start
$Include(Tunda.asm)End
• Program membuat 2 kelompok LED berkedip$Mod51Org 00hStart:
Mov P2,#00001111bAcall Two_Seconds_DelayMov P2,#11110000bAcall Two_Seconds_DelayAjmp Start
$Include(Tunda.asm)End
• Program lampu LED berjalan$Mod51Org 00hStart:
Mov A,#01111111bLoop:
Mov P2,ARL A Acall Long_DelayAjmp Loop
$Include(Tunda.asm)End
* Beberapa contoh aplikasi menggunakan Tombol (input)• Program membaca input secara 1 Bit
$Mod51Org 00hStart:
Setb P2.0Loop:
Jb P3.0,StartClr P2.0Ajmp Loop
End• Program membaca input secara 1 Byte
$Mod51Org 00hStart:
Mov P2,P3Ajmp Start
End• Program ON/OFF dengan 1 Tombol
$Mod51Org 00hStart:
Jb P3.0,$Clr P2.0Jnb P3.0,$Acall Long_DelayJb P3.0,$Setb P3.0Jnb P3.0,$Acall Long_DelayAjmp Start
$Include(Tunda.asm)End
5. Cara membuat prosedur penundaan waktu (Delay)
Untuk membuat prosedure penundaan waktu dapat memanfaatkan pengurangan
nilai sebuah register, kita ketahui bahwa untuk 1 step program (siklus mesin) yang
dilakukan mikrokontroller adalah (Nilai Kristall / 12MHZ) sehingga jika kita
menggunakan nilai kristal 11,0592Mhz maka untuk satu siklus mesin
membutuhkan waktu 0.9216 uS.
;=====================================================
;Procedure penundaan waktu selama 255usx255us
;=====================================================
Long_Delay: ; Label Long_Delay
Mov R7,#0FFh ; Isikan Register 7 dengan data 0FFH(255)
Long_Delay_1: ; Label Long_Delay
Acall Delay ; Panggil Prosedure Delay
Djnz R7,Long_Delay_1 ;Kurangi Nilai Register7 (R7) dengan 1 jika belum sama
dengan 0 loncat ke prosedure Long_Delay_1
Ret
Delay: ; Label Delay
Mov R6,#0FFh ; Isikan Register 6 (R6) dengan data 0FFH (255)
Djnz R6,$ ; Kurangi Nilai Register6 (R6) dengan 1 jika belum
sama dengan 0 Terus kurangi. (waktu akan tertunda
selama 255 us)
Ret
6. Langkah-langkah mempergunakan software Topview Simulator
Membuka Program Notepad
Membuat file assembler baru
Menjalankan program Topview simulator
Melakukan setting Mikrokontroller
Setting memori Mikrokontroller
Tampilan Topview setelah melakukan setting Mikrokontroller
Proses mengambil file assembler
Open file assembler
Tampilan program assembler
Mengcompile program
Melakukan setting simulator
Setting Led dan 7 segment
Mengambil *.Hex program
Menampilkan simulator Led dan 7 segment
Tampilan simulator
Menjalankan simulator
Mematikan simulator
7. Program menghidupkan display 7 segment
abcdefg
DpCom
U?
7SEG
EA/VP31 X1 19
X2 18
RESET 9
P37/RD 17P36/W R 16
P32/INT0 12
P33/INT1 13
P34/T0 14
P35/T1 15
P10 1
P11 2
P12 3
P13 4
P14 5
P15 6
P16 7
P17 8
P0039
P0138
P0237
P0336
P0435
P0534
P0633
P0732
P2021
P2122
P2223
P2324
P2425
P2526
P2627
P2728
PSEN29 ALE/P30
P31/TXD 11P30/RXD 10
VC
C40
GN
D20 89C51
U?
CRYSTAL
10K1uF
VCC
VCC
VCC
VCC
10k
VCC
Rangkaian 7 Segment
Tabel Susunan pin 7segment terhadap port mikrokontroller:
Tampilan
Digit
PX.7 PX.6 PX.5 PX.4 PX.3 PX.2 PX.1 PX.0
Dot g f e d c b a Hex
0 1 1 0 0 0 0 0 0 C0H1 1 1 1 1 1 0 0 1 F9H2 1 0 1 0 0 1 0 0 A4H3 1 0 1 1 0 0 0 0 B0H4 1 0 0 1 1 0 0 1 99H5 1 0 0 1 0 0 1 0 92H6 1 0 0 0 0 0 1 0 82H7 1 1 1 1 1 0 0 0 F8H8 1 0 0 0 0 0 0 0 80H9 1 0 0 1 0 0 0 0 90H
Program menampilkan digit ”0” s/d ”9” pada modul 7 segment.$Mod51Start:Clr P0.1Loop:Mov P1,#11000000b ; Menampilkan Angka 0Acall Two_Seconds_Delay
Mov P1,#111111001b ; Menampilkan Angka 1Acall Two_Seconds_DelayMov P1,#10100100b ; Menampilkan Angka 2Acall Two_Seconds_DelayMov P1,#10110000b ; Menampilkan Angka 3Acall Two_Seconds_DelayMov P1,#10011001b ; Menampilkan Angka 4Acall Two_Seconds_DelayMov P1,#10010010b ; Menampilkan Angka 5Acall Two_Seconds_DelayMov P1,#10000010b ; Menampilkan Angka 6Acall Two_Seconds_DelayMov P1,#11111000b ; Menampilkan Angka 7Acall Two_Seconds_DelayMov P1,#10000000b ; Menampilkan Angka 8Acall Two_Seconds_DelayMov P1,#10010000b ; Menampilkan Angka 9Acall Two_Seconds_DelayJmp Loop$Include(Tunda.asm)End
Program menampilkan digit dengan mode scaning.
abcdefg
DpCom
U?
7SEG
EA/VP31 X1 19
X2 18
RESET 9
P37/RD 17P36/W R 16
P32/INT0 12
P33/INT1 13
P34/T0 14
P35/T1 15
P10 1
P11 2
P12 3
P13 4
P14 5
P15 6
P16 7
P17 8
P0039
P0138
P0237
P0336
P0435
P0534
P0633
P0732
P2021
P2122
P2223
P2324
P2425
P2526
P2627
P2728
PSEN29 ALE/P30
P31/TXD 11P30/RXD 10
VCC
40G
ND
20 89C51
11,059200
10K1uF
VCC
VCC
VCC
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
abcdefg
DpCom
U?
7SEG
VCC
4k7
P00
4k7
P01
4k7
P02
4k7
P03
4k7
P04
4k7P05
4k7
P06
4k7
P07
P01P02P03P04P05P06P07
P00
33p33p
Apa itu Scaning Mode?
Scaning mode merupakan sistem pengiriman data kepada beberapa alamat secara bergantian.
Pada modul tujuh-51 sistem scaning dimanfatkan untuk mengirimkan data kepada 8 buah sevent
segment.
Dengan mengatur penundaan waktu pengiriman data yang pas, maka akan menimbulkan efek
seolah-olah sevent segmen aktif dalam waktu yang bersamaan.
Bagaimana caranya?
Untuk menampilkan angka 123 pada segmen 0-2 prosesnya adalah sebagai berikut:
kirim data 1 ke seven segment dan aktifkan common segment 1
tunda waktu
kirim data 2 ke seven segment dan aktifkan common segment 2
tunda waktu
kirim data 3 ke seven segment dan aktifkan common segment 3
tunda waktu
langkah tersebut diatas harus likakukan terus dan berulang.
Program Menampilkan angka 1,2,3,4 pada display scaning
$Mod51
Start:
Loop:
Mov P0,#11111110b ;Mengaktifkan Common display 1
Mov P1,#0F9h ;Menampilkan Angka 1
Acall Delay
Mov P0,#11111101b ;Mengaktifkan Common display 2
Mov P1,#0A4h ;Menampilkan Angka 2
Acall Delay
Mov P0,#11111011b ;Mengaktifkan Common display 3
Mov P1,#0B0h ;Menampilkan Angka 3
Acall Delay
Mov P0,#11110111b ;Mengaktifkan Common display 4
Mov P1,#99h ;Menampilkan Angka 4
Acall Delay
Jmp Loop
$Include(Tunda.asm)End
Lampiran
Langkah membuat program
Kapasitas memori Mikro type AT89xx
File Tunda.asm berisi ?
;--- SUBROUTINE PROGRAM DELAY ---
Two_Seconds_Delay:
Mov R5,#0Ah ;PINDAHKAN DATA 0Ah KE REGISTER 5
Two_Seconds_Delay_1:
Acall Long_Delay ;PANGGIL SUB RUTIN LONG DELAY
Djnz R5,Two_Seconds_Delay_1 ;KURANGI DATA R5 DENGAN 1,JIKA HASILNYA TIDAK "0" LOMPAT KE SUB RUTIN TWO SECONDS DELAY 1
Ret ;KEMBALI KE YANG "ACALL" SUB RUTIN TWO SECONDS DELAY
Long_Delay:
Mov R7,#0FFh ;PINDAHKAN DATA 0FFh KE REGISTER 7
Long_Delay_1:
Acall Delay ;PANGGIL SUB RUTIN DELAY
Djnz R7,Long_Delay_1 ;KURANGI DATA R7 DENGAN 1,JIKA HASILNYA TIDAK "0" LOMPAT KE SUB RUTIN LONG DELAY 1
Ret ;KEMBALI KE YANG "ACALL" SUB RUTIN LONG DELAY
Delay:
Mov R6,#0FFh ;PINDAHKAN DATA 0FFh KE REGISTER 6
Djnz R6,$ ;KURANGI DATA R6 DENGAN 1,JIKA HASILNYA TIDAK "0" LOOPING DITEMPAT
Ret ;KEMBALI KE YANG "ACALL" DELAY