Minggu, 26 November 2017
Mikroprosesor1 8086
1. Dasar Teori
[kembali]
A. Keypad
Tombol keypad matrik 4x3 adalah susunan dari beberapa buah saklar tekan (push button) yang disusun secara matrix. Dipasaran terdapat beberapa jenis tombol keypad, dan yang paling sering digunakan diantaranya adalah tombol keypad 4x3 dan 4x4. Susunan tombol tekan yang disusun secara matrik menjadi sebuah keypad dapat dilihat pada gambar berikut:
Ketujuh atau kedelapan pin tersebut adalah 3 pin untuk kolom dan 4 pin untuk baris. Untuk mengakses keypad ini tidak seperti push button biasa. Adapun cara yang saya pakai untuk mengakses keypad ini adalah dengan metode scanning.
Dengan menggunakan mikrokontroler hal ini sangat mudah dilakukan, karena mengingat mikrokontroler memiliki frekuensi clock yang tinggi. Misalnya saya menggunakan ATmega32 kemudian saya hubungkan pin keypad secara urut dari baris kemudian kolom ke pin mikrokontroler.
row1 -> PINC.0
row2 ->PINC.1
row3 ->PINC.2
row4 ->PINC.3
col1 ->PINC.4
col2 ->PINC.5
col3 ->PINC
B. LCD
Display elektronik adalah salah satu komponen elektronika yang berfungsi sebagai tampilan suatu data, baik karakter, huruf ataupun grafik. LCD (Liquid Cristal Display) adalah salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic yang bekerja dengan tidak menghasilkan cahaya tetapi memantulkan cahaya yang ada di sekelilingnya terhadap front-lit atau mentransmisikan cahaya dari back-lit. LCD (Liquid Cristal Display) berfungsi sebagai penampil data baik dalam bentuk karakter, huruf, angka ataupun grafik.
Pengendali / Kontroler LCD (Liquid Cristal Display
Dalam modul LCD (Liquid Cristal Display) terdapat microcontroller yang berfungsi sebagai pengendali tampilan karakter LCD (Liquid Cristal Display). Microntroller pada suatu LCD (Liquid Cristal Display) dilengkapi dengan memori dan register. Memori yang digunakan microcontroler internal LCD adalah
DDRAM (Display Data Random Access Memory) merupakan memori tempat karakter yang akan ditampilkan berada.
CGRAM (Character Generator Random Access Memory) merupakan memori untuk menggambarkan pola sebuah karakter dimana bentuk dari karakter dapat diubah-ubah sesuai dengan keinginan.
CGROM (Character Generator Read Only Memory) merupakan memori untuk menggambarkan pola sebuah karakter dimana pola tersebut merupakan karakter dasar yang sudah ditentukan secara permanen oleh pabrikan pembuat LCD (Liquid Cristal Display) tersebut sehingga pengguna tinggal mangambilnya sesuai alamat memorinya dan tidak dapat merubah karakter dasar yang ada dalam CGROM.
Register control yang terdapat dalam suatu LCD diantaranya adalah.
Register perintah yaitu register yang berisi perintah-perintah dari mikrokontroler ke panel LCD (Liquid Cristal Display) pada saat proses penulisan data atau tempat status dari panel LCD (Liquid Cristal Display) dapat dibaca pada saat pembacaan data.
Register data yaitu register untuk menuliskan atau membaca data dari atau keDDRAM. Penulisan data pada register akan menempatkan data tersebut keDDRAM sesuai dengan alamat yang telah diatur sebelumnya.
Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah :
Pin data adalah jalur untuk memberikan data karakter yang ingin ditampilkan menggunakan LCD (Liquid Cristal Display) dapat dihubungkan dengan bus data dari rangkaian lain seperti mikrokontroler dengan lebar data 8 bit.
Pin RS (Register Select) berfungsi sebagai indikator atau yang menentukan jenis data yang masuk, apakah data atau perintah. Logika low menunjukan yang masuk adalah perintah, sedangkan logika high menunjukan data.
Pin R/W (Read Write) berfungsi sebagai instruksi pada modul jika low tulis data, sedangkan high baca data.
Pin E (Enable) digunakan untuk memegang data baik masuk atau keluar.
Pin VLCD berfungsi mengatur kecerahan tampilan (kontras) dimana pin ini dihubungkan dengan trimpot 5 Kohm, jika tidak digunakan dihubungkan ke ground, sedangkan tegangan catu daya ke LCD sebesar 5 Volt.
1.2 Fitur LCD 16x2
Adapun fitur yang disajikan dalam LCD ini adalah :
a. Terdiri dari 16 karakter dan 2 baris.
b. Mempunyai 192 karakter tersimpan.
c. Terdapat karakter generator terprogram.
d. Dapat dialamati dengan mode 4-bit dan 8-bit.
e. Dilengkapi dengan back light.
Spesifikasi Kaki LCD 16 x 2
Pin Deskripsi
1 Ground
2 Vcc
3 Pengatur kontras
4 “RS” Instruction/Register Select
5 “R/W” Read/Write LCD Registers
6 “EN” Enable
7-14 Data I/O Pins
15 Vcc
16 Ground
Prinsip Kerja LCD
Pada aplikasi umumnya RW diberi logika rendah “0”. Bus data terdiri dari 4-bit atau 8-bit. Jika jalur data 4-bit maka yang digunakan ialah DB4 sampai dengan DB7. Sebagaimana terlihat pada table diskripsi, interface LCD merupakan sebuah parallel bus, dimana hal ini sangat memudahkan dan sangat cepat dalam pembacaan dan penulisan data dari atau ke LCD. Kode ASCII yang ditampilkan sepanjang 8-bit dikirim ke LCD secara 4-bit atau 8 bit pada satu waktu. Jika mode 4-bit yang digunakan, maka 2 nibble data dikirim untuk membuat sepenuhnya 8-bit (pertama dikirim 4-bit MSB lalu 4-bit LSB dengan pulsa clock EN setiap nibblenya). Jalur kontrol EN digunakan untuk memberitahu LCD bahwa mikrokontroller mengirimkan data ke LCD. Untuk mengirim data ke LCD program harus menset EN ke kondisi high “1” dan kemudian menset dua jalur kontrol lainnya (RS dan R/W) atau juga mengirimkan data ke jalur data bus.
Saat jalur lainnya sudah siap, EN harus diset ke “0” dan tunggu beberapa saat (tergantung pada datasheet LCD), dan set EN kembali ke high “1”. Ketika jalur RS berada dalam kondisi low “0”, data yang dikirimkan ke LCD dianggap sebagai sebuah perintah atau instruksi khusus (seperti bersihkan layar, posisi kursor dll). Ketika RS dalam kondisi high atau “1”, data yang dikirimkan adalah data ASCII yang akan ditampilkan dilayar. Misal, untuk menampilkan huruf “A” pada layar maka RS harus diset ke “1”. Jalur kontrol R/W harus berada dalam kondisi low (0) saat informasi pada data bus akan dituliskan ke LCD. Apabila R/W berada dalam kondisi high “1”, maka program akan melakukan query (pembacaan) data dari LCD. Instruksi pembacaan hanya satu, yaitu Get LCD status (membaca status LCD), lainnya merupakan instruksi penulisan. Jadi hampir setiap aplikasi yang menggunakan LCD, R/W selalu diset ke “0”. Jalur data dapat terdiri 4 atau 8 jalur (tergantung mode yang dipilih pengguna), DB0, DB1, DB2, DB3, DB4, DB5, DB6 dan DB7. Mengirim data secara parallel baik 4-bit atau 8-bit merupakan 2 mode operasi primer. Untuk membuat sebuah aplikasi interface LCD, menentukan mode operasi merupakan hal yang paling penting.
Mode 8-bit sangat baik digunakan ketika kecepatan menjadi keutamaan dalam sebuah aplikasi dan setidaknya minimal tersedia 11 pin I/O (3 pin untuk kontrol, 8 pin untuk data). Sedangkan mode 4 bit minimal hanya membutuhkan 7-bit (3 pin untuk kontrol, 4 pin untuk data). Bit RS digunakan untuk memilih apakah data atau instruksi yang akan ditransfer antara mikrokontroller dan LCD. Jika bit ini di set (RS = 1), maka byte pada posisi kursor LCD saat itu dapat dibaca atau ditulis. Jika bit ini di reset (RS = 0), merupakan instruksi yang dikirim ke LCD atau status eksekusi dari instruksi terakhir yang dibaca.
C. LED (Light Emitting Diode)
Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan cahaya monokromatik ketika diberikan tegangan maju. LED merupakan keluarga Dioda yang terbuat dari bahan semikonduktor. Warna-warna Cahaya yang dipancarkan oleh LED tergantung pada jenis bahan semikonduktor yang dipergunakannya.
Bentuk dan Simbol LED |
Untuk mengetahui polaritas terminal Anoda (+) dan Katoda (-) pada LED. Kita dapat melihatnya secara fisik berdasarkan gambar diatas. Ciri-ciri Terminal Anoda pada LED adalah kaki yang lebih panjang dan juga Lead Frame yang lebih kecil. Sedangkan ciri-ciri Terminal Katoda adalah Kaki yang lebih pendek dengan Lead Frame yang besar serta terletak di sisi yang Flat.
LED
|
[kembali]
; PROGRAM5.ASM DIGUNAKAN MENAMPILKAN DATA DI LCD
; 00H-03H : PPI
; data : porta
; RS : pc1
; E : pc0
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG,DS:CODE_SEG,ES:CODE_SEG,SS:CODE_SEG
ORG 100H ;program mulai
;origin 100h
start: jmp mulai
ASSUME CS:CODE_SEG,DS:CODE_SEG,ES:CODE_SEG,SS:CODE_SEG
ORG 100H ;program mulai
;origin 100h
start: jmp mulai
DISPCLR EQU 00000001B
FUNCSET EQU 00111000B
ENTRMOD EQU 00000110B
DISPON EQU 00001100B
porta equ 00h
portb equ 01h
portc equ 02h
cw equ 03h
awal db ?
data db ?
akhir db ?
FUNCSET EQU 00111000B
ENTRMOD EQU 00000110B
DISPON EQU 00001100B
porta equ 00h
portb equ 01h
portc equ 02h
cw equ 03h
awal db ?
data db ?
akhir db ?
mulai:
Mov AX, CS
Mov DS, AX
Xor AX, AX
Mov ES, AX
Mov SS, AX
Lea SI, Awal
Lea CX, Akhir
Mov DI, SI
Sub CX, SI
Cld
Rep Movsb
Mov SP,0800h
Xor AX,AX
Mov DS,AX
Mov AX, CS
Mov DS, AX
Xor AX, AX
Mov ES, AX
Mov SS, AX
Lea SI, Awal
Lea CX, Akhir
Mov DI, SI
Sub CX, SI
Cld
Rep Movsb
Mov SP,0800h
Xor AX,AX
Mov DS,AX
mov dx,cw ; inisialisasi 8255
mov al,82h ; mode 0
out dx,al ; Port A dan C = out serta Port B = in
mov al,82h ; mode 0
out dx,al ; Port A dan C = out serta Port B = in
call initialisasi_LCD
mov data,85h ; pesan baris 1 kolom 6
call control_out
mov data,4Ch ; huruf L ditampilkan di kolom 6
; baris 1
call data_out
mov data,85h ; pesan baris 1 kolom 6
call control_out
mov data,4Ch ; huruf L ditampilkan di kolom 6
; baris 1
call data_out
mov data,86h
call control_out
mov data,45h ; huruf E di kolom 7 baris 1
call data_out
call control_out
mov data,45h ; huruf E di kolom 7 baris 1
call data_out
mov data,87h
call control_out
mov data,49h ; huruf I di kolom 8 baris 1
call data_out
call control_out
mov data,49h ; huruf I di kolom 8 baris 1
call data_out
mov data,0C3h
call control_out
mov data,4Ah ; huruf J di kolom 4 baris 2
call data_out
call control_out
mov data,4Ah ; huruf J di kolom 4 baris 2
call data_out
mov data,0C4h
call control_out
mov data,54h ; huruf T di kolom 5 baris 2
call data_out
call control_out
mov data,54h ; huruf T di kolom 5 baris 2
call data_out
mov data,0C5h
call control_out
mov data,45h ; huruf E di kolom 5 baris 2
call data_out
call control_out
mov data,45h ; huruf E di kolom 5 baris 2
call data_out
mov data,0C6h
call control_out
mov data,20h ; huruf 'spasi' di kolom 6 baris 2
call data_out
call control_out
mov data,20h ; huruf 'spasi' di kolom 6 baris 2
call data_out
mov data,0C7h
call control_out
mov data,55h ; huruf U di kolom 7 baris 2
call data_out
call control_out
mov data,55h ; huruf U di kolom 7 baris 2
call data_out
mov data,0C8h
call control_out
mov data,40h ; huruf A di kolom 8 baris 2
call data_out
call control_out
mov data,40h ; huruf A di kolom 8 baris 2
call data_out
lagi:
jmp lagi
jmp lagi
;--------------------
; inisialisasi LCD
;--------------------
initialisasi_LCD proc near
mov data,DISPCLR
call control_out
call delay
; inisialisasi LCD
;--------------------
initialisasi_LCD proc near
mov data,DISPCLR
call control_out
call delay
mov data,FUNCSET
call control_out
call delay
call control_out
call delay
mov data,ENTRMOD
call control_out
call delay
call control_out
call delay
mov data,DISPON
call control_out
call delay
ret
initialisasi_LCD endp
call control_out
call delay
ret
initialisasi_LCD endp
;-------------------------
; control instruction
;-------------------------
; E : PC0
; RS : PC1
control_out proc near
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay
; control instruction
;-------------------------
; E : PC0
; RS : PC1
control_out proc near
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay
mov dx,portc
mov al,00000001b ; E = 1, RS = 0
out dx,al
call delay
mov al,00000001b ; E = 1, RS = 0
out dx,al
call delay
mov dx,porta
mov al,data
out dx,al
call delay
mov al,data
out dx,al
call delay
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay
ret
control_out endp
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay
ret
control_out endp
;-------------------------
; data instruction
;-------------------------
; E : PC0
; RS : PC1
; data instruction
;-------------------------
; E : PC0
; RS : PC1
data_out proc near
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay
mov dx,portc
mov al,00000011b ; E = 1, RS = 1
out dx,al
call delay
mov al,00000011b ; E = 1, RS = 1
out dx,al
call delay
mov dx,porta
mov al,data
out dx,al
call delay
mov al,data
out dx,al
call delay
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay
ret
data_out endp
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay
ret
data_out endp
delay proc near
push cx
mov cx,0fffh
pop cx
ret
delay endp
ORG 40F0H
DB 0EAH
DW 0100H
DW 0FBF0H
push cx
mov cx,0fffh
pop cx
ret
delay endp
ORG 40F0H
DB 0EAH
DW 0100H
DW 0FBF0H
CODE_SEG ENDS
END START
END START
2. Program keypad dan LCD
; PROGGRAM6.ASM DIGUNAKAN UNTUK INPUT KEYPAD
; DITAMPILKAN KE LCD
; Data LCD: Port A
; E : PC0
; RS : PC1h
; PROGGRAM6.ASM DIGUNAKAN UNTUK INPUT KEYPAD
; DITAMPILKAN KE LCD
; Data LCD: Port A
; E : PC0
; RS : PC1h
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG,DS:CODE_SEG,SS:CODE_SEG
ORG 100H
start: jmp mulai
ASSUME CS:CODE_SEG,DS:CODE_SEG,SS:CODE_SEG
ORG 100H
start: jmp mulai
porta equ 00h
portb equ 01h
portc equ 02h
cw equ 03h
portb equ 01h
portc equ 02h
cw equ 03h
DISPCLR EQU 00000001B
FUNCSET EQU 00111000B
ENTRMOD EQU 00000110B
DISPON EQU 00001100B
FUNCSET EQU 00111000B
ENTRMOD EQU 00000110B
DISPON EQU 00001100B
awal db ?
data db ?
data_keypad db?
ratusan db ?
puluhan db ?
satuan db ?
akhir db ?
data db ?
data_keypad db?
ratusan db ?
puluhan db ?
satuan db ?
akhir db ?
mulai:
Mov AX, CS
Mov DS, AX
Xor AX, AX
Mov ES, AX
Mov SS, AX
Lea SI, Awal
Lea CX, Akhir
Mov DI, SI
Sub CX, SI
Cld
Rep Movsb
Mov SP,800h
Xor AX,AX
Mov DS,AX
mov al,82h ; Port A dan Port C = output dan
; Port B = input
mov dx,cw
out dx,al
Mov AX, CS
Mov DS, AX
Xor AX, AX
Mov ES, AX
Mov SS, AX
Lea SI, Awal
Lea CX, Akhir
Mov DI, SI
Sub CX, SI
Cld
Rep Movsb
Mov SP,800h
Xor AX,AX
Mov DS,AX
mov al,82h ; Port A dan Port C = output dan
; Port B = input
mov dx,cw
out dx,al
call initialisasi_LCD
balik:
mov dx,portb
in al,dx
and al,128
cmp al,128
je balik
balik:
mov dx,portb
in al,dx
and al,128
cmp al,128
je balik
in al,dx
and al,00001111B
call konversi_keypad_to_bin
mov data_keypad,al
and al,00001111B
call konversi_keypad_to_bin
mov data_keypad,al
mov data,80h
call controlout
call controlout
mov al,data_keypad
mov ah,0
add ax,30h
mov data,al
call dataout
tunggu:
mov dx,portb
in al,dx
and al,128
cmp al,0
je tunggu
mov ah,0
add ax,30h
mov data,al
call dataout
tunggu:
mov dx,portb
in al,dx
and al,128
cmp al,0
je tunggu
jmp balik
konversi_keypad_to_bin proc near
cmp al,4
jne keypad1
mov al,1
ret
keypad1:
cmp al,8
jne keypad2
mov al,2
ret
keypad2:
cmp al,12
jne keypad3
mov al,3
ret
keypad3:
cmp al,1
jne keypad4
mov al,4
ret
keypad4:
cmp al,4
jne keypad5
mov al,4
ret
keypad5:
cmp al,5
jne keypad6
mov al,5
ret
keypad6:
cmp al,9
jne keypad7
mov al,6
ret
keypad7:
cmp al,13
jne keypad8
mov al,7
ret
keypad8:
cmp al,2
jne keypad9
mov al,8
ret
keypad9:
cmp al,6
jne keypad0
mov al,9
ret
keypad0:
cmp al,10
jne bintang
mov al,0
ret
bintang:
cmp al,14
jne pagar
mov al,14
ret
pagar:
cmp al,3
jne keluar
mov al,3
ret
keluar:
ret
konversi_keypad_to_bin endp
cmp al,4
jne keypad1
mov al,1
ret
keypad1:
cmp al,8
jne keypad2
mov al,2
ret
keypad2:
cmp al,12
jne keypad3
mov al,3
ret
keypad3:
cmp al,1
jne keypad4
mov al,4
ret
keypad4:
cmp al,4
jne keypad5
mov al,4
ret
keypad5:
cmp al,5
jne keypad6
mov al,5
ret
keypad6:
cmp al,9
jne keypad7
mov al,6
ret
keypad7:
cmp al,13
jne keypad8
mov al,7
ret
keypad8:
cmp al,2
jne keypad9
mov al,8
ret
keypad9:
cmp al,6
jne keypad0
mov al,9
ret
keypad0:
cmp al,10
jne bintang
mov al,0
ret
bintang:
cmp al,14
jne pagar
mov al,14
ret
pagar:
cmp al,3
jne keluar
mov al,3
ret
keluar:
ret
konversi_keypad_to_bin endp
;-------------------------
; control instruction
;-------------------------
; E : PC0
; RS : PC1
control_out proc near
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay_lcd
; control instruction
;-------------------------
; E : PC0
; RS : PC1
control_out proc near
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay_lcd
mov dx,portc
mov al,00000001b ; E = 1, RS = 0
out dx,al
call delay_lcd
mov al,00000001b ; E = 1, RS = 0
out dx,al
call delay_lcd
mov dx,porta
mov al,data
out dx,al
call delay_lcd
mov al,data
out dx,al
call delay_lcd
mov dx,portc
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay_lcd
ret
control_out endp
mov al,00000000b ; E = 0, RS = 0
out dx,al
call delay_lcd
ret
control_out endp
;-------------------------
; data instruction
;-------------------------
; E : PC0
; RS : PC1
; data instruction
;-------------------------
; E : PC0
; RS : PC1
data_out proc near
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay_lcd
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay_lcd
mov dx,portc
mov al,00000011b ; E = 1, RS = 1
out dx,al
call delay_lcd
mov al,00000011b ; E = 1, RS = 1
out dx,al
call delay_lcd
mov dx,porta
mov al,data
out dx,al
call delay_lcd
mov al,data
out dx,al
call delay_lcd
mov dx,portc
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay_lcd
ret
data_out endp
mov al,00000010b ; E = 0, RS = 1
out dx,al
call delay_lcd
ret
data_out endp
;--------------------
; inisialisasi LCD
;--------------------
initialisasi_LCD proc near
mov data,DISPCLR
call control_out
call delay_lcd
; inisialisasi LCD
;--------------------
initialisasi_LCD proc near
mov data,DISPCLR
call control_out
call delay_lcd
mov data,FUNCSET
call control_out
call delay_lcd
call control_out
call delay_lcd
mov data,ENTRMOD
call control_out
call delay_lcd
call control_out
call delay_lcd
mov data,DISPON
call control_out
call delay_lcd
ret
initialisasi_LCD endp
call control_out
call delay_lcd
ret
initialisasi_LCD endp
delay_lcd proc near
push cx
mov cx,07fffh
loop $
pop cx
ret
delay_lcd endp
push cx
mov cx,07fffh
loop $
pop cx
ret
delay_lcd endp
delay proc near
push cx
mov cx,0ffffh
loop $
pop cx
ret
delay endp
ORG 40F0H
DB 0EAH
DW 0100H
DW 0FBF0H
push cx
mov cx,0ffffh
loop $
pop cx
ret
delay endp
ORG 40F0H
DB 0EAH
DW 0100H
DW 0FBF0H
CODE_SEG ENDS
END START
END START
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar