BERBAGILAH DALAM HAL KEBAIKAN TERMASUK ILMU WALAU CUMA SETITIK....

3/18/2011

Belajar Pemograman


                                                              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
  1. 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”.
  2. 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)
  3. Jika terjadi adanya kesalahan, buka file tesppi.lst. Cari tanda panah yang menunjukkan adanya kesalahan.
  4. 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 ].
  5. 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 )
  1. Jalankan program dengan menekan tombol a (goto 4030h)
  2. Gunakan led atau logic tester atau osiloskop pada semua port P1, PA, PB, PC, laporkan hasilnya
  3. Untuk menghentikan program dan kembali ke monitor (prompt*), tekan reset pada target emulator (tekan ^ I  lalu tekan ^ H atau backspace)
  4. Selama catu daya di target emulator tidak dimatikan, berarti program yang di download tetap ada
  5. Bagaimana cara mempercepat atau memperlambat kedipan port tersebut? Buatlah programnya dan coba jalankan
  6. Jika perintah AJMP XX, dirubah menjadi LJMP XX, apa yang terjadi? Jalankan program dan lihat hasilnya. Lihat perbedaan hasil data yang dikirimkan.
  7. Jika perintah AJMP XX, dirubah menjadi SJMP XX, apa yang terjadi? Jalankan program dan lihat perbedaan hasil data yang dikirimkan.
  8. Apa gunanya subrutine delay, apa pengaruhnya bila dihilangkan? (untuk menghilangkan perintah tidak usah dihapus cukup diberi tanda “ ; ”)

1.3.2    Waktu Eksekusi
  1. Buat program P1.2 dengan nama siklus .asm, compile dan download
  2. 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).
  1. Coba ubah baudrate dengan mengubah nilai th1. Ulangi langkah satu.
  2. 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).
  3. 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
  1. 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’.
  2. Compile MotAxx.asm sehingga menghasilkan file MotAxx.hex dan MotAxx.lst. Perhatikan bahwa hasil compile tidak boleh ada kesalahan.
  3. Download MotAxx.hex dengan program aem.exe atau hyperterminal ke target emulator.
  4. 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.
  5. Jalankan program dengan menekan tombol a (goto 4030h)
  6. Amati arah dan gerakan motor stepper, hitung jumlah gerakan dan sudut yang ditempuh.
  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 gerakan motor, buatlah algoritma dan flowchart program !
  10. 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
end

                Schematic Simultor

 

Share