SEMESTER 4
I. TUJUAN
1. Mampu memprogramkan mikrokontroler MCS-51 untuk bekerja menampilkan angka
desimal pada 7-segment (angka BCD).
2. Mampu membuat program delay menggunakan bahasa assembler MCS-51.
3. Mampu menghubungkan perangkat lunak MCS-51 dengan rangkaian hardware.
II. TEORI
Percobaan ini menggunakan tampilan 7-segmen dua digit (DS3 - DS4) dari MTS-51 Trainer
untuk menampilkan angka desimal. Karena dekoder BCD-ke-7-segmen/driver dibangun di
dalam Trainer, nilai BCD yang akan ditampilkan harus ditulis ke port 2. Jalur I/O P2.3-P2.0
adalah input dari DS4 (unit digit) dan jalur P2.7-P2.4 adalah input dari DS3 (digit puluhan).
Rujuk ke rangkaian di Gbr. 4-2-2 untuk detailnya. Perhatikan bahwa sakelar SW2_3 harus
ditempatkan di posisi ON posisi ON.
Gambar 4-2-2
Deskripsi Fungsional:
Penghitung Dua Digit ke atas secara berurutan dan berulang-ulang tampilkan angka 00
hingga 99 pada DS3 dan DS4. Setiap angka bertahan selama 0,5 detik.
Deskripsi Program:
Nilai hitungan awal 00H dimuat ke A dan ditulis ke P2. Setelah 0,5 detik, isi A ditambah satu
dan hasil biner dikonversi ke nilai BCD menggunakan instruksi DA A. Kemudian CPU
melompat ke NEXT untuk mengulangi rutinitas keluaran.
Jika Anda ingin menghentikan penghitung ketika mencapai 99, ganti instruksi JMP NEXT
dengan instruksi berikut.
Perhitungan penundaan
Penundaan subrutin penundaan sama dengan hasil kali total siklus mesin dan waktu siklus
mesin sebagai berikut:
Total siklus mesin = 1+200x(1+249x2+2)+2 =100.203. Karena frekuensi osilator Alat Peraga
MTS-51 adalah 12 MHz, 1 s setiap siklus mesin, maka total penundaan sama dengan 0,1
detik (=100.203 x 1s =100.203 s).
Dua register R6 dan R7 digunakan dalam perulangan bersarang. Jika penundaan 0,5 detik
diperlukan, nilai awal penghitung-R5 harus ditetapkan ke lima seperti yang tercantum di
bawah ini:
III. PERALATAN :
1. Modul/Trainer MTS-51
2. Emulator 8051
2.
3.
4.
5.
HASIL
Berikan penjelasan untuk percobaan diatas (
Percobaan di atas adalah contoh kode bahasa assembly yang ditulis untuk sebuah mikrokontroler
atau sistem terbenam serupa. Kode ini bertujuan untuk mengulangi proses peningkatan nilai A,
menampilkan nilai A ke port P22, dan menunda eksekusi selama 0,5 detik menggunakan subrutin
"DELAY".
1. "ORG 000H" menandakan bahwa kode ini akan mulai dieksekusi dari alamat memori 000H.
2. "MOV A, 00H" memindahkan nilai 00H ke dalam akumulator (register A). Register A
adalah register khusus yang digunakan untuk operasi aritmetika dan logika.
3. Label "NEXT" menandakan awal dari loop.
4. "MOV P22, A" memindahkan nilai dari register A ke port P22. Port P22 merupakan suatu
port yang digunakan untuk mengirimkan data keluar dari mikrokontroler.
5. "CALL DELAY" memanggil subrutin "DELAY" untuk memperkenalkan penundaan selama
0,5 detik.
6. "ADD A, #1" menambahkan nilai 1 ke register A. Ini akan meningkatkan nilai A setiap kali
loop dieksekusi.
7. "DA A" adalah instruksi "Decimal Adjust" yang memastikan hasil penambahan di register A
diatur dengan benar untuk mempertahankan digit desimal yang tepat.
8. "JMP NEXT" adalah instruksi untuk melompat kembali ke label "NEXT", sehingga loop
akan berulang.
9. "DELAY 0,5S" adalah label yang menandakan awal dari subrutin "DELAY" dengan
parameter 0,5 detik.
10. "MOV R5, #5" memindahkan nilai 5 ke register R5. Register R5 digunakan sebagai
penghitung luar dalam loop penundaan.
11. Label "DL2" menandakan awal dari loop luar dalam subrutin "DELAY".
12. "MOV R6, #200" memindahkan nilai 200 ke register R6. Register R6 digunakan sebagai
penghitung tengah dalam loop penundaan.
13. Label "DL1" menandakan awal dari loop tengah dalam subrutin "DELAY".
14. "MOV R7, #249" memindahkan nilai 249 ke register R7. Register R7 digunakan sebagai
penghitung dalam loop penundaan.
15. "DJNZ R7, $" adalah instruksi "Decrement and Jump if Not Zero" yang mengurangi nilai R7
dan melompat kembali ke label saat R7 belum mencapai nol.
16. "DJNZ R6, DL1" adalah instruksi "Decrement and Jump if Not Zero" yang mengurangi nilai
R6 dan melompat kembali ke label DL1 saat R6 belum mencapai nol.
17. "DJNZ R5, DL2" adalah instruksi "Decrement and Jump if Not Zero" yang mengurangi nilai
R5 dan melompat kembali ke label DL2 saat R5 belum mencapai nol.
18. "RET" adalah instruksi "Return" yang mengakhiri subrutin "DELAY" dan melanjutkan
eksekusi ke instruksi berikutnya setelah pemanggilan subrutin.
19. "END" menandakan akhir dari kode assembly.
V.
PERCOBAAN 1 : Buat program dan upload ke mikrokontroler
Penghitung Dua Digit ke bawah s
Untuk mengontrol tampilan 7-segmen tersebut, kode program memanfaatkan port P2 pada
mikrokontroler. Jalur I/O P2.3-P2.0 digunakan sebagai input untuk DS4 (digit satuan) dan
jalur P2.7-P2.4 digunakan sebagai input untuk DS3 (digit puluhan).
1. Pada awal program, nilai 99H (153 dalam desimal) dimasukkan ke register A
menggunakan instruksi "MOV A, #99H". Nilai ini akan ditampilkan pada tampilan 7-
segmen.
2. Selanjutnya, nilai yang ada di register A dipindahkan ke port P2 menggunakan
instruksi "MOV P2, A". Hal ini akan mengatur tampilan 7-segmen sesuai dengan nilai
di register A.
3. Program kemudian memanggil subrutin "DELAY" menggunakan instruksi "CALL
DELAY". Subrutin ini akan memperkenalkan penundaan selama 0,5 detik sebelum
program melanjutkan eksekusi berikutnya.
4. Setelah penundaan, nilai 99H ditambahkan ke nilai yang ada di register A
menggunakan instruksi "ADD A, #99H". Ini akan meningkatkan nilai yang
ditampilkan pada tampilan 7-segmen.
5. Instruksi "DA A" digunakan untuk melakukan penyesuaian desimal pada register A
setelah penambahan. Hal ini memastikan bahwa digit desimal yang tepat ditampilkan
pada tampilan 7-segmen.
6. Instruksi "JMP NEXT" digunakan untuk melompat kembali ke label "NEXT" dan
memulai kembali loop, sehingga tampilan 7-segmen akan diperbarui dengan nilai yang
baru.
7. Subrutin "DELAY" digunakan untuk menciptakan penundaan selama 0,5 detik. Ini
dicapai dengan menggunakan beberapa loop yang menghitung secara berulang-ulang
dalam waktu tertentu, dengan nilai loop yang ditentukan secara empiris untuk
mencapai penundaan yang diinginkan.
8. Setelah penundaan selesai, instruksi "RET" digunakan untuk mengakhiri subrutin
"DELAY" dan program akan melanjutkan eksekusi ke instruksi berikutnya setelah
pemanggilan subrutin.
Dalam kaitannya dengan sistem perangkat keras, program ini memanfaatkan port P2 untuk
mengendalikan tampilan 7-segmen dan memastikan bahwa sakelar SW2_3 ditempatkan
pada posisi ON agar sistem dapat berfungsi dengan baik.
Fungsi ADD (Addition): Instruksi "ADD A, #99H" adalah instruksi yang digunakan untuk
menambahkan nilai 99H ke nilai yang ada di register A. Operasi ini dilakukan dalam format
angka biner atau desimal, tergantung pada mode operasi yang ditetapkan dalam
mikrokontroler. Hasil penambahan disimpan kembali di register A.
Fungsi DA (Decimal Adjust): Instruksi "DA A" adalah instruksi yang digunakan untuk
menyesuaikan nilai di register A agar sesuai dengan format desimal. Ini diperlukan karena
setelah operasi penambahan, nilai di register A mungkin melewati batas angka desimal yang
valid (0-9). Instruksi DA akan menyesuaikan nilai di register A agar sesuai dengan digit
desimal yang benar. Misalnya, jika nilai di register A adalah 0xA5 (165 dalam desimal),
setelah instruksi DA dieksekusi, nilai di register A akan menjadi 0x05 (5 dalam desimal).
Program mikrokontroler di atas terkait dengan sistem perangkat keras yang menggunakan
tampilan 7-segmen dua digit (DS3 - DS4) dari MTS-51 Trainer untuk menampilkan angka
desimal. Untuk mengontrol tampilan 7-segmen, program ini memanfaatkan port P2 pada
mikrokontroler.
1. Program dimulai dengan label "START". Pada tahap ini, program memanggil subrutin
"UPCOUNT" dan "DOWNCOUNT" secara berurutan.
2. Subrutin "UPCOUNT" bertujuan untuk menghitung dan menampilkan urutan angka dari
00H hingga FFH (0 hingga 255 dalam desimal) pada tampilan 7-segmen.
4. Subrutin "DELAY" digunakan untuk menciptakan penundaan selama 0,5 detik. Subrutin
ini menggunakan beberapa loop yang menghitung secara berulang-ulang dalam waktu
tertentu, dengan nilai loop yang ditentukan secara empiris untuk mencapai penundaan
yang diinginkan.
MODUL PRAKTEK MTS-51 Marceau A.F. Haurissa, ST.,M.Eng
9
Jurusan Teknik Elektro: Prodi Teknologi Rekayasa Sistem Kelistrikan Migas Politeknik Negeri Ambon
Dalam kaitannya dengan sistem perangkat keras, program ini memanfaatkan port P2 untuk
mengendalikan tampilan 7-segmen dan memastikan bahwa sakelar SW2_3 ditempatkan pada
posisi ON agar sistem dapat berfungsi dengan baik. Data BCD yang akan ditampilkan pada
tampilan 7-segmen ditulis ke port P2.3-P2.0 untuk DS4 (digit satuan) dan P2.7-P2.4 untuk
DS3 (digit puluhan).
Dengan mengatur nilai pada port P2 sesuai dengan nilai yang ingin ditampilkan, program
mengendalikan tampilan pada perangkat keras.
2. Jelaskan apa maksud CALL UPCOUNT & CALL DOWNCOUNT pada program
mikrokontroler percobaan 2
3. Jelaskan apa maksud instruksi CJNE A,#00, NEXTU dan apa fungsi NEXTU
pada program mikrokontroler percobaan 2
Instruksi "CJNE A, #00, NEXTU" digunakan dalam subrutin "UPCOUNT" pada program
mikrokontroler di atas. Berikut penjelasan tentang instruksi dan fungsi yang terkait:
1. CJNE A, #00, NEXTU: Instruksi ini adalah Conditional Jump jika Not Equal (CJNE)
yang membandingkan nilai di dalam register A dengan nilai 00H. CJNE digunakan untuk
membandingkan dua nilai dan melakukan lompatan ke label tertentu jika kedua nilai
tersebut tidak sama.
o A: Register yang dibandingkan dengan nilai 00H.
o #00: Nilai 00H yang digunakan sebagai perbandingan.
o NEXTU: Label yang dituju jika nilai di dalam register A tidak sama dengan 00H.
Fungsi instruksi ini adalah untuk melakukan pengecekan apakah nilai di dalam register A
sudah mencapai 00H. Jika nilai A masih tidak sama dengan 00H, program akan melompat ke
label NEXTU dan melanjutkan perulangan untuk mengupdate dan menampilkan angka pada
tampilan 7-segmen.
2. NEXTU: NEXTU adalah label yang dituju oleh instruksi CJNE ketika nilai di dalam
register A tidak sama dengan 00H. Label ini digunakan untuk mengatur aliran program
kembali ke instruksi MOV P2, A setelah pengecekan dilakukan. Dalam konteks program
ini, NEXTU digunakan untuk melanjutkan perulangan dan memperbarui tampilan pada
tampilan 7-segmen dengan nilai yang baru.
4. Jelaskan apa maksud instruksi CJNE A,#99, NEXTD dan apa fungsi NEXTD
pada program mikrokontroler percobaan 2
1. CJNE A, #99, NEXTD: Instruksi ini adalah Conditional Jump jika Not Equal (CJNE)
yang membandingkan nilai di dalam register A dengan nilai 99H. CJNE digunakan untuk
membandingkan dua nilai dan melakukan lompatan ke label tertentu jika kedua nilai
tersebut tidak sama.
o A: Register yang dibandingkan dengan nilai 99H.
o #99: Nilai 99H yang digunakan sebagai perbandingan.
o NEXTD: Label yang dituju jika nilai di dalam register A tidak sama dengan 99H.
Fungsi instruksi ini adalah untuk melakukan pengecekan apakah nilai di dalam register A
sudah mencapai 99H. Jika nilai A masih tidak sama dengan 99H, program akan melompat ke
label NEXTD dan melanjutkan perulangan untuk mengupdate dan menampilkan angka pada
tampilan 7-segmen.
2. NEXTD: NEXTD adalah label yang dituju oleh instruksi CJNE ketika nilai di dalam
register A tidak sama dengan 99H. Label ini digunakan untuk mengatur aliran program
kembali ke instruksi MOV P2, A setelah pengecekan dilakukan. Dalam konteks program
ini, NEXTD digunakan untuk melanjutkan perulangan dan memperbarui tampilan pada
tampilan 7-segmen dengan nilai yang baru.