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
- Mikroprosesor 8086
- Keypad
- Resistor
- IC Latch 74273
- IC Decoder 74154
- IC 8255A
3. Dasar Teori [kembali]
1. Mikrokontroler 8086
Mikroprosesor atau CPU adalah “otak” yang merupakan pengendali utama semua operasi dalam sistem komputer. Mikroprosesor mengambil instruksi biner dari memori, menerjemahkannya menjadi serangkaian aksi dan menjalankannya. Aksi tersebut bisa berupa transfer data dari dan ke memori, operasi aritmatika dan logika, atau pembangkitan sinyal kendali. Intel 8086 adalah mikroprosesor 16 bit, di mana dia dapat bekerja secara internal menggunakan operasi 16 bit dan secara eksternal dapat mentransfer data 16 bit melalui bus data.
Arsitektur Mikroprosesor
Prosesor 8086 dapat dihubungkan dengan bus alamat yang berukuran 20 bit, sehingga mampu mengalamati memori maksimal 220 = 1.048.576 byte (1 MB). Diagram blok arsitektur 8086 dapat dilihat pada Gambar. Mikroprosesor 8086 terbagi atas 2 unit, yaitu unit antarmuka bus (bus interface unit, BIU) dan unit pengeksekusi (execution unit, EU).
Unit Antarmuka Bus (BIU)
Unit ini merupakan bagian yang berhubungan langsung dengan “pihak luar”: bus alamat dan bus data. BIU mengirim alamat ke bus alamat, mengambil instruksi (fetch) dari memori, membaca data dari port dan memori, serta menulis data ke port dan memori (menangani transfer data antara bus dan unit eksekusi).
BIU tersusun atas:
a. Instruction Stream Byte Queue (ISBQ).
BIU memfetch instruksi dari memori sebanyak-banyaknya 6 buah instruksi ke depan. Hal ini dilakukan agar eksekusi progam menjadi lebih cepat. Instruksi yang sudah diambil ini ditaruh di ISBQ yang berupa 6 buah register first-in-first-out. BIU dapat melakukan fetching selagi EU menerjemahkan dan mengeksekusi instruksi yang tidak membutuhkan penggunaan bus (misalnya operasi matematis menggunakan register internal). Ketika EU selesai melaksanakan suatu instruksi, maka dia tinggal mengambil perintah berikutnya di ISBQ, tanpa harus mengirim alamat ke memori untuk mengambil instruksi berikutnya, sehingga eksekusi akan lebih cepat. Kegiatan fetching instruksi berikutnya selagi menjalankan suatu instruksi disebut sebagai: pipelining. Pada mikroprosesor yang lebih baru, ukuran ISBQ tidak hanya 6 byte tetapi mencapai 512 byte, ini efektif untuk program yang mempunyai banyak kalang (struktur program yang berulang).
b. Register segmen.
BIU berisi 4 buah register segmen 16 bit, yaitu: code segment (CS), data segment (DS), extra segment (ES), dan stack segment (SS). Sistem komputer 8086 mempunyai bus alamat 20 bit, tetapi ukuran register - termasuk register alamat (memory address register) – yang dimilikinya hanya 16 bit, lantas bagaimana cara mengatasinya. Cara pemberian alamat 20 bit dilakukan menggunakan 2 komponen alamat: segmen dan offset, yang masing-masing berukuran 16 bit. BIU akan menggeser ke kiri nilai segmen sebanyak 4 bit (mengalikan dengan 16), kemudian menambahkan offset untuk memperoleh alamat fisik memori yang dikirimkan melalui bus alamat. Untuk lebih jelasnya, diberi contoh untuk memberi alamat fisik $38AB4( ) 3 , segmen dapat diisi dengan angka $348A, dan offset diisi dengan angka $4214, lihat Gambar. Cara penulisan kombinasi segmen dan offset adalah:
segment:offset
Sehingga untuk contoh ini, penulisannya adalah $348A:$4214. Perlu diingat bahwa kita bisa menggunakan kombinasi nilai segmen dan offset yang bervariasi untuk memberi alamat fisik yang sama, misalnya $38AB:$0004, $3800:$0AB4, dsb.
Secara umum, suatu program terdiri atas 4 bagian: segmen code yang berisi instruksi; segmen data, berisi data yang telah dialokasikan sebelumnya (statik); segmen ekstra, untuk variabel dinamik; serta segmen stack yang dipakai untuk menyimpan informasi pada saat pemanggilan subrutin. Informasi segmen disimpan dalam keempat register segmen sesuai dengan namanya.
c. Instruction Pointer (IP)
, adalah register berisi informasi offset yang bersama-sama CS menunjuk posisi dalam memori di mana instruksi berikutnya berada.
Unit Eksekusi (EU)
Unit ini memberitahu BIU di mana mengambil instruksi dan data, menerjemahkan kode instruksi, dan menjalankannya. EU tersusun atas:
1. Dekoder instruksi : yang mengambil urut-urutan instruksi dari ISBQ kemudian menerjemahkannya ke runtutan aksi yang harus dikerjakan oleh EU.
2. Sistem kontrol : merupakan rangkaian yang mengendalikan kerja mikroprosesor berdasarkan instruksi yang telah diterjemahkan oleh dekoder instruksi tadi.
3. Arithmetic Logic Unit (ALU) : yaitu bagian dari mikroprosesor yang dapat melakukan operasi matematis (misalnya operasi penjumlahan, pengurangan, perkalian, dan pembagian) dan logika (misalnya operasi AND, OR, XOR, geser, dan rotasi) 16 bit.
4. Register flag (bendera) : yaitu register flip-flop 16 bit yang menunjukkan kondisi yang dihasilkan oleh eksekusi suatu operasi oleh EU. Selain itu flag juga mengatur beberapa operasi tertentu. Terdapat 9 flag dalam register flag 8086, seperti terlihat pada Gambar
Sebanyak 6 buah flag merupakan flag kondisi yang menunjukkan keadaan setelah eksekusi suatu instruksi, yaitu: Carry Flag (CF), Parity Flag (PF), Auxiliary Carry Flag (AF), Zero Flag (ZF), Sign Flag (SF), dan Overflow Flag (OF). Sedangkan, 3 buah flag sisanya berupa flag kontrol yang mengendalikan operasi tertentu, yaitu: Single Step Trap Flag (TF), Interrupt Flag (IF), dan String Direction Flag (DF).
e. Register serbaguna
, merupakan register yang dapat digunakan untuk menyimpan data yang akan diolah atau hasil suatu operasi oleh ALU. Terdiri atas 8 buah register 8 bit, yaitu AH, AL, BH, BL, CH, CL, DH, dan DL. Register-register ini juga dapat digunakan secara berpasangan sehingga membentuk register 16 bit, yaitu; AX (gabungan dari AH dan AL), BX, CX, dan DX. AX biasanya digunakan untuk menyimpan hasil operasi, sehingga disebut akumulator. CX biasanya digunakan untuk pencacah untuk keperluan perulangan/kalang (loop), sehingga disebut counter. BX dan DX biasanya digunakan sebagai offset dari alamat data di memori (dengan segmen DS).
f. Register pointer dan indeks
, terdiri atas Stack Pointer (SP), Base Pointer (BP), Source Index (SI), dan Destination Index (DI). Stack (tumpukan) adalah bagian dari memori yang digunakan untuk menyimpan informasi alamat program yang ditinggalkan pada saat terjadi pemanggilan subrutin/subprogram. Demikian juga apabila subrutin tersebut berupa fungsi yang menggunakan parameter, maka data parameter akan disimpan pula di stack. Alamat tumpukan terluar dari stack ditunjuk oleh SS:SP. Sedangkan BP digunakan sebagai offset yang menunjuk ke parameter-parameter fungsi yang dipanggil. SI dan DI biasanya digunakan sebagai offset (masing-masing berpasangan dengan ES dan DS) yang menunjuk ke suatu variabel/data untuk operasi string (larik data).
Pin Diagram Mikroprosesor 8086
Mikroprosesor 8086 mempunyai 40 kaki (pin) yang masing-masing digunakan untuk melewatkan sinyal tertentu. Setiap pin sinyal diberi nama berupa mnemonic yang sesuai dengan fungsinya. Sistem komputer 8086 mempunyai bus data selebar 16 bit dan bus alamat selebar 20 bit, sehingga dapat mengalamati memori sampai dengan 220 atau 1 Mb. Untuk menghemat jumlah pin, maka antara pin untuk data dan pin untuk alamat digabungkan dengan diberi nama AD0-AD15 (dari kata address data), sedangkan 4 bit alamat sisanya diberi nama A16-A19 (pin-pin ini juga digunakan untuk sinyal status).
Terdapat juga pin-pin untuk catu daya yang disuplaikan, yaitu VCC dan GND, masing-masing untuk tegangan catu daya dan pentanahan. Untuk dapat bekerja, selain membutuhkan catu daya, mikroprosesor 8086 juga memerlukan sinyal detak (clock) secara eksternal dengan frekuensi sampai 10 MHz. Sinyal clock ini dilewatkan ke pin CLK yang ada pada kaki nomor 19.
Pin-pin lainnya digunakan untuk sinyal kendali. Mikroprosesor 8086 dapat digunakan dalam 2 mode, minimum dan maksimum, yang masing-masing menggunakan pin kendali secara berbeda. Mode ini ditentukan dengan memberi nilai pada pin MXMN/ ( ) 1 , nilai 1 (dihubungkan dengan Vcc) untuk mode minimum dan nilai 0 (ditanahkan) untuk mode maksimum. Kebanyakan aplikasi menggunakan mode minimum. Pada mode ini, nama pin yang dipakai pada kaki nomor 24 sampai dengan 31 adalah yang berada di dalam tanda kurung (sebelah kanan)
Sinyal RESET digunakan untuk memerintah mikroprosesor agar melakukan inisialisasi dengan cara memberi nilai 0 pada register DS, SS, ES, IP, dan flag; serta nilai $FFFF untuk CS( ) 2 . Pin INTR dan NMI digunakan untuk menginterupsi kerja mikroprosesor. Jika ada sinyal pada kedua pin itu, maka mikroprossor akan menghentikan eksekusi program yang sedang dijalankannya, kemudian menjalankan subrutin sesuai yang dikehendaki, dan setelah selesai kembali ke tempat semula di mana program diinterupsi. Sinyal INTR (interrupt) berupa permintaan untuk melakukan interupsi yang dapat dianulir /tidak dipenuhi jika flag IF direset, sedangkan sinyal NMI (non maskable interrupt) tidak dapat ditutup/ditolak, artinya interupsi harus dilakukan. Pin INTA (interrupt acknowledge) digunakan oleh mikroprosesor untuk menjawab bahwa permintaan interupsi dari sinyal INTR dapat diterima/dijalankan
Pin IO M/ (memory/IO), RD (read), dan WR (write) digunakan untuk mengendalikan memori dan port pada saat pemindahan data. Sinyal IO M/ digunakan untuk memilih apakah memori atau port yang akan diakses oleh mikroprosesor. Jika hendak menghubungi memori, maka mikroprosesor memberi nilai tinggi (1) pada sinyal ini dan jika port yang hendak diakses maka sinyal ini diberi nilai rendah (0). Sinyal RD akan diaktifkan (bernilai rendah) jika operasi yang dilakukan adalah membaca, yaitu transfer data dari memori/port ke mikroprosesor. Sementara sinyal WR digunakan untuk menulis, tranfer data dari mikroprosesor ke memori/port, jika aktif. Sinyal-sinyal lain adalah R DT/ (data transmit/receive), DEN (data enable), ALE (address latch enable), dan BHE (bus high enable) yang akan dibahas kemudian.
2. 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 '$'
3. IC Latch 74273
Untuk menghubungkan address ke memori atau I-O maka diperlukan pemisahan address rendah yang multiplek dengan data dengan memakai rangkaian latch. Rangkaian latch akan selalu aktif dengan terhubungnya ke ground kaki LE maka untuk bekerjanya IC latch ini diperlukan sinyal kontrol yang di-input-kan ke kaki –OE. Pin -OE mendapat input dari pin ALE yang merupakan sinyal kontrol yang artinya pin ini akan aktif setiap mikroprosesor meng-output-kan address.
IC 74154 merupakan salah satu keluarga TTL yang dimana fungsi dari IC ini adalah sebagai dekoder/demultiplexter 4-16 saluran. Tiap decoder 4-saluran-ke 16-saluran monolit ini menerapkan rangkaian TTL untuk mengubah 4 input biner menjadi 16 jalur keluar, bila kedua input E1 dan E2 adalah rendah. Setiap komponen I-O harus diberi address. Misalkan, ada tiga komponen I-O yang yaitu PPI 8255, PIT 8253 dan PIC 8259 seperti maka untuk membedakannya dapat dibuatkan rangkaian decoder dengan memakai IC decoder 74154 yang keluarannya ada 16.
4. 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.
Keypad adalah sekumpulan tombol atau sakelar yang disusun dalam kisi-kisi atau pola lainnya, biasanya ditemukan pada perangkat elektronik seperti telepon, kalkulator, dan sistem keamanan. Keypad memungkinkan pengguna untuk memasukkan data, perintah, atau informasi numerik ke dalam perangkat.
Spesifikasi Keypad:
Model keypad : keypad 4x3
Ukuran Pad : 69,2 x 76,9 x 0,8mm
Panjang Kabel: 3-1/3” atau 86mm (termasuk konektor)
Konektor: Dupont 7 pin, Pitch 0,1 “(2,54mm)
Rating maksimum : 35VDC, 100mA
Spesifikasi Isolasi : 100M Ohm, 100V
Daya Tahan Dielektrik : 250VRms (60Hz, 1 menit)
Pantulan Kontak : <= 5ms
Suhu Operasi : -20 hingga 40 ° C
6. 7-Segment
Seven segment merupakan bagian-bagian yang digunakan untuk menampilkan angka atau bilangan desimal. Seven segment terbagi menjadi 7 batang LED yang disusun membentuk angka 8. LED tersebut juga dapat digunakan untuk menampilkan huruf A-F yang disebut juga DOT Matriks. Setiap segment ini terdiri dari 1 atau 2 LED (Light Emitting Dioda). Seven segment bisa menunjukan angka-angka desimal serta beberapa bentuk tertentu.
Common Cathode merupakan bergabung menjadi satu Pin, sedangkan penujang Anoda bisa menjadi Input untuk masing-masing Segmen LED. Kaki Katoda yang terhubung menjadi 1 Pin ini merupakan Terminal Negatif (-) atau Ground sedangkan Signal Kendali (Control Signal) akan diberikan kepada masing-masing Kaki Anoda Segmen LED.LED Seven Segment Display Tipe Common Katoda.
Pada LED 7 Segmen jenis Common Cathode (Katoda), Kaki Katoda pada semua segmen LED adalah terhubung menjadi 1 Pin, sedangkan Kaki Anoda akan menjadi Input untuk masing-masing Segmen LED. Kaki Katoda yang terhubung menjadi 1 Pin ini merupakan Terminal Negatif (-) atau Ground sedangkan Signal Kendali (Control Signal) akan diberikan kepada masing-masing Kaki Anoda Segmen LED.
4. Percobaan [kembali]
a. Listing Program ; 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
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-A7. tanda bahwa alamat akan dikirim ke ic decoder 74154 adalah saat chip select pada ic 8255 berlogika low atau logika 0. maka selanjutnya data akan dikirimkan ke pin IO0 pada ic 74154. kemudian data tadi akan diteruskan ke mikroprosesor 8086 melalui pin M/IO yang aktif rendah. setelah mikroprosesor 8086 mnerima inputan tadi maka kemudian alamat tadi 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-A7. tanda bahwa alamat akan dikirim ke ic decoder 74154 adalah saat chip select pada ic 8255 berlogika low atau logika 0. maka selanjutnya data akan dikirimkan ke pin IO0 pada ic 74154. kemudian data tadi akan diteruskan ke mikroprosesor 8086 melalui pin M/IO yang aktif rendah. setelah mikroprosesor 8086 mnerima inputan tadi maka kemudian alamat tadi 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.
5. Video [kembali]
6. Link Download [kembali]
File Rangkaian klik disini
File Kodingan klik disini
Datasheet Mikroprosesor 8086 klik disini
Datasheet IC 74273 klik disini
Video referensi klik disini
Tidak ada komentar:
Posting Komentar