Kamis, 02 Januari 2014

Interrupt

IE (Interupt Enable)
Register  ini  terdiri  dari  8  biat  dan  bit  addressable,  register  ini  digunakan  untuk mengaktifkan register yang kita inginkan yang terdapat pada mikrokontroler.


IP (Interrupt Priority)

Register  ini  terdiri  dari  8  bit  dan  bit  addressable,  register  ini  digunakan  untuk memilih prioritas interupsi, interupsi dengan prioritas lebih tinggi akan dieksekusi terlebih dahulu jika terjadi 2 interupsi pada waktu yang sama.


PROSEDUR PERCOBAAN
-Penggunaan INT0 dengan Interrupt Enable
Persiapan:
·         Hubungkan  Port  1  DT-51  MinSys  dengan  “PORT  OUTPUT”  DT-51  Trainer
·         Board menggunakan kabel tipe Y.
·         Hubungkan  “CONTROL”  DT-51  MinSys  dengan  “CONTROL”  DT-51  Trainer
·         Board  (sebagai  sumber  tegangan  dan  koneksi  INT0/INT1)  menggunakan
·         kabel tipe X.
·         Hubungkan “IS1” dengan “INT0” pada DT-51 Trainer Board.
·         Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial.
·         Hubungkan DT-51 MinSys dengan sumber tegangan.




Program1.1:
Ketiklah  program  berikut  ini,  assemble,  download  ke  DT-51  MinSys,  dan  amati hasilnya:
$mod51
                CSEG
                ORG 4000H
                LJMP START
                ORG 4003H
                RL A
                MOV P1, A
                MOV R7, #04H
LUPA:
                MOV R6, #OFFH
LUPB:
                MOV R5, #OFFH
                DJNZ R5, $
                DJNZ R6, LUPB
                DJNZ R7, LUPA
                RETI
                ORG 4200H
;inisialisasi
START:
                MOV SP, #30H
                MOV TCON, #01H
                MOV A, #01H
                MOV P1, #01H
                MOV IE, #81H
                SJMP $
END

Catatan:
-Untuk menggunakan INT0 dengan falling edge trigger (transisi dari high ke low), maka IT0 (TCON.0) berlogika ‘1’, sehingga TCON bernilai ‘00000001b’ atau ‘01h’.
-Untuk mengaktifkan interrupt, maka EX0(IE.0) dan EA (IE.7) berlogika ‘1’ sehingga IE bernilai ‘10000001b’ atau ‘81h’.
-Perhatikan bahwa pada saat interrupt, program akan melompat ke alamat vektor 0003h, tetapi oleh DT-51 MinSys akan langsung dipindah ke alamat 4003h.

-Penggunaan INT0 dan INT1 dengan Interrupt Priority
Persiapan:
·         Hubungkan  Port  1  DT-51  MinSys  dengan  “PORT  OUTPUT”  DT-51  Trainer
·         Board menggunakan kabel tipe Y.
·         Hubungkan  “CONTROL”  DT-51  MinSys  dengan  “CONTROL”  DT-51  Trainer
·         Board  (  sebagai  sumber  tegangan  dan  koneksi  INT0/INT1  )  menggunakan
·         kabel tipe X.
·         Hubungkan  “IS1”  dengan  “INT0”  dan  “IS2”  dengan  “INT1”  pada  DT-51
·         Trainer Board.
·         Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial.
·         Hubungkan DT-51 MinSys dengan sumber tegangan.
Program 1.3:
Ketiklah  program  berikut  ini,  assemble,  download  ke  DT-51  MinSys,  dan  amati hasilnya:
$mod51
                CSEG
                ORG 4000H
                LJMP START
                ORG 4003H
                LJMP INTER0
                ORG 4013H
                LJMP INTER1
                ORG 4100H
INTER0:
                MOV P1, #0H
                SETB P1.0
                LCALL LDELAY
                CLR P1.0
                RETI
INTER1:
                 MOV P1, #0H
                SETB P1.7
                LCALL LDELAY
                CLR P1.7
                RETI
                ORG 4200H
LDELAY:
                PUSH 7
                PUSH 6
                PUSH 5
                MOV R7, #24H
LUPA: 
                MOV R6, #0FFH
LUPB:  
                MOV R5, #0FFH
                DJNZ R5, $
                DJNZ R6, LUPB
                DJNZ R7, LUPA
                POP 5
                POP 6
                POP 7
                RET
SDELAY:
                PUSH 7
                PUSH 6
                PUSH 5
                MOV R7, #04H


LUP1:  
                MOV R6, #0FFH
LUP2:  
                MOV R5, #0FFH
                DJNZ R5, $
                DJNZ R6, LUP2
                DJNZ R7, LUP1
                POP 5
                POP 6
                POP 7
                RET
