Jumat, 11 September 2015

PORT PARALEL AT89S51


Gambar Antarmuka Port 1 dengan LED


Prinsip kerja Hardware, yaitu saat kita memberikan logika 0 pada port 1 maka kita akan mendapatkan led menyala. Hal ini dikarenakan terjadi perbedaan tegangan pada kaki anoda dan katoda, saar kita memberikan logika 1, maka Led akan padam karena disana kita menggunakan conmmon anoda yang terhubung dengan VCC.
Contoh program sederhana untuk menyalakan Led.
$MOD51
org 00h                 ; Alamat mulainya program
mov p1,#00H             ; keluarkan data ke port 1 dengan nilai 00
                        ; Hexa atau 00000000 ;Biner end     ; done


Ketik Program seperti diatas,
Simpan pada direktori yang sama dengan direktori ASM51, misal C:\Mikro\.
Lakukan Proses Assembly dengan masuk ke dos, yaitu masuk direktori C:\Mikro\
Ketikkan perintah Asm51 Nama_file.asm
Pastikan tidak ada error
Ketikkan perintah OH Nama_file.OBJ

Sekarang kita sudah punya file Hexa nya, yang diahasilkan dari proses diatas Buka Program ISP-Flash Programmer Version 30.a Pilih Open File, dan masukkan program yang akan kita isikan ke mikrokontroler Yang terakhir Klik Write. Dan pastikan tidak ada error

Pasang Power Suplay, hubungkan mikrokontroler dengan PC menggunakan DB25 Cable. Tampilan Led yang dipasang pada modul adalah Led pada port 1
Program diatas hanya menyalakan Led pada port 1, dengan cara memberikan data ke port 1 berupa bilangan 00 Hexa, karena sifat dari hardware active low, maka led menyala.
Program untuk membuat led Flip Flop pada Port 1
$MOD51
; Lampu flip-flop pada Port 1
ORG   0H                             ; program ditempatkan pada lokasi 0000H
MULAI: 
MOV   P1,#00001111B         ; LED P1.4 s/d P1.7 nyala (heksa= #0FH)
ACALL DELAY                ; lakukan penundaan sesaat (sub. DELAY)
MOV   P1,#11110000B         ; LED P1.0 s/d P1.3 nyala (heksa= #0F0H)
ACALL DELAY                ; lakukan penundaan sesaat (sub. DELAY)
SJMP  MULAI                 ; ulangi lagi dari awal

;-subrutin DELAY-----------------------------------------------------------
;
; subrutin ini hanya sekedar melakukan penundaan sesaat dengan cara
; mengulangi proses (pengurangan isi register) hingga dicapai suatu
; kondisi tertentu
;
;--------------------------------------------------------------------------
DELAY:  MOV   R0,#5H            ; Isi Register R0 dengan 5 (5x ulang)
DELAY1: MOV   R1,#0FFH          ; Isi Register R1 dengan 255 (255x ulang  DELAY1: MOV   R1,#0FFH
DELAY2: MOV   R2,#0             ; Isi register R2 dengan 0 (256x ulang)
        DJNZ  R2,$              ; R2=R2-1, jika R2 belum 0 ulangi lagi
        DJNZ  R1,DELAY2         ; R1=R1-1, jika R1 belum 0 ulangi DELAY2
        DJNZ  R0,DELAY1         ; R0=R0-1, jika R0 belum 0 ulangi DELAY1
        RET                     ; Kembali ke pemanggil subrutin DELAY
END

Yang Pertama dilakukan adalah memberikan data ke port 1 0FH, sehingga 4 led menyala dan 4 led padam, kemudian kita menunda waktu dengan menggunakan looping program. Tunda waktu diperlukan agar efek kedipan led terlihat mata

Program Untuk membuat led ping pong ;

;----------------------------------------------------------------------
; Lampu menyala pingpong kiri ke kanan, kanan ke kiri di port 1
;----------------------------------------------------------------------
$MOD51
ORG   0H                    ; program ditempatkan pada lokasi 0000H
MOV A, #0FEH                ; simpan data 11111110B ke akumulator
                            ; (P1.0 menyala duluan)
MULAI: 
MOV P1,A                    ; kirim data ke Port 1
ACALL DELAY                 ; tunda sebentar
RL A                        ; putar isi akumulator ke kiri 1 bit
CJNE A,#7FH,MULAI           ; apakah A=01111111B ?
                            ;Tidak, ulangi lagi!
MULAI1:                     ; Ya, lanjutkan ke proses berikut...
      MOV P1,A                ; kirim data ke Port 1
      ACALL DELAY             ; tunda sebentar
      RR A                    ; putar isi akumulator ke kanan 1 bit
      CJNE A,#0FEh,MULAI1     ; apakah A=11111110B ?
; Tidak, ulangi lagi!
      SJMP MULAI              ; Ya, ulangi lagi dari paling awal...

Delay:
Mov R0,#0               ; Isi Register R0 dengan 0 (256x ulang)
Delay1: Mov R1,#0             ; Isi Register R1 dengan 0 (256x ulang)
      Djnz R1,$
      Djnz R0,Delay1
      Ret
      End

Tidak ada komentar:

Posting Komentar