Gambar 17 Rangkaian interface menggunakan 2 buah IC 8255 dengan rangkaian decoder-nya
1. Tujuan[Kembali]
1. Mampu memahami dan membuat bahasa assembler menggunakan software emu8086
2. Dapat membuat program untuk menulis dan membaca input menggunakan bahasa assembler
2. Alat dan Bahan[Kembali]
- Software emu8086
- IC 8255
3. Dasar Teori[Kembali]
1. Teori Bahasa Assembler
Dalam bahasa tingkat rendah tidak dibutuhkan struktur program karena semuanya diserahkan kepada pemakai.
Register
Register adalah sebagian kecil memori komputer yang dipakai untuk tempat penampungan data. Sebagian besar register yang terdapat pada mikroprosessor 8088 adalah 16 bit. Terdapat 5 kelompok register, diantaranya:
1. General Purpose Register
General Purpose Register dapat dibagi menjadi register low dan high bits, yang masing-masing berkemampuan 8 bit. Seperti register AX, register low-nya adalah AL dan register high-nya adalah AH.
Ada empat macam General Purpose Register yaitu:
a. Register AX (AX+AL) atau Accumulator Register adalah register aritmatik untuk dipakai dalam operasi pertambahan, pengurangan, perkalian, dan pembagian. Register AH dapat juga digunakan untuk tempat kembali nilai service number untuk beberapa interrupt tertentu.
b. Register BX (BH+BL) atau Base Register adalah salah satu dari dua register base Addressing mode, yang dapat mengambil atau menulis langsung dari/ke memori.
c. Register CX (CH+CL) atau Counter Register adalah suatu counter untuk meletakkan jumlah lompatan pada loop yang dilakukan.
General Purpose Register dapat dibagi menjadi register low dan high bits, yang masing-masing berkemampuan 8 bit. Seperti register AX, register low-nya adalah AL dan register high-nya adalah AH.
d. Register DX (DH+DL) atau Data Register mempunyai tiga tugas, yaitu:
1. Membantuk AX dalam proses perkalian dan pembagian, terutama perkalian dan pembagian 16 bit.
2. DX merupakan register offset dari DS.
3. DX bertugas menunjukkan nomor port pada operasi port
2. Segment Register
a. CS (Code Segment) Register berfungsi untuk menunjukkan segment, program yuang berapa dengan pasangan register ini adalah register IP
b. DS (Data Segment) Register berfungsi untuk menunjukkan segment dari segment data. Pasangan dari DS adalah DX
c. SS (Stack Segment) Register berfungsi untuk menunjukkan segment dari segment stack. Pasangan dari SS adalah SP.
d. ES (Extra Segment) Register berfungsi untuk pemograman pada saat melakukan operasi ke segment lain.
3. Pointer Register berfungsi untuk menyimpan offset dari relative address
a. IP (Insturction Pointer) Register berfungsi untuk menunjukkan baris perintah program. Pada saat program pertama dijalankan register akan langsung menunjuk pada awal program.
b. SP (Stack Pointer) Register adalah merupakan pasangan SS yang digunakan untuk operasi stack. Pada saat pertama program dijalankan register ini akan menunjuk pada byte terakhir stack.
c. BP (Base Pointer) Register mempunyai fungsi yang sama dengan register BX tetapi BX untuk menulis dan membaca segment DS (Data Segment) sedangkan BP menulis dan membaca segment SS(Stack Segment).
4. Index Register yaitu SI (Source Index) dan DI
(Destination Index) berfungsi untuk melakukan operasi STRING. Namun demikian, kedua register ini sering digunakan untuk menulis dan membaca dari atau ke memori seperti halnya BX dan BP.
5. Flag Register berfungsi untuk mengecek apakah program berfungsi atau tidak.
a. Interrupt Flag, untuk mengecek apakah pada saat operasi Interrupt sedang aktif atau tidak, jika tidak aktif maka Interrupt tidak akan dijalankan.
b. Carry Flag, untuk mengecek apakah saat operasi terjadi kesalahan atau tidak.
c. Sign Flag, untuk menunjukkan apakah suatu bilangan bertanda atau tidak dan sebaliknya.
Perintah Dasar Assembler
1. MOV
Adalah perintah untuk mengisi, memindahkan atau memperbaharui isi suatu register, variabel atau suatu lokasi memori.
Syntax : MOV[operand1],[operand2]
a. operand1 berupa register, variabel, lokasi memori
b. operand2 berupa register, variabel, lokasi memori ataupun bilangan
contoh :
MOV AH,AL ;mengcopy isi register AL ke register AH
MOV AH,02 ;mengisi register AH dengan 02
2. Int (Interrupt)
subrotine yang akan dipanggil setelah tersedia pada memori komputer. terdapat dua jenis interrupt, yaitu:
a. BIOS interrupt yaitu 0H hingga 1FH yang disediakan oleh BIOS (Basic Input Output System)
contoh : Int 16H service 1FH berfungsi untuk mengecek apakah ada tombol keyboard yang ditekan.
b. DOS interrupt yaitu Int 1FH keatas yang disediakan oleh DOS (Disk Operating System).
Contoh : Int 20H berfungsi menghentkan kerja suatu program..
3. Int 21h service 0Ah
Int 21h adalah salah satu Int yang termasuk DOS Interrupt, karena INT 21h mempunyai banyak sekali tugas, maka tugasnya dibagi-bagi menjadi beberapa bagian. Untuk memanggil bagian-bagian itu perlu menyertakan nomor bagiannya yang disebut juga service number. Contoh 21h yang bertugas mencatak sebuah huruf ke layar yaitu fungsi kedua dari Int 21h.
Service 0AH digunakan untuk melakukan input dengan lebih dari 1 karakter, dengan syarat register harus berisikan service number dari 21H tersebut.
Service 09H digunakan untuk mencetak huruf ke layar, untuk penggunaannya diakhiri dengan tanda dolar '$'
2. PPI (Programmable Pheriperal Interface)
Untuk hubungan input-output, mikroprosesor memerlukan suatu rangkaian interface. Interface menggunakan IC Programmable Peripheral Interface (PPI) 8255 yang mempunyai 3 port dengan masing-masing berkapasitas 8-bit. Jika dalam merancang sistem minimum 8088 ternyata memerlukan interface lebih dari 3 port maka dapat ditambahkan IC PPI 8255 sesuai kebutuhan dengan menambahkan rangkaian decoder-nya.
4. Percobaan [Kembali]
a. Listing Program[Kembali] ; Program: Kontrol Keypad dan 7-Segment menggunakan 8086; Mikroprosesor: 8086; IC Latch: 74273; Decoder: 74154; IC I/O: 8255A; Keypad untuk input, dan Seven-segment untuk output.
CODE_SEG SEGMENTASSUME CS:CODE_SEG, DS:CODE_SEG, SS:CODE_SEGORG 100H
; Definisi alamat portPORTA EQU 00H ; Port A pada 8255A (untuk seven-segment)PORTB EQU 01H ; Port B pada 8255A (untuk keypad)PORTC EQU 02H ; Port C pada 8255ACTRL EQU 03H ; Control word register pada 8255A
; Definisi angka untuk 7-segmentANGKA0 EQU 00111111B ; Representasi angka 0 pada seven-segmentANGKA1 EQU 00000110B ; Representasi angka 1 pada seven-segmentANGKA2 EQU 01011011B ; Representasi angka 2 pada seven-segmentANGKA3 EQU 01001111B ; Representasi angka 3 pada seven-segmentANGKA4 EQU 01100110B ; Representasi angka 4 pada seven-segmentANGKA5 EQU 01101101B ; Representasi angka 5 pada seven-segmentANGKA6 EQU 01111101B ; Representasi angka 6 pada seven-segmentANGKA7 EQU 00000111B ; Representasi angka 7 pada seven-segmentANGKA8 EQU 01111111B ; Representasi angka 8 pada seven-segmentANGKA9 EQU 01101111B ; Representasi angka 9 pada seven-segment
START: ; Inisialisasi 8255A - Port A dan C = output, Port B = input MOV AL, 82H MOV DX, CTRL OUT DX, AL
; Bersihkan Seven-segment CALL CLEAR_DISPLAY
READ_KEYPAD: ; Baca input dari Keypad melalui Port B MOV DX, PORTB IN AL, DX
; Masking untuk mendapatkan 4 bit dari input keypad AND AL, 0FH CALL CONVERT_KEYPAD_TO_BIN
; Tampilkan hasil di Seven-segment CALL DISPLAY_SEGMENT JMP READ_KEYPAD
DISPLAY_SEGMENT PROC NEAR MOV DX, PORTA OUT DX, AL ; Kirim nilai binari ke Port A (7-segment) CALL PULSE_LATCH ; Latch data menggunakan IC 74273 RETDISPLAY_SEGMENT ENDP
CONVERT_KEYPAD_TO_BIN PROC NEAR CMP AL, 0 JE DISPLAY_0 CMP AL, 1 JE DISPLAY_1 CMP AL, 2 JE DISPLAY_2 CMP AL, 3 JE DISPLAY_3 CMP AL, 4 JE DISPLAY_4 CMP AL, 5 JE DISPLAY_5 CMP AL, 6 JE DISPLAY_6 CMP AL, 7 JE DISPLAY_7 CMP AL, 8 JE DISPLAY_8 CMP AL, 9 JE DISPLAY_9 RET
DISPLAY_0: MOV AL, ANGKA0 RETDISPLAY_1: MOV AL, ANGKA1 RETDISPLAY_2: MOV AL, ANGKA2 RETDISPLAY_3: MOV AL, ANGKA3 RETDISPLAY_4: MOV AL, ANGKA4 RETDISPLAY_5: MOV AL, ANGKA5 RETDISPLAY_6: MOV AL, ANGKA6 RETDISPLAY_7: MOV AL, ANGKA7 RETDISPLAY_8: MOV AL, ANGKA8 RETDISPLAY_9: MOV AL, ANGKA9 RET
CLEAR_DISPLAY PROC NEAR MOV CX, 8CLEAR_LOOP: MOV AL, 01111111B ; Matikan semua segmen MOV DX, PORTA OUT DX, AL CALL PULSE_LATCH LOOP CLEAR_LOOP RETCLEAR_DISPLAY ENDP
PULSE_LATCH PROC NEAR ; Proses latch menggunakan IC 74273 OR AL, 80H ; Setel bit untuk memicu latch MOV DX, PORTA OUT DX, AL RETPULSE_LATCH ENDP
DELAY PROC NEAR PUSH CX MOV CX, 0FFFFH ; Loop delayDELAY_LOOP: LOOP DELAY_LOOP POP CX RETDELAY ENDP
CODE_SEG ENDSEND START
; Program: Kontrol Keypad dan 7-Segment menggunakan 8086
; Mikroprosesor: 8086
; IC Latch: 74273
; Decoder: 74154
; IC I/O: 8255A
; Keypad untuk input, dan Seven-segment untuk output.
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG, DS:CODE_SEG, SS:CODE_SEG
ORG 100H
; Definisi alamat port
PORTA EQU 00H ; Port A pada 8255A (untuk seven-segment)
PORTB EQU 01H ; Port B pada 8255A (untuk keypad)
PORTC EQU 02H ; Port C pada 8255A
CTRL EQU 03H ; Control word register pada 8255A
; Definisi angka untuk 7-segment
ANGKA0 EQU 00111111B ; Representasi angka 0 pada seven-segment
ANGKA1 EQU 00000110B ; Representasi angka 1 pada seven-segment
ANGKA2 EQU 01011011B ; Representasi angka 2 pada seven-segment
ANGKA3 EQU 01001111B ; Representasi angka 3 pada seven-segment
ANGKA4 EQU 01100110B ; Representasi angka 4 pada seven-segment
ANGKA5 EQU 01101101B ; Representasi angka 5 pada seven-segment
ANGKA6 EQU 01111101B ; Representasi angka 6 pada seven-segment
ANGKA7 EQU 00000111B ; Representasi angka 7 pada seven-segment
ANGKA8 EQU 01111111B ; Representasi angka 8 pada seven-segment
ANGKA9 EQU 01101111B ; Representasi angka 9 pada seven-segment
START:
; Inisialisasi 8255A - Port A dan C = output, Port B = input
MOV AL, 82H
MOV DX, CTRL
OUT DX, AL
; Bersihkan Seven-segment
CALL CLEAR_DISPLAY
READ_KEYPAD:
; Baca input dari Keypad melalui Port B
MOV DX, PORTB
IN AL, DX
; Masking untuk mendapatkan 4 bit dari input keypad
AND AL, 0FH
CALL CONVERT_KEYPAD_TO_BIN
; Tampilkan hasil di Seven-segment
CALL DISPLAY_SEGMENT
JMP READ_KEYPAD
DISPLAY_SEGMENT PROC NEAR
MOV DX, PORTA
OUT DX, AL ; Kirim nilai binari ke Port A (7-segment)
CALL PULSE_LATCH ; Latch data menggunakan IC 74273
RET
DISPLAY_SEGMENT ENDP
CONVERT_KEYPAD_TO_BIN PROC NEAR
CMP AL, 0
JE DISPLAY_0
CMP AL, 1
JE DISPLAY_1
CMP AL, 2
JE DISPLAY_2
CMP AL, 3
JE DISPLAY_3
CMP AL, 4
JE DISPLAY_4
CMP AL, 5
JE DISPLAY_5
CMP AL, 6
JE DISPLAY_6
CMP AL, 7
JE DISPLAY_7
CMP AL, 8
JE DISPLAY_8
CMP AL, 9
JE DISPLAY_9
RET
DISPLAY_0:
MOV AL, ANGKA0
RET
DISPLAY_1:
MOV AL, ANGKA1
RET
DISPLAY_2:
MOV AL, ANGKA2
RET
DISPLAY_3:
MOV AL, ANGKA3
RET
DISPLAY_4:
MOV AL, ANGKA4
RET
DISPLAY_5:
MOV AL, ANGKA5
RET
DISPLAY_6:
MOV AL, ANGKA6
RET
DISPLAY_7:
MOV AL, ANGKA7
RET
DISPLAY_8:
MOV AL, ANGKA8
RET
DISPLAY_9:
MOV AL, ANGKA9
RET
CLEAR_DISPLAY PROC NEAR
MOV CX, 8
CLEAR_LOOP:
MOV AL, 01111111B ; Matikan semua segmen
MOV DX, PORTA
OUT DX, AL
CALL PULSE_LATCH
LOOP CLEAR_LOOP
RET
CLEAR_DISPLAY ENDP
PULSE_LATCH PROC NEAR
; Proses latch menggunakan IC 74273
OR AL, 80H ; Setel bit untuk memicu latch
MOV DX, PORTA
OUT DX, AL
RET
PULSE_LATCH ENDP
DELAY PROC NEAR
PUSH CX
MOV CX, 0FFFFH ; Loop delay
DELAY_LOOP:
LOOP DELAY_LOOP
POP CX
RET
DELAY ENDP
CODE_SEG ENDS
END START
b.Rangkaian[Kembali]
Prinsip kerja dari rangkaian di atas adalah, ketika tombol pada keypad ditekan maka nilai yang ditekan pada keypad akan ditampilkan pada 7-Segment. Prinsipnya, pertama mikrokontroler mengirimkan alamat untuk mengakses I/O IC 8255 melewati A0-A15, kemudian masuk ke IC 74273 D0-D7. Alamat tersebut akan dilewatkan dari D0-D7 ke Q0-Q7 apabila sinyal kontrol alih dikeluarkan oleh pin ALE mikroprosesor dan diinverterkan sebelum diumpankan ke CLK IC 74273. Apabila telah aktif sinyal CLK, maka alamat akan ditahan di Q0-Q7 IC 74273. kemudian jika Q1-Q5 IC 74273 yang membawa alamat dari AD9-AD11 dihubungkan dengan decoder 74154. maka ketika nilai AD9-AD11 ini berlogika 0 semua dan E1 E1 IC ini juga berlogika 0, maka pin 0 IC 75154 akan berlogika nol yang kemudian pin ini dihubingkan dengan CS pada IC 8255. sehingga alamat yang dikirimkan adalah untuk akses IC 8255.Kemudian untuk mengirim data dari Mikroprosesor 8086 ke IC I/O 8255, pin AD0-AD7 mikroprosesor dihubungkan dengan pin D0-D7 IC 8255. PORTA IC 8255 menjadi output bagi mikroprosesor untuk kemudian dihubungkan dengan output keypad dan PORTB pada IC ini dihubungkan dengan input Keypad serta PORTC pada IC ini sebagai output yang dihubungkan dengan 7-Segment.
Prinsip kerja dari rangkaian di atas adalah, ketika tombol pada keypad ditekan maka nilai yang ditekan pada keypad akan ditampilkan pada 7-Segment. Prinsipnya, pertama mikrokontroler mengirimkan alamat untuk mengakses I/O IC 8255 melewati A0-A15, kemudian masuk ke IC 74273 D0-D7. Alamat tersebut akan dilewatkan dari D0-D7 ke Q0-Q7 apabila sinyal kontrol alih dikeluarkan oleh pin ALE mikroprosesor dan diinverterkan sebelum diumpankan ke CLK IC 74273. Apabila telah aktif sinyal CLK, maka alamat akan ditahan di Q0-Q7 IC 74273. kemudian jika Q1-Q5 IC 74273 yang membawa alamat dari AD9-AD11 dihubungkan dengan decoder 74154. maka ketika nilai AD9-AD11 ini berlogika 0 semua dan E1 E1 IC ini juga berlogika 0, maka pin 0 IC 75154 akan berlogika nol yang kemudian pin ini dihubingkan dengan CS pada IC 8255. sehingga alamat yang dikirimkan adalah untuk akses IC 8255.
Kemudian untuk mengirim data dari Mikroprosesor 8086 ke IC I/O 8255, pin AD0-AD7 mikroprosesor dihubungkan dengan pin D0-D7 IC 8255. PORTA IC 8255 menjadi output bagi mikroprosesor untuk kemudian dihubungkan dengan output keypad dan PORTB pada IC ini dihubungkan dengan input Keypad serta PORTC pada IC ini sebagai output yang dihubungkan dengan 7-Segment.
c. Video[Kembali] Referensi
d. Download File[Kembali] File Rangkaian klik disiniFile Kodingan klik disiniVideo referensi klik disiniHTML klik disini
File Rangkaian klik disini
File Kodingan klik disini
Video referensi klik disini
HTML klik disini
Tidak ada komentar:
Posting Komentar