;inisialisasi
START: 
                MOV SP, #30H
                MOV TCON, #05H
                MOV IP, #04H
                MOV IE, #85H
;program utama
LOOP1:
                MOV P1, #01010101B
                ACALL SDELAY
                MOV P1, #10101010B
                ACALL SDELAY
                SJMP LOOP1
END

-Jika  tidak  ada  kesalahan,  program  tersebut  akan  menampilkan  nyala  LED  yang bergantian antara nyala LED ”Bit 6”, ”Bit 4”, ”Bit 2”, dan ”Bit 0” dengan nyala LED ”Bit 7”,”Bit 5”, ”Bit 3”, dan ”Bit 1”. Setiap kali ada penekanan keypad ”IS1”, hanya LED  ”Bit  0”  yang  akan  menyala.  Setiap  kali ada  penekanan  keypad  ”IS2”,  hanya LED ”Bit 7” yang akan menyala.

Catatan:
-Untuk menggunakan INT0 dan INT1 dengan falling edge trigger (transisi dari high
ke low), maka IT1 (TCON.2) dan IT0 (TCON.0) berlogika ’1’, sehingga TCON bernilai
’00000101b’ atau ’05h’.
-Untuk memindah INT1 ke tingkat prioritas lebih tinggi, maka PX1 (IP.2) berlogika ’1’, sehingga IP bernilai ’00000100b’ atau ’04h’.
-Untuk  mengaktifkan  INT0  dan  INT1,  maka  EX0  (IE.0),  EX1  (IE.2),  dan  EA  (IE.7) berlogika ’1’, sehingga IE bernilai ’10000101b’ atau ’85h’.
-Rutin  interrupt  pada  alamat  vektor  4003h  dan  4013h  dipindah  ke  alamat  lain dengan  perintah  LJMP.  Hal  ini  dilakukan  agar  rutin  dapat  lebih  panjang  tanpa khawatir menerjang alamat vektor berikutnya.
-Perhatikan  bahwa  penekanan  keypad  ”IS2”  dapat  menginterupsi  rutin  dari penekanan  keypad  ”IS1”  tetapi  tidak  dapat  sebaliknya.  Hal ini  dikarenakan  INT1 berada  pada  tingkat  prioritas  lebih  tinggi.  Jadi  jika  keypad  ”IS1”  ditekan  setelah keypad  ”IS2”  ditekan,  LED  ”Bit  7”  akan  menyala  hingga  delay  selesai  dieksekusi baru kemudian LED ”Bit 0” akan menyala.
-Perhatikan  bahwa  SDELAY  menggunakan  alamat  yang  sama  dengan  LDELAY.
-Untuk menghindari kekacauan nilai, maka diperlukan PUSH dan POP

LCD 2 x 16 KARAKTER


                Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti AT89S51. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut:



-Display  karakter  pada  LCD  diatur  oleh  pin  EN,  RS  dan  RW:  Jalur  EN  dinamakan  Enable.  Jalur  ini digunakan untuk memberitahu LCD bahwa anda sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus dibuat logika low “0” dan set pada dua jalur kontrol yang lain  RS  dan  RW.  Ketika  dua  jalur  yang  lain  telah  siap,  set  EN  dengan  logika  “1”  dan  tunggu  untuk sejumlah waktu tertentu ( sesuai dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi.
-Jalur  RS  adalah  jalur  Register  Select.  Ketika  RS  berlogika  low  “0”,  data  akan  dianggap  sebagai  sebuahperintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data yang  dikirim  adalah  data  text  yang  akan  ditampilkan  pada  display  LCD.  Sebagai  contoh,  untuk menampilkan huruf “T” pada layar LCD maka RS harus diset logika high “1”.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka program akan melakukan
pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user ).
-Pada kasus bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7
-Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,

Materi lengkap dapat di download disini

Seven Segment

Langkah:
1.  Hubungkan P1 DT51 MinSysn dengan “DATA 7S” DT-51 trainer board.
2.  Hubungkan Port C DT51 MinSysn dengan “I/P S KEY” DT-51 trainer board.
3.  Hubungkan CONTROL DT-51 Min Sys dengan CONTROL DT-51 trainer board.
4.  Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial

5.  Hubungkan Dt-51 MInSys dengansumber tegangan
Teori
                Seven  segment  adalah  diode  LED  sebanyak  7  buah  yang  disusun  dan  dikemas
membentuk penampil angka, dan biasanya ditambahkan 1 buah LED untuk koma (Dot Point).
Karena dibentuk dari kumpulan LED maka ada dua jenis seven segment, yaitu Common Anode
(CA) dan Common Catode (CC).
                Untuk penyalakan seven segment jenis CC maka masukan segment a s/d Dp harus diberi
