PERCOBAAN
COMPILER, PROGRAM MONITOR DAN EMULATOR
1.1 Tujuan Percobaan
- Memahami penggunaan compiler ASM51
- Memahami perangkat modul utama Emulator MK51
- Memahami program monitor AEM
1.2 Alat dan Bahan
- Modul utama emulator MK51 beserta perlengkapannya
- Frekuensi Counter
- Osiloskop
- Analog atau digital multitester
- PC dan software praktikum
1.3 Cara Kerja
1.3.1 Compiler
- Buatlah program P1.1 dengan text editor, simpan dengan nama tesppi.asm. Default compiler tidak case sensitive, artinya penggunaan huruf besar atau kecil sama saja, “StarT” sama dengan “START”.
- Compile tesppi.asm sehingga menghasilkan file tesppi.hex dan tesppi.lst. Perhatikan bahwa hasil compile tidak boleh ada kesalahan. Catat file .asm, .lst, dan .hex (bukalah dengan text editor)
- Jika terjadi adanya kesalahan, buka file tesppi.lst. Cari tanda panah yang menunjukkan adanya kesalahan.
- Jika sudah benar, download tesppi.hex dengan program aem.exe atau hyperterminal ke target emulator (warna data yang dikirim harus berwarna merah, jika masih berwarna hitam, inisialisasi kembali komunikasi serial tersebut dengan menekan tombol [ ^ I ].
- Verivy program yang telah di dowload ke target emulator dengan file tesppi.hex di disk, bila ok, maka teruskan percobaan.
Untuk setiap percobaan dengan program yang berbeda, langkah 1 sampai 5 harus dilakukan ( Anda harus bisa memahami dan mengerti langkah 1 – 5 tersebut agar bisa melakukan percobaan selanjutnya )
- Jalankan program dengan menekan tombol a (goto 4030h)
- Gunakan led atau logic tester atau osiloskop pada semua port P1, PA, PB, PC, laporkan hasilnya
- Untuk menghentikan program dan kembali ke monitor (prompt*), tekan reset pada target emulator (tekan ^ I lalu tekan ^ H atau backspace)
- Selama catu daya di target emulator tidak dimatikan, berarti program yang di download tetap ada
- Bagaimana cara mempercepat atau memperlambat kedipan port tersebut? Buatlah programnya dan coba jalankan
- Jika perintah AJMP XX, dirubah menjadi LJMP XX, apa yang terjadi? Jalankan program dan lihat hasilnya. Lihat perbedaan hasil data yang dikirimkan.
- Jika perintah AJMP XX, dirubah menjadi SJMP XX, apa yang terjadi? Jalankan program dan lihat perbedaan hasil data yang dikirimkan.
- Apa gunanya subrutine delay, apa pengaruhnya bila dihilangkan? (untuk menghilangkan perintah tidak usah dihapus cukup diberi tanda “ ; ”)
1.3.2 Waktu Eksekusi
- Buat program P1.2 dengan nama siklus .asm, compile dan download
- Jalankan program dari 4030h, ukur frekuensi (catat) dan amati gelombang (gambar) pada titik–titik;
· X2 (pin 18 AT89C51)
· ALE (pin 30 AT89C51)
· PSEN (pin 29 AT89C51)
· Salah satu Port P1
1.3.3 Level RS232
1. Jalankan program P1.3, program ini akan mengirimkan karakter A ke terminal host secara terus menerus. Amati dan gambar sinyal pada pin TXD (pin 11 AT89C51) dan TX pada IC 232 pin 14
2. Reset harware, tidak menjalankan program apa–apa. Togle DTR dengan menekan tombol Ctrl-S, ukur tegangan pin 8 IC RS232 dan pin 9 pada saat status lo dan hi. Ctrl-s akan memberikan state 0, tekan lagi state 1, tekan lagi state 0, dan seterusnya.
1.3.4 Komunikasi Serial
1. Jalankan program P1.4, ketikan karakter sebarang, warna hitam menunjukkan karakter yang dikirim dari host ke target, dan karakter merah adalah karakter yang diterima oleh target dan dikirimkan kembali ke host. Variasikan karakter yang dikirim ( 2 variasi).
- Coba ubah baudrate dengan mengubah nilai th1. Ulangi langkah satu.
- Jalankan program P1.5, catat apa yang ditampilkan di layar. Coba ubah tampilan dilayar sesuai dengan kehendak anda (ubah string dengan nama anda dan kelompok anda).
- Apa guna 0dh, 0ah dan 0h pada data setelah db yang dikirimkan ?
Listing Program Percobaan 1
;=======================================================
;Program P1.1 Testppi, mengedipkan port , P1, PA, PB, PC
;P1.1 TestPPI, menegedipkan port P1, PA, PB, PC
;=======================================================
$MOD51
PORTA equ 2000h
PORTB equ 2001h
PORTC equ 2002h
PORTD equ 2003h ;register control
CW EQU 80H ;control word/port
;-----------------------
ORG 4030H
start:MOV SP,#30H
MOV P1,#0FFH
ACALL delay
;-----------------------
; Inisialisasi PPI 8255
;-----------------------
MOV DPTR,#PORTD
MOV A,#CW
MOVX @DPTR,A
;------------------------
; PA,PB,PC,P1 Nyala-Mati
;------------------------
ulang:MOV A,#0FFH ;NYALA
MOV DPTR,#PORTA
MOVX @DPTR,A
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV DPTR,#PORTC
MOVX @DPTR,A
MOV P1,#0FFH
ACALL delay
;-------------------------
MOV A,#00H ;MATI
MOV DPTR,#PORTA
MOVX @DPTR,A
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV DPTR,#PORTC
MOVX @DPTR,A
MOV P1,#00H
ACALL delay
ACALL ulang
;--------------------------
; delay
;--------------------------
delay: MOV R2,#9FFH
delay1:MOV R3,#9FFH
DJNZ R3,$
DJNZ R2,delay1
RET
END
:=============================
;Program P1.2 Squarewave di P1
;=============================
$MOD51
ORG 4030H
START:MOV P1,#0FFH
MOV P1,#00H
SJMP START
END
;=========================
;Program P1.3 level RS232
;=========================
$MOD51
ORG 4030H
MOV A,#'A'
START:ACALL SNDCHR
SJMP START
SNDCHR:
CLR SCON.1
MOV SBUF,A
TXLOOP:
JNB SCON.1,TXLOOP
RET
END
;==============================
;Program P1.4 Komunikasi serial
;==============================
$MOD51
org 4030H
Start:
acall InitSer
acall getchr ;
acall sndchr ;
sjmp start
;Inisialisasi
;using 12 MHz crystal, timer 1 for 2400 bps th1 = 0f3h
;using 11.059Mhz crystal, timer 1 for 2400 bps th1 = 0f4h
initser:
mov pcon,#80h
mov tmod,#22h
mov th1,#0f4h
;ubahlah untuk 2400bps dengan mengisi th1=XXh
;catat apa yang terjadi setelah reset harware.
setb tcon.6
mov scon,#052h
ret
; subroutine sndchr
sndchr:
clr scon.1 ; clear the tx buffer full flag.
mov sbuf,a ; put chr in sbuf
txloop:
jnb scon.1, txloop ; wait till chr is sent
ret
; subroutine getchr
getchr:
jnb ri, getchr ; wait till character received
mov a, sbuf ; get character
clr ri ; clear serial status bit
ret
end
;==============================
; Program P1.5 : print to serial
;==============================
$MOD51
Monitor EQU 0042h
org 4030h
Start:
ACALL PRINT
db 0dh, 0ah, 'Laboratorium Elektronika', 0h
ACALL PRINT
db 0dh, 0ah, 'Praktikum Mikroprosesor', 0h
Ljmp monitor
;subroutine sndchr
sndchr:
clr scon.1 ; clear tx buffer full flag
mov sbuf,a ; put chr in sbuf
txloop:
jnb scon.1,txloop ; wait till char sent
ret
; subroutine print
; takes string immediately following the call and sends it out
; to the serial port. the string must be terminated with a null.
; this routine will ret to the instruction immediately following
; the string.
print:
pop dph ; put return addr in dptr
pop dpl
prtstr:
clr a ; set offset = 0
movc a, @a+dptr ; get char from code memory
cjne a, #0h, mchrok ; if chr = FF then return (FF = '\0' ?)
ljmp prtdone
mchrok:
ACALL sndchr
inc dptr ; point at next char
ljmp prtstr ;loop till end of string
prtdone:
mov a, #1h
jmp @a+dptr
end
PERCOBAAN II
TRANSFER DATA DAN PERCABANGAN
2.1 Tujuan Percobaan
- Memahami proses transfer data.
- Memahami pencabangan bersyarat dan tidak bersyarat.
2.2 Alat dan Bahan
- Modul utama emulator MK51 beserta perlengkapannya.
- PC dan software praktikum.
2.3 Diskripsi Percobaan
- Untuk percobaan ini, digunakan ‘printhasil’. Setiap rutin ini dipanggil dengan perintah acall print hasil, ditampilkan isi register a, b, dan psw dilayar PC. Catat tiap – tiap hasil dan analisa, apakah cocok dengan perhitungan desimal.
- Selain itu gunakan perintah i untuk melihat data di internal RAM .
- Jangan menggunakan Bank 0 (alamat 00h – 08h) karena data yang ditampilkan akan salah.
- Beberapa contoh program sengaja disalahkan, cobalah cari kesalahan itu.
2.4 Tugas Pendahuluan
- Buatlah program untuk mengisi internal memory antara 40h hingga 5fh dengan data ffh, kemudian jalankan dan periksa dengan melihat isi internal memory (menu I). Program sesingkat mungkin.
2.5 Percobaan
- Buatlah program percobaan 2 dengan text editor (nama program terserah anda). Jalankan program dan catat hasilnya, dan analisalah untuk tiap – tiap hasil operasi. Untuk setiap perubahan nilai dalam tanyakan asisten yang bersangkutan.
Listing Program Percobaan 2
;===========================================
;Program P2.1 data transfer
;#22h diganti sesuai petunjuk dari assisten
;periksalah dengan baik isi internal memory,
;===========================================
$mod51
monitor equ 30H
org 4030H
mov psw,#08H
mov R0,#22H
mov R1,#22H
mov R2,#22H
mov R3,#22H
mov R4,#22H
ljmp monitor
end
;===========================================
;Program P2.2 data transfer
;periksalah dengan baik isi internal memory,
;setelah menjalankan program berikut ini
;===========================================
$mod51
monitor equ 30h
org 4030h
mov psw,#10h
mov R0,#0
mov R1,#1
mov R2,#2
mov R3,#3
mov R4,#4
mov R5,#5
mov R6,#6
mov R7,#7
ljmp monitor
end
;===========================================
;Program P2.3 data transfer
;periksalah dengan baik isi internal memory,
;===========================================
$mod51
monitor equ 30h
org 4030h
mov psw,#18h
mov R0,#AAh
mov R1,#AAh
mov R2,#AAh
mov R3,#AAh
mov R4,#AAh
mov R5,#AAh
mov R6,#AAh
mov R7,#AAh
ljmp monitor
end
;=====================================================================
;Program P2.4 data transfer
;data yang diisikan ke R0(mov R0,#49h) diganti sesuai petunjuk asisten
;data yang diisikan ke R1(mov R0,#28) diganti sesuai petunjuk assisten
;periksalah dengan baik isi internal memory setelah dijalankan
;=====================================================================
$mod51
monitor equ 30h
org 4030h
mov psw,#08H
mov R0,#49H
mov R1,#28
mov A,#0FEh
xx:
mov @R0,A
inc R0
djnz R1,xx
ljmp monitor
end
;=====================================================================
;Program P2.5 data transfer
;data yang diisikan ke R1(mov R0,#35) diganti sesuai petunjuk assisten
;periksalah dengan baik isi eksternal memory setelah dijalankan
;=====================================================================
$mod51
monitor equ 30h
org 4030h
mov DPTR,#5000h
mov R1,#35
mov A,#0DFh
xx:
movx @DPTR,A
inc DPTR
djnz R1,xx
ljmp monitor
end
PERCOBAAN III
PEMROSESAN BYTE DAN BIT
3.1 Tujuan Percobaan
- Memahami aritmatika biner 8 (byte)
- Memahami operasi manipulasi byte dan bit
- Memahami operasi logika
3.2 Alat dan Bahan
- Modul utama emulator MK51 beserta perlengkapannya
- PC dan software praktikum
3.3 Diskripsi Percobaan
- Untuk percobaan ini, digunakan ‘printhasil’. Setiap rutin ini dipanggil dengan perintah acall print hasil, ditampilkan isi register a, b, dan psw dilayar PC. Catat tiap – tiap hasil dan analisalah, apakah cocok dengan perhitungan desimal.
- Pada Operasi Logika
3.4 Cara Kerja
3.4.1 Operasi aritmatika 8 bit, manipulasi byte/bit dan operasi logika.
· Buatlah program P3.1 dengan text editor (nama program terserah anda). Jaqlankan program dan catat hasilnya, dan analisalah untuk tiap – tiap operasi.
3.4.2 Aplikasi opersi logika
Rangkaian kombinasional seperti pada gambar 1, dapat diemulasikan dengan rangkaian mikrokontroler dengan memberikan program seperti yang tercantum pada program P3.4
Gambar 3.1 Rangkaian Kombinasional
· Bualah fungsi logika rangkaian Gambar 3.1
· Jalankan progran dan tes semua kombinasi input (P1.4 – P1.6), buatlah tabel kebenarannya
;=========================
;Program P3.1 Proses Data
;=========================
$MOD51 ; asm51 module
;------------------------------- routin address in kernel code
monitor equ 30h ; * prompt
prthex equ 0615h ; print hex code of a
print equ 05F9h ; print word
pblank equ 061Dh ; print space (blank)
CRLF equ 060Ch ; print carriage return
Pswtemp equ 044h ; psw temporer
;-------------------------------
org 4030h ; start awal
mov psw,#08h
lcall print ; print header
db 0dh, 0ah,'A B PSW', 0h
lcall crlf
;1. penjumlahan 1
mov a,#10
mov b,#15
add a,b
acall printhasil
;2. penjumlahan 2
mov a,#150
mov b,#60
addc a,b
acall printhasil
;3. penjumlahan 3
mov a,#200
mov b,#16
addc a,b
acall printhasil
;4. pengurangan 1
clr c
mov a,#0AAh
mov b,#0DEh
subb a,b
acall printhasil
;5. pengurangan 2
setb c
mov a,#0A6h
mov b,#0C3h
subb a,b
acall printhasil
;6. pengurangan 3
clr c
mov a,#0B2h
mov b,#0D2h
subb a,b
acall printhasil
;7. pengurangan 4
clr c
mov a,#60H
mov b,#20H
subb a,b
acall printhasil
;8. perkalian 1
mov a,#0AAh
mov b,#0CFh
mul ab
acall printhasil
;9. pembagian 1
mov a,#0DDh
mov b,#02Dh
div ab
acall printhasil
;10. pembagian 2
mov a,#020h
mov b,#010h
div ab
acall printhasil
;11. logical 1
mov a,#10101010b
mov b,#01011100b
anl a,b
acall printhasil
;12. logical 2
mov a,#01010101b
mov b,#11010010b
orl a,b
acall printhasil
;13. logical 3
mov a,#01010101b
mov b,#01100110b
xrl a,b
acall printhasil
;14. rotate
setb c
mov a,#10101010b
rlc a
acall printhasil
;15. swap
mov a,#0FDh
swap a
acall printhasil
;16. decimal adjust
mov a,#01Eh
mov b,#03Dh
add a,b
acall printhasil
da a
acall printhasil
mov a,#077h
mov b,#0B0h
add a,b
da a
acall printhasil
;17. complement, setb and clr
mov a,#0CCh
cpl a
;periksalah di port P1 dengan led atau multitester program berikut
mov P1,#0
setb P1.0
clr P1.1
clr P1.2
setb P1.3
ljmp monitor
;-------------------rutin print hasil
Printhasil:
mov pswtemp,psw
lcall prthex
lcall pblank
mov a,b
lcall prthex
lcall pblank
mov a,pswtemp
lcall prthex
lcall crlf
ret
end
;=====================================================
;Program P3.2 Emulasi Rangkaian Kombinasional gambar 1
;=====================================================
$MOD51
org 4030h
mov P1,#00h
loop:
mov c,P1.4
cpl c
anl c,P1.5
cpl c
orl c,P1.6
mov P1.7,c
sjmp loop
end
PERCOBAAN IV
PENGENDALIAN RELAY SECARA PARALEL
4.1 Tujuan Percobaan
- Memahami hardware dan software pengaturan relay
- Memahami algoritma dan flowchart pemrograman
- Memahami program pengaturan relay (dengan indicator LED dan relay)
4.2 Alat dan Bahan
- Modul utama emulator MK1 beserta perlengkapannya
- Modul relay
- PC dan software praktikum
4.3 Deskripsi Percobaan
Pada modul ini, digunakan suatu modul output yang terdiri dari delapan relay. Relay sering digunakan pada peralatan-peralatan elektronika dan mempunyai fungsi untuk menghubungkan dan memutuskan aliran arus listrik yang dikontrol dengan memberikan tegangan dan arus tertentu pada koilnya. Pada relay board ini, digunakan relay DC dengan tegangan koil 12 V DC, arus yang diperlukan sebesar 20-30 mA sehingga supaya bias dikendalikan langsung oleh suatu output IC TTL/CMOS perlu digunakan ULN2803A “Darlington Array” yang merupakan sekumpulan transistor dengan konfigurasi Darlington sehingga mempunyai β (penguat arus) yang cukup besar.
Pada percobaan digunakan software yang merupakan suatu contoh sederhana untuk mengaktifkan atau mematikan relay dengan suatu tundaan dan mengaktifkan port 1; dan port a PPI. Pada percobaan ini disarankan untuk membuat delay lama, karena bila delaynya terlalu cepat maka relay akan bergetar (kondisi on-off relay terjadi terus menerus). Hal ini dapat menyebabkan kerusakan pada relay.
4.4 Cara Kerja
4.4.1 Relay
1. Buatlah Program P4.1 dengan text editor dengan nama relxx.asm (dengan XX adalah nama kelompok anda). Default compiler tidak case sensitive, artinya penggunaan huruf besar atau huruf kecil sama saja, ‘StarT’ sama dengan ‘START’.
2. Compile relxx.asm sehingga menghasilkan file relxx.hex dan relxx.lst. Perhatikan bahwa hasil compile tidak boleh ada kesalahan.
3. Download relxx.hex dengan program aem.exe atau hyperterminal ke target emulator.
4. Verify program yang telah didownload ke target emulator dengan file relxx.hex di disk, bila OK maka teruskan percobaan. Untuk setiap percobaan dengan program yang berbeda, langkah-langkah 1 sd 4 harus dilakukan, bila ada kesalahan lihat file lstnya (di dalam text editor) kemudian amati kesalahan yang terjadi. Betulkan file asm-nya (ulangi langkah 1-4) shingga no errors found.
5. Jalankan program dengan menekan tombol a (goto 4030h).
6. Amati keadaan relay aktif/tidak (dengan melihat kondisi led indicator).
7. Untuk menghentikan program dan kembali ke monitor (prompt *), tekan reset pada target emulator.
8. Selama catu daya di target emulator tidak dimatikan, berarti program yang didownload tetap ada.
9. Dari listing program di atas dan dari pengamatan relay, buatlah algoritma dan flowchart program!
10. Jelaskan begaimana cara kerja software dan kerja hardware ! (Cari posisi led msb dan LSBnya agar jalannya program bisa dianalisa).
11. Coba buatlah suatu program sederhana yang mempunyai algoritma sebagai berikut P1.0 maka relay1 ON dan seterusnya. Buatlah pula flowchartnya dan jangan lupa kumpulkan file .asm file .hex dan file .lst-nya sebagai tugas 1!
12. Tugas 2, Buatlah program, dimana lampu led menyala bergantian dan berurutan.
13. Tugas 2 diatas juga dibuat flowchartnya dan program tersebut harus dibuktikan juga. Sertakan juga file .asm, .lst dan .hex.
Listing Program Percobaan 4
;========================
;Program P4.1 Runing Led
;========================
$mod51
org 4030h
mov a,#00000011b
mov p1,a
acall tunda
start:
rr A
mov p1,a
acall tunda
sjmp start
tunda:
mov r1,#01fh
tunda1:
mov r2,#018h
tunda2:
mov r3,#018h
djnz r3,$
djnz r2,tunda2
djnz r1,tunda1
ret
end
;============================================
;Program P4.2 Running Off Led
;program pengendalian relay melalui portb PPI
;============================================
$MOD51
PORTA EQU 4000H
PORTB EQU PORTA+1H
PORTC EQU PORTB+1H
R_CON EQU PORTA+3H
CW EQU 80H
;------------------------
ORG 4000H
MOV A, #CW
MOV DPTR,#R_CON
MOVX @DPTR, A
START:
MOV A,#11111110B
ACALL PIN
MOV A,#11111101B
ACALL PIN
MOV A,#11111011B
ACALL PIN
MOV A,#11110111B
ACALL PIN
MOV A,#11101111B
ACALL PIN
MOV A,#11011111B
ACALL PIN
MOV A,#10111111B
ACALL PIN
MOV A,#01111111B
ACALL PIN
SJMP START
PIN:
MOV DPTR,#PORTA
MOVX @DPTR,A
ACALL TUNDA
RET
TUNDA:
MOV R1,#0FFH
TUNDA1:
MOV R2,#0FFH
TUNDA2:
MOV R3,#0FFH
DJNZ R3,$
DJNZ R2,TUNDA2
DJNZ R1,TUNDA
RET
END
;===========================================
;Program P4.3 Dancing Led(relay)
;program pengendalian relay melalui portb P1
;===========================================
$MOD51
org 4030h
sjmp baris7
;-----------------------------
Tunda:
mov psw,#18h
mov R1,#0ffh
Tunda1:
mov R2,#013h
Tunda2:
mov R3,#013h
djnz R3,$
djnz R2,Tunda2
djnz R1,Tunda1
mov psw,#00h
ret
;----------------------------
baris7:
mov A,#00h
mov R3,#00h
itung:
mov A,R3
ANL A,#3
RL A
ADD A,R3
mov DPTR,#Tabel
jmp @A+DPTR
Tabel:
LJMP Rutin1
LJMP Rutin2
LJMP Rutin3
LJMP Rutin4
;--------------------------------------
Rutin1:
mov A,#01h
mov R1,#07h
next: RL A
mov P1,A
acall Tunda
DJNZ R1,Next
ajmp Continue
;--------------------------------------
Rutin2:
mov A,#080h
mov R1,#07h
Next2:
RR A
mov P1,A
acall Tunda
djnz R1,Next2
ajmp Continue
Rutin3:
mov A,#81h
mov P1,A
acall Tunda
mov A,#42h
mov P1,A
acall Tunda
mov A,#24h
mov P1,A
acall Tunda
mov A,#18h
mov P1,A
acall Tunda
mov A,#24h
mov P1,A
acall Tunda
mov A,#42h
mov P1,A
acall Tunda
mov A,#81h
mov P1,A
acall Tunda
mov A,#00h
mov P1,A
acall Tunda
mov A,#0FFh
mov P1,A
acall Tunda
ajmp Continue
;--------------------------------------
Rutin4:
mov A,#0AAh
mov R1,#07h
Next3:
mov P1,A
acall Tunda
XRL A,#0ffh
djnz R1,Next3
sjmp $
Continue:
inc R3
ljmp itung
end
Modul relay yang digunakan terdiri dari 8 relay yang berfungsi untuk menampilkan kode pada terminal input ke relay, dengan spesifikasi sebagai berikut :
ü Kompatibel dengan ddt-51 ver 3.0
ü 8 buah relay dengan LED indicator
ü Driver secara parallel
ü Aktif HIGH
PERCOBAAN V
KEYPAD DAN SEVEN SEGMENT
5.1 Tujuan Percobaan
· Memahami program pengaturan seven segmen
· Memahami program pengaturan keypad
5.2 Alat dan Bahan
- Modul utama emulator MK51 beserta perlengkapannya
- Modul Keypad
- Modul Seven segmen
- PC dan software praktikum
5.2 Cara Kerja
5.2.1 Seven Segmen
A. Pengaturan Segmen
Tujuan :
1) Mahasiswa mengetahui bagaimana menghidupkan masing-masing segmen dari tujuh segmen yang ada
2) Mahasiswa mampu mengembangkan program untuk membentuk karakter dari seven segment
Pecobaan :
1. Buatlah program dengan text editor, dengan nama segA.asm. Default compiler tidak case sensitive, artinya penggunaan huruf besar atau huruf kecil sama saja, ‘StarT’ sama dengan ‘START’.
2. Compile segA.asm sehingga menghasilkan file segA,asm dan segA.lst. Perhatikan bahwa hasil Perhatikan bahwa hasil compile tidak boleh ada kesalahan. Catat file .asm, .lst dan .hex (bukalah dengan editor).
3. Download segA.hex dengan program aem.exe atau hyperterminal ke target emulator.
4. Verify program yang telah didownload ke target emulator dengan file segA.hex di disk, bila OK maka teruskan percobaan.
5. Jalankan program dengan menekan tombol a (goto4030h)
6. Untuk menghentikan program dan kembali ke monitor (prompt *), tekan ^R pada target emulator.
7. Ulangi langkah 1-6 untuk program segB.asm, segC.asm, segD.asm, segE.asm, segF.asm, segG.asm.
B. Pengaturan Display
Ulangi langkah 1-6 percobaan A untuk program disp1.asm, disp2.asm, disp3.asm, disp4.asm, disp5.asm, disp6.asm.
C. Scanning Display
Ulangi langkah 1-6 untuk kp1.asm, kp2.asm, kp3.asm, kp4.asm, disp5.asm,
5.2.2 Keypad
1. Buatlah program dengan nama pad0.asm, compile dan download
2. Ulangi langkah 1 untuk program pad5.asm, padA.asm
3. Ulangi langkah 1 untuk program keypad.asm
Listing Program Percobaan 5
;====================
;Program P5.1 Segmen
;====================
$mod51
PORTA EQU 2000H
PORTB EQU 2001H
PORTC EQU 2002H
CPORT EQU 2003H
CW EQU 0080H
ORG 4030H
;---------------------------
;INITIALIZE 8255
;---------------------------
mov DPTR,#CPORT
mov A,#CW
movx @DPTR,A
;---------------------------
;PENGIRIMAN DATA KE PORT PPI
;---------------------------
mulai:
mov A,#00000001b ;ubah data ini dalam urutan seperti
mov DPTR,#PORTA ;rotate left. Simpan sbg segx.asm
movx @DPTR,A
mov a,#0h
mov DPTR,#PORTB
movx @DPTR,A
sjmp mulai
end
;=====================
;Program P5.2 Display
;=====================
$mod51
PORTA EQU 2000H
PORTB EQU 2001H
PORTC EQU 2002H
CPORT EQU 2003H
CW EQU 0080H
ORG 4030H
;----------------------------
;INITIALIZE 8255
;----------------------------
mov DPTR,#CPORT
mov A,#CW
movx @DPTR,A
;----------------------------
;PENGIRIMAN DATA KE PORT PPI
;----------------------------
mulai:
mov A,#0ffh ;8 bertitik
mov DPTR,#PORTA
movx @DPTR,A
mov a,#11011111b ;geser nilai nol spt logika rotate right
mov DPTR,#PORTB ;simpan sbg file disp.asm
movx @DPTR,A
sjmp mulai
end
;===========================================================
;Menghidupkan display LED 7 segment
;untuk menampilkan angka 0 s/d F pada segment terakhir (LSB)
;data langsung dikeluarkan ke port PPI
;file name: scan.asm
;===========================================================
$MOD51
PORTA EQU 2000H
PORTB EQU 2001H
PORTC EQU 2002H
CPORT EQU 2003H
CW EQU 0080H
ORG 4030H
Mulai:
;----------------------------------------
;INITIALIZE 8255
;----------------------------------------
MOV DPTR,#CPORT
MOV A,#CW
MOVX @DPTR,A
;----------------------------------------
;PENGIRIMAN DATA KE PORT PPI
;----------------------------------------
Mov A,#00111111b ;keluarkan kode angka 0 ke port A
acall aktif ;aktifkan 7 segmen ke 6
Acall Tunda ;panggil sub routine tunda
Mov A,#00000110b ;keluarkan kode angka 1 ke port A
Acall aktif
Acall Tunda
Mov A,#01011011b ;keluarkan kode angka 2 ke port A
Acall aktif
Acall Tunda
Mov A,#01001111b ;keluarkan kode angka 3 ke port A
Acall aktif
Acall Tunda
Mov A,#01100011b ;keluarkan kode angka 4 ke port A
Acall aktif
Acall Tunda
Mov A,#01101101b ;keluarkan kode angka 5 ke port A
Acall aktif
Acall Tunda
Mov A,#01111101b ;keluarkan kode angka 6 ke port A
Acall aktif
Acall Tunda
Mov A,#00000111b ;keluarkan kode angka 7 ke port A
Acall aktif
Acall Tunda
Mov A,#01111111b ;keluarkan kode angka 8 ke port A
Acall aktif
Acall Tunda
Mov A,#01101111b ;keluarkan kode angka 9 ke port A
Acall aktif
Acall Tunda
Mov A,#01011111b ;keluarkan kode huruf "a"
Acall aktif
Acall Tunda
Mov A,#01111100b ;keluarkan kode huruf "b'
Acall aktif
Acall Tunda
Mov A,#00111001b ;keluarkan kode huruf "c"
Acall aktif
Acall Tunda
Mov A,#01011110b ;keluarkan kode huruf "d"
Acall aktif
Acall Tunda
Mov A,#01111011b ;keluarkan kode huruf "e"
Acall aktif
Acall Tunda
Mov A,#01110001b ;keluarkan kode huruf "f"
Acall aktif
Acall Tunda
ljmp Mulai ;lompat ke alamat dg label Mulai
;-------------------------------
;sub rutin aktifkan 7segmen ke 6
;-------------------------------
aktif: Mov DPTR,#PORTA
Movx @DPTR,A
MOv A,#0FEh
Mov DPTR,#PORTB
Movx @DPTR,A
ret
;------------------------------
;sub routin tunda
;------------------------------
Tunda: Mov R0,#03Fh ;Isi Register R0 dengan FF (Hex)
Tunda1:Mov R1,#03Fh ;Isi Register R1 dengan FF (Hex)
Tunda2:Mov R2,#03Fh
Djnz R2,$ ;kurangi R1 dengan 1, bila hasil belum
Djnz R1,Tunda2 ;sama dgn 0 mk lompat ke perintah ini
Djnz R0,tunda1 ;Kurangi R0 dengan 1, bila hasil belum
Ret ;kembali ke alamat setelah perintah
;'Acall Delay'
End
;===========================================
;Program untuk menampilkan tulisan "techno"
;dengan delay time sangat cepat
;file name:scan2.asm
;R1 digunakan untuk penyimpanan data driver
;===========================================
$MOD51
PORTA EQU 2000H
PORTB EQU 2001H
PORTC EQU 2002H
CPORT EQU 2003H
CW EQU 0080H
ORG 4000h
;--------initialize 8255
mov a,#cw
mov dptr,#cport
movx @dptr,a
;------------------------
mulai:
clr A
mov A,#01111000b ;mencetak hurut "t"
mov DPTR,#PORTA
movx @DPTR,A
mov A,#11011111b ;aktifkan segmen pertama
mov DPTR,#PORTB
movx @DPTR,A
acall delay
mov A,#01111011b ;data untuk huruf "e"
mov DPTR,#PORTA ;kirim alamat port a ke data pointer
movx @DPTR,A ;kirim data huruf "e" ke port a
mov A,#11101111b
mov DPTR,#PORTB
movx @DPTR,A ;aktifkan segmen kedua
acall delay
mov A,#00111001b ;data untuk huruf "c"
mov DPTR,#PORTA ;kirim alamat port a ke data pointer
movx @DPTR,A ;kirim data huruf "c" ke port a
Mov A,#11110111b
mov DPTR,#PORTB
movx @DPTR,A ;aktifkan segmen ketiga
acall delay
mov A,#01110100b ;data untuk huruf "h"
mov DPTR,#PORTA ;kirim alamat port a ke data pointer
movx @DPTR,A ;kirim data huruf "h" ke port a
Mov A,#11111011b
Mov DPTR,#PORTB
movx @DPTR,A ;aktifkan segmen keempat
acall delay
mov R1,A ;kembalikan data driver
mov A,#00110111b ;data untuk huruf "n"
mov DPTR,#PORTA ;kirim alamat port a ke data pointer
movx @DPTR,A ;kirim data huruf "n" ke port a
Mov A,#11111101b
mov DPTR,#PORTB
movx @DPTR,A ;aktifkan segmen kedua
acall delay
mov A,#00111111b ;data untuk huruf "o"
mov DPTR,#PORTA ;kirim alamat port a ke data pointer
movx @DPTR,A ;kirim data huruf "o" ke port a
Mov A,#11111110b
mov DPTR,#PORTB
movx @DPTR,A ;aktifkan segmen kedua
acall delay
mov R2,#06h
djnz R2,mulai
delay:
Mov R0,#01h ;isi Register R0 dengan FF (Hex)
Tunda1:
Mov R1,#01h ;isi Register R1 dengan FF (Hex)
Tunda2:
Mov R2,#01h
Djnz R2,$ ;kurangi R1 dengan 1, bila hasil belum
;sama dengan 0 maka lompat ke perintah ini
Djnz R1,Tunda2
Djnz R0,tunda1 ;kurangi R0 dengan 1, bila hasil belum
Ret ;kembali ke alamat setelah perintah
;'Acall Delay'
end
;===========================
;program penyapuan keypad
;file name:keypad.asm
;===========================
$mod51
porta equ 2000h
portb equ 2001h
portc equ 2002h
cport equ 2003h
cw equ 80h
;------------------------
org 4030h
mov a,#cw
mov dptr,#cport
movx @dptr,a
;------------------------
;scan baris pertama
;------------------------
mulai: mov a,#11111011b
mov dptr,#portc
movx @dptr,a
mov p1,#0ffh
angka0: jb p1.3,angka1
tampil0:
mov a,#03fh
acall aktif
jnb p1.3,tampil0
angka1: jb p1.4,angka2
tampil:
mov a,#6h
acall aktif
jnb p1.4,tampil1
angka2: jb p1.5,angka3
tampil2:
mov a,#5bh
acall aktif
jnb p1.5,tampil2
angka3: jb p1.6,angka4
tampil3:
mov a,#4fh
acall aktif
jnb p1.6,tampil3
;------------------------
;scan baris kedua
;------------------------
angka4: mov a,#11111101b
mov dptr,#portc
movx @dptr,a
jb p1.3,angka5
tampil4:
mov a,#66h
acall aktif
jnb p1.3,tampil4
angka5: jb p1.4,angka6
tampil5:
mov a,#6dh
acall aktif
jnb p1.4,tampil5
angka6: jb p1.5,angka7
tampil6:
mov a,#7dh
acall aktif
jnb p1.5,tampil6
angka7: jb p1.6,angka8
tampil7:
mov a,#7h
acall aktif
jnb p1.6,tampil7
;----------------------
;scan baris ketiga
;----------------------
angka8: mov a,#11111110b
mov dptr,#portc
movx @dptr,a
jb p1.3,angka9
tampil8:
mov a,#7fh
acall aktif
jnb p1.3,tampil8
angka9: jb p1.4,hurufa
tampil9:
mov a,#6fh
acall aktif
jnb p1.4,tampil9
hurufa: jb p1.5,hurufb
tampila:
mov a,#5fh
acall aktif
jnb p1.5,tampila
hurufb: jb p1.6,clear
tampilb:
mov a,#7ch
acall aktif
jnb p1.6,tampilb
clear: mov a,#0h
mov dptr,#porta
movx @dptr,a
ljmp mulai
aktif: mov dptr,#porta
movx @dptr,a]
mov a,#11011111b
mov dptr,#portb
movx @dptr,a
ret
end
PERCOBAAN VI
PENGENDALIAN MOTOR STEPPER
6.1 Tujuan Percobaan
- Memahami hardware dan software pengaturan motor stepper
- Memahami algoritma dan flowchart pemrograman
- Memahami program pengaturan gerakan motor stepper
6.2 Alat dan Bahan
- Modul utama emulator MK51 beserta perlengkapannya
- Modul driver dan motor stepper
- PC dan software praktikum
6.3 Deskripsi Percobaan
Pada modul ini digunakan suatu modul output yang terdiri dari sebuah motor stepper. Motor stepper sering digunakan pada peralatan – peralatan elektronika dan mempunyai fungsi untuk mengatur gerakan “plant/hardware”, juga banyak digunakan pada robot – robot baik industri maupun robot pada laboratorium. Keunggulan motor stepper dibandingkan dengan motor yang lain adalah motor stepper mampu memberikan gerakan “langkah per langkah” sehingga baik untuk operasi plant/hardware yang mengutamakan ketepatan posisi.
Sesuatu yang perlu diperhatikan dalam menjalankan motor stepper adalah motor tersebut dapat berjalan dengan memberikan suatu tegangan logika yang tentunya telah melalui driver motor terlebih dahulu.
Adapun tabel logika tegangannya (fullstep) adalah sebagai berikut:
Step 1 | Step 2 | Step 3 | Step 4 | |
Phase 1 | 1 | 0 | 0 | 0 |
Phase 2 | 0 | 1 | 0 | 0 |
Phase 3 | 0 | 0 | 1 | 0 |
Phase 4 | 0 | 0 | 0 | 1 |
Logika di atas adalah untuk 4 step dan dengan torsi kecil. Adapun bila kita ingin menghasilkan torsi yang besar maka kita harus mengubah logikanya menjadi sebagai berikut:
Step 1 | Step 2 | Step 3 | Step 4 | |
Phase 1 | 1 | 1 | 0 | 0 |
Phase 2 | 0 | 1 | 1 | 0 |
Phase 3 | 0 | 0 | 1 | 1 |
Phase 4 | 1 | 0 | 0 | 1 |
Untuk menghasilakan torsi yang lebih besar:
Step 1 | Step 2 | Step 3 | Step 4 | |
Phase 1 | 1 | 1 | 1 | 0 |
Phase 2 | 0 | 1 | 1 | 1 |
Phase 3 | 1 | 0 | 1 | 1 |
Phase 4 | 1 | 1 | 0 | 1 |
NB: yang perlu diperhatikan disini adalah bahwa motor stepper tersebut butuh catu antara 8-12 Volt. Bila diberi tegangan terlalu kecil maka motor tersebut tidak mau berputar.
Pada percobaan digunakan software yang merupakan suatu contoh sederhana untuk mengaktifkan motor stepper dengan suatu tundaan dan mengaktifkan port 1; dan port a PPI. Pada percobaan ini disarankan untuk membuat delay lama, karena bila delaynya terlalu cepat maka motor stepper akan bergetar (kondisi on-off motor stepper terjadi terus menerus). Hal ini dapat menyebabkan kerusakan pada motor stepper.
Selain metode full step, motor stepper juga dapat dikendalikan dengan metode half step sehingga gerakan motor dapat lebih halus.
6.4 Cara Kerja
6.4.1 Full Step
- Buatlah program P6.1 dengan text editor dengan nama MotAxx.asm (dengan xx adalah nama kelompok anda). Default compiler tidak case sensitive, artinya penggunaan huruf besar atau huruf kecil sama saja, ‘StarT’ sama dengan ‘START’.
- Compile MotAxx.asm sehingga menghasilkan file MotAxx.hex dan MotAxx.lst. Perhatikan bahwa hasil compile tidak boleh ada kesalahan.
- Download MotAxx.hex dengan program aem.exe atau hyperterminal ke target emulator.
- Verivy program yang telah didownload ke target emulator dengan file MotAxx.hex di disk, bila verivy ok maka teruskan percobaan. Untuk setiap percobaan dengan program yang berbeda, langkah – langkah 1 s/d 4 harus dilakukan, bila ada kesalahan lihat file .lst-nya (di dalam text editor) kemudian amati kesalahan yang terjadi. Betulkan file asm-nya (ulangi langkah 1 s/d 4), sehingga no error found.
- Jalankan program dengan menekan tombol a (goto 4030h)
- Amati arah dan gerakan motor stepper, hitung jumlah gerakan dan sudut yang ditempuh.
- Untuk menghentikan program dan kembali ke monitor (prompt*), tekan reset pada target emulator.
- Selama catu daya di target emulator tidak dimatikan, berarti program yang didownload tetap ada.
- Dari listing program di atas dan dari pengamatan gerakan motor, buatlah algoritma dan flowchart program !
- Jelaskan bagaimana cara kerja software dan cara kerja hardware !
6.4.2 Half Step
Lakukan langkah-langkah percobaan A terhadap program P6.2 dan simpan file dengan nama MotBxx.asm, jumlah gerakan dihitung hingga dicapai sudut yang sama dengan percobaan A. Bandingkan!
Dari data percobaan hitung sudut gerakan motor untuk setiap langkah. Buat program sederhana untuk menggerakkan motor stepper kekanan kemudian kekiri dengan susut tertentu yang berbeda dengan metode yang berbeda pula. Analisa program tersebut!
Listing program percobaan 6
;=========================================
;P6.1 Pengendalian Motor Stepper Full Step
;=========================================
$MOD51
org 4030h
mov A,#10001000b ;or 11001100b or 11101110b
start:
rl A ;diganti dengan rr
mov P1,A
acall tunda
sjmp start
tunda:
mov R0,#0FFh
tunda1:
mov R1,#03Fh
tunda2:
mov R2,#03Fh
djnz R2,$
djnz R1,tunda2
djnz R0,tunda1
ret
end
;=========================================
;P6.2 Pengendalian Motor Stepper Half Step
;=========================================
$MOD51
org 4030h
mov A,#10001000b
mulai:
mov P1,A
acall tunda
mov B,A
rr A ;diganti dengan r1
orl B,A
mov P1,B
acall tunda
sjmp start
tunda:
mov R0,#0FFh
tunda1:
mov R1,#03Fh
tunda2:
mov R2,#03Fh
djnz R2,$
djnz R1,tunda2
djnz R0,tunda1
ret