logika  tinggi  dan  bagian  CC  dihubungkan  dengan  Ground.   Sedangkan  jika  ingin  menyalakan
seven segment jenis CA maka masukan segment a s/d Dp harus diberi logika LOW dan CA harus
dihubungkan ke +5 VCC.



ALAMAT PENTING MODUL DT-51 adalah sbb:
1.  PA (port A)       = 2000h
2.  PB (port B)       = 2001h
3.  PC (port C)       = 2002h
4.  Reg CW (Control Word)  = 2003h
5.  DIGIT1        = 80h
6.  DIGIT2        = 40h
                Dari  gambar  rangkaian  di  atas  saluran  data  tampilan  angka  menggunakan  P1  yang  dipakai bersama  antara  digit1  dan  digit  2  sehingga  jika  ingin  menampilkan  angka  bersama  (tampil  2 digit  sekaligus)  dilakukan  secara  bergantian  secara  cepat  sehingga  tampil  seolah-olah berbarengan.  Catatan  penting  untuk  tampilan  secara  bergatian  dari  digit1  ke  digit2  harus diselingi  dengan  mematikan semua sesaat, karena jika tidak  dimatikan sesaat  maka tampilan angka akan tumpang tindih.

PROGRAM 1
;--------------------------------
; contoh scanning seven segment
; menampilkan angka 51
;--------------------------------
$mod51
                PORTC  EQU  2002H
                CW    EQU  2003H
                CSEG
                ORG  4000H
                LJMP START
DELAY:  MOV  R6, #0FH
LUP:       MOV  R7, #0FFH
                DJNZ R7, $
                DJNZ R6, LUP
                RET
START:  MOV  SP, #30H
                MOV  DPTR, #CW
                MOV  A, #80H
                MOVX @DPTR, A
LOOP:
;menampilkan angka 5 di seven segment 1
                MOV  DPTR, #PORTC
                MOV  A, #80H
                MOVX @DPTR, A
                MOV  P1, #6DH
                LCALL DELAY
                MOV P1,#00H
;menampilkan angka 7 di seven segment 2
                MOV  A, #40H
                MOVX @DPTR, A
                MOV  P1, #07H
                LCALL DELAY
                MOV P1,#00H
                SJMP LOOP
END

Sistem Input Output (Contoh Led Ber-password)

ALAMAT PORT tambahan pada system DT-51 adalah sbb:
1.  PA (port A)       = 2000h
2.  PB (port B)       = 2001h
3.  PC (port C)       = 2002h
4.  Reg CW (Control Word)  = 2003h

PA adalah PORT tambahan (eksternal) diluar mikrokontroler, yang disediakan dari IC PPI 8255.
Mikrokontroler dapat menggunakan PA ini dengan cara MEMPROGRAMNYA TERLEBIH DAHULU lewat register internal PPI 8255 yaitu register CW (control word).
Contoh Memprogram semua Port PPI 8255 (PA, PB, PC) sebagai output, maka reg CW harus
diberi data 80h (lihat manual PPI 8255).
Code:
                MOV DPTR,#2003H
                MOV A, #80H
                     MOVX @DPTR,A

Program 1 LED Berpassword
% Membaca data password dari P1, jika PWD benar, LED DI PA nyala
% ==============================================================
$mod51
                PWD    EQU 22H
                CW    EQU 2003h
                CSEG
                ORG  4000H
                LJMP START
                ORG  4100H
START:
                MOV  SP, #30H
INIT:      MOV  DPTR, #CW  ; proses isi cw dg data 80H
                MOV  A, #80H
                MOVX @DPTR, A
                MOV A,P1
BACA_PWD:
                CJNE A,#PWD, MATI
NYALA: 
                MOV  DPTR, #2000H ; jika=1 nyalakan semua LED
                MOV  A, #0FFH
                MOVX @DPTR, A
                SJMP BACA_PWD
MATI:    MOV  DPTR, #2000H ; jika=0 matikan semua LED
                MOV  A, #00H
                MOVX @DPTR, A
                SJMP BACA_PWD

END

AKSES DATA SECARA LOOK UP TABLE


-Teori
Akses  data  ke  alamat  memori  dapat  dilakukan  secara  berurutan  (indeks)  dengan  melibatkan  register DPTR, A dan register pencacah data misal R0.
Contoh:
MULAI:  MOV DPTR,#DATALED  ; isi reg DPTR dengan alamat awal data
       MOV R0,#00H  ; siapkan R0 sbdg pencacah data
NEXT:  CLR A  ; kosongkan isi reg A
      MOVC A,@A+DPTR  ; copy data dari alamat data yg ditunjuk DPTR ke A
      INC DPTR  ; naikkan alamat
      INC R0  ; naikkan pencacah data
      CJNE R0,#08h,NEXT  ; apakah cacah data sudah 8, jika belum ke next data
Program I RUNNING LED MANUAL
$mod51
CSEG
                ORG  4000H
                LJMP START
                ORG  4100H
START:
                MOV P1,#00000001B
                ACALL TUNDA
                MOV P1,#00000010B
                ACALL TUNDA
                MOV P1,#00000100B
                ACALL TUNDA
                MOV P1,#00001000B
                ACALL TUNDA
                MOV P1,#00010000B
                ACALL TUNDA
                MOV P1,#00100000B
                ACALL TUNDA
                MOV P1,#01000000B
                ACALL TUNDA
                MOV P1,#10000000B
                ACALL TUNDA
                LJMP START
TUNDA: MOV R7,#01H
LUP1:    MOV R6,#0FFH
LUP2:    MOV R5,#0FFH
                DJNZ R5,$
                DJNZ R6,LUP2
                DJNZ R7, LUP1
                RET
END
Program 2 RUNNING LED DENGAN LOOP UP TABLE
; PROGRAM AKSES DATA (LOOK UP TABLE)
; AKSES DATA BERURUTAN YANG DI SIMPAN DI TABEL DATA
; DI AKSESES DGN BANTUAN REG DPTR, REG A dan RO
; ==============================================
$MOD51
                CSEG
                ORG 4000h
                LJMP MULAI
                ORG 4100h
MULAI:  MOV DPTR,#DATALED
                MOV R0,#00H
NEXT:  CLR A
                MOVC A,@A+DPTR
                CPL A
                MOV P1,A
                INC DPTR
                ACALL TUNDA
                INC R0
                CJNE R0,#08h,NEXT
                SJMP MULAI
;=======PROSEDUR TUNDA===
TUNDA:  MOV R7,#01h
LUP1:    MOV R6,#0FFh
LUP2:    MOV R5,#0FFH
                DJNZ R5, $
                DJNZ R6,LUP2
                DJNZ R7,LUP1
                RET
;=======PROSEDUR TUNDA==END
DATALED:
DB 00000001b
DB 00000010b
DB 00000100b
DB 00001000b
DB 00010000b
DB 00100000b
DB 01000000b
DB 10000000b
END

BASIC I/O P1 SEBAGAI INPUT


ALAMAT PORT tambahan pada system DT-51 adalah sbb:
1.  PA (port A) = 2000h
2.  PB (port B) = 2001h
3.  PC (port C) = 2002h
4.  Reg CR = 2003h
 PA adalah PORT tambahan (eksternal) diluar mikrokontroler, yang disediakan dari IC PPI 8255,
Mikrokontroler dapat menggunakan PA ini dengan cara MEMPROGRAMNYA TERLEBIH DAHULU lewat register internal PPI 8255 yaitu register CW (control word).

Program I Membaca data dari P1
-Membaca data bit p1.4, jika bernilai 1 maka LED
-di PA akan nyala,Jika tidak maka semua LED akan mati
$mod51
CSEG
ORG  4000H
LJMP START
ORG  4100H
START:
MOV  SP, #30H
INIT:  MOV  DPTR, #2003H  ; proses isi cw dg data 80H
MOV  A, #80H
MOVX @DPTR, A
LABEL1:  JB   P1.4, DISPLAY  ; baca bit p1.4
DISPLAY2: MOV  DPTR, #2000H  ; jika=0 matikan semua LED
MOV  A, #00H
MOVX @DPTR, A
SJMP LABEL1
DISPLAY:  MOV  DPTR, #2000H  ; jika=1 nyalakan semua LED
MOV  A, #0FFH
MOVX @DPTR, A
SJMP LABEL1
END

Program 2
$mod51
CSEG
                ORG  4000H
                LJMP START
                ORG  4100H
START:
                MOV  SP, #30H
INIT:       MOV  DPTR, #2003H
                MOV  A, #80H
                MOVX @DPTR, A
LABEL1:  MOV  C, P1.5
                JC  DISPLAY
                MOV  C, P1.0
                JNC  DISPLAY3
DISPLAY2: MOV  DPTR, #2000H
                MOV  A, #00H
                MOVX @DPTR, A
                SJMP LABEL1
DISPLAY:  MOV  DPTR, #2000H
                MOV  A, #20H
                MOVX @DPTR, A
                SJMP LABEL1
DISPLAY3: MOV  DPTR, #2000H
                MOV  A, #01H
                MOVX @DPTR, A
                SJMP LABEL1
END

Program 3
$mod51
                CSEG
                ORG  4000H
                LJMP START
                ORG  4100H
START:
                MOV  SP, #30H
INIT:      MOV  DPTR, #2003H
                MOV  A, #80H
                MOVX @DPTR, A
LABEL1:  MOV  R1, P1
DISPLAY:  MOV  DPTR, #2000H
                MOV  A, R1
                MOVX @DPTR, A
                SJMP LABEL1
END