Rabu, 19 Mei 2010

Membuat Program Keypad dengan Codevisionavr

Membuat Program Keypad dengan Codevisionavr


#include
#include

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include

// Declare your global variables here
unsigned char key;

unsigned char keypad()
{
PORTA=0b11111100;
if(PINA.5==0) return ('1');
if(PINA.6==0) return ('2');
if(PINA.7==0) return ('3');

PORTA=0b11111010;
if(PINA.5==0) return ('4');
if(PINA.6==0) return ('5');
if(PINA.7==0) return ('6');

PORTA=0b11110110;
if(PINA.5==0) return ('7');
if(PINA.6==0) return ('8');
if(PINA.7==0) return ('9');

PORTA=0b11101110;
if(PINA.5==0) return ('*');
if(PINA.6==0) return ('0');
if(PINA.7==0) return ('#');
}
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0xFE;
DDRA=0x1F;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

while (1)
{
// Place your code here
key=keypad();
if(key=='1');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=1");
}
if(key=='2');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=2");
}
if(key=='3');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=3");
}
if(key=='4');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=4");
}
if(key=='5');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=5");
}
if(key=='6');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=6");
}
if(key=='7');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=7");
}
if(key=='8');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=8");
}
if(key=='9');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=9");
}
if(key=='*');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=*");
}
if(key=='#');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=#");
}
if(key=='0');
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("keypad=0");
}



};
}

DAFTAR INTERRUPT untuk assembli

DAFTAR INTERRUPT

Interrupt Logical Addr. Physical Addr. Purpose
0 00E3:3072 03EA2 Divide error
1 0600:O8ED 068ED Single-step (trace command in DEBUG)
2 F000:E2C3 FE2C3 Nonmaskable interrupt
3 0600:08E6 068E6 Breakpoint
4 0700:0 147 07147 Signed number arithmetic overflow
5 F000:FF54 FFF54 Print screen (BIOS)
6, 7 reserved
8 F000:FEA5 FFEA5 IRQO of 8259 (BIOS timer interrupt)
9 F000:E987 FF987 IRQ1 of 8259 (BIOS keyboard interrupt)
A IRQ2 of 8259 (reserved)
B IRQ3 of 8259 (reserved for serial corn2)
C IRQ4 of 8259 (reserved for serial corn 1)
D IRQ5 of 8259 (reserved for hard disk XT)
E F000:EF57 FEF57 IRQ6 of 8259 (floppy diskette)
F 0070:0 147 00847 IRQ7 of 8259 (parallel printer LPT1)
10 F000:F065 FF065 Video I/O (BIOS)
11 F000:F84D FF84D Equipment configuration check (BIOS)
12 F000:F841 FF841 Memory size check (BIOS)
13 F000:EC59 FEC59 Disk I/O (BIOS)
14 F000:E739 FE739 RS-232 110 (BIOS)
15 F000:F859 FF859 Cassette I/O (BIOS)
16 F000:E82E FE82E Keyboard I/O (BIOS)
17 F000:EFD2 FEFD2 Parallel printer I/O (BIOS)
18 F600:0000 F6000 Load ROM BASIC
19 F000:E6F2 FE6F2 Load boot-strap (BIOS)
1A F000:FE6E FFE6E Time-of-day (BIOS)
lB 0070:0 140 00840 Ctrl-Brk control (BIOS)
1C F000:FF53 FFF53 Timer control
1D F000:FOA4 FFOA4 Video parameters table
1E 0000:0522 00522 Floppy disk parameters table
iF 00E3:0B07 01937 Graphics character table (DOS 3.0 and up)
20 PSP:0000 DOS program terminate
21 Relocatable DOS fttnctjon calls
22 PSP:000A DOS terminate address
23 PSP:000E DOS Ctrl-Brk exit address
24 PSP:00 12 DOS critical error-handling vector
25 Relocatable DOS absolute disk read
26 Relocatable DOS absolute disk write
27 Relocatable DOS terminate but stay resident (TSR)
28 - 2E Reserved for DOS
2F Relocatable Multiplex interrupt
30 - 3F Reserved for DOS
40 FEC59 Diskette I/O (XT)
41 FE4O 1 Fixed (hard) disk parameters (XT)
42 - 5F Reserved for DOS
60 - 66 User defined
67 Expanded memory manager
68 - 7F Not used
80 - 85 Reserved for BASIC
86 – FO BASIC interpreter
Fl - FF Not used

(Reprinted by permission from “IBM BIOS Technical Reference” c. 1987 by International Business Machines Corporation)

Daftar Interrupt
BIOS INTERRUPT
Interrupt 0
Kegunaan: Devide By 0
Interrupt ini hampir tidak pernah digunakan dalam program. Interrupt 0 akan mencetak ‘Devide Overflow’ dan menghentikan proses program bila prosessor melakukan pembagian dengan 0.
Interrupt 1
Kegunaan: Single Step
Interrupt 1 juga tidak pernah digunakan dalam program, kecuali program-program Debug seperti DEBUG.COM dan DOS, Turbo Debuger dan Borland dan lain-lain. Interrupt 1 akan menganalisa langkah per langkah dan proses suatu program.
Interrupt 2
Kegunaan: Non Maskable Interrupt (NMI)
Interrupt ini berguna untuk mengecek perangkat memory yang terpasang, bila ternyata terjadi kesalahan maka interrupt ini akan melakukan pencetakan kata PARITY CHECK 2. Interrupt ini tidak dapat dihentikan prosesnya dengan mengeset Interrupt Flag menjadi 1
Interrupt 3
Kegunaan: Break Point
Interrupt ini juga jarang dipakai pada program. Namun seperti halnya interrupt 1, interrupt 4 ini mutlak dipakai dalam program- program debugger. Interrupt ini berguna untuk menghentikan program bila suatu program debug melaksanakan perintah Go.
Interrupt 4
Kegunaan: Overflow
Seperti Interrupt 0, Interrupt 4 ini akan bekerja bila ternyata kondisi menunjukkan overflow.
Interrupt 5
Kegunaan: Print Screen
Bila kita menjalankan Interrupt 5h ini, maka semua yang terdapat di layar akan tercetak ke printer. Interrupt 5h ini juga akan dipanggil bila kita menekan tombol Print Screen yang terdapat pada keyboard.
Interrupt 6 & 7
Kegunaan: Kosong
Interrupt 8
Kegunaan: Time Of Day
Interrupt ini bertugas untuk menjaga waktu yang terdapat pada PC, dipanggil sebanyak 18.2 kali setiap detik. Jika tanggal pada PC akan diganti, maka interrupt ini akan melakukannya. Interrupt ini akan memanggil Interrupt 1C hexa setiap kali dipanggil.
Interrupt 9
Kegunaan: Keyboard
Interrupt ini bertanggung jawab atas masukan dan keyboard. Interrupt ini akan dipanggil dan menerjemahkan masukan dan keyboard menjadi scan code dan ASCII code dan diletakkan di suatu buffer yang disebut dengan Keyboard Buffer.
Interrupt OAh
Kegunaan: Kosong
Interrupt OBh dan OCh
Kegunaan: Comunication
Kedua interrupt ini berguna untuk menangani masukan dan keluaran melalui alat komunikasi.
Interrupt ODh
Kegunaan: Printer Alternate
Interrupt ODh menangani printer alternate.
Interrupt OEh
Kegunaan: Disket
Interrupt OEh merupakan suatu generator disk.
Interrupt OFh
Kegunaan: Printer
Interrupt OFh merupakan suatu generator printer.
Interrupt 10h
Kegunaan: Video Handling
Interrupt 10h Service 0h
Kegunaan: Set Screen Mode
Fungsi 0h dan Interrupt 10h berguna untuk mengeset mode layar yang diinginkan. Mode layar terdiri atas:
Mode Bentuk
0 40 * 25 hitam putih
1 40 * 25 berwarna
2 80 * 25 hitam putih
3 80 * 25 berwarna
4 320 * 200 berwarna
5 320 * 200 hitam putih
6 640 * 200 berwarna
7 80 * 25 monokrom (untuk layar monokrom)

Input: Output:
AH = 0 Tidak ada
AL = Mode layar
Interrupt 10h Service 01h
Kegunaan: Set Cursor Type
Fungsi ini berguna untuk mengeset tipe kursor yang sedang aktif. Untuk menghilangkan kursor, bit kelima dan CH harus berisikan 1.
Input: Output:
AR = Olh Tidak ada
CH = Garis mulai kursor
CL = Garis akhir kursor
Interrupt 10h Service 02h
Kegunaan: Set Cursor Position
Fungsi ini berguna untuk mengatur letak kursor pada layar.
Input: Output:
Ah = 02h Tidak ada
DH = Bans layar
DL = Kolom layar
Bh = Halaman layar
Interrupt 10h Service 03h
Kegunaan: Find Cursor Position & Type
Fungsi mi berguna untuk mengambil posisi kursor pada layar, beserta tipe kursor tersebut.
Input: Output:
AH = 03h DH = Baris layar
BR = Ralaman layar DL = Kolom layar
CH = Garis awal kursor
CL = Garis akhir kursor
Interrupt 10h Service 04h
Kegunaan: Read Light Pen Position
Fungsi mi berguna untuk mengambil posisi light pen.
Input: Output:
AH = 04h AH = 0 — Light Pen tidak ada
AH = 1 — Light Pen ada dan posisi
pada DH = baris
DL = kolom
Interrupt 10h Service 05h
Kegunaan: Set Aktive Display Page
Fungsi ini berguna untuk mengaktifkan halaman layar.
Input: Output:
AR = 04h Tidak Ada
AL = 0 — 3 Mode layar 2,3
= 0 — 7 Mode layar 0,1
Interrupt 10h Service 06h
Kegunaan: Scrool Active Page Up
Fungsi mi akan menghapus isi layar ke atas, warna yang dihapus akan diletakkan di nible atas register BH dan terdiri atas:

Angka Warna
0 Hitam
1 Biru
2 Hijau
3 Cyan
4 Merah
5 Magenta
6 Kuning
7 Putih
8 Hitam berkedip
9 Biru terang (berkedip)
A Hijau terang (berkedip)
B Cyan terang (berkedip)
C Merah terang (berkedip)
D Magenta terang (berkedip)
E Kuning terang (berkedip)
F Putih terang (berkedip)
Input: Output:
AL = Jumlah baris yang dihapus Tidak ada
0= semua).
CH,CL = Baris, Kolom titik atas
daerah yang dihapus
DH,DL = Baris, Kolom titik bawah
daerah yang dihapus
Bh = Warna layar yang muncul
AH = 06h
Interrupt 10h Service 07h
Kegunaan: Scrool Active Page Down
Fungsi ini berguna untuk menhapus layar secara ke bawah.
Input: Output:
AH = 07h Tidak ada
CH,CL = Baris, Kolom titik atas
daerah yang akan dihapus
DH,DL = Baris, Kolom titik bawah
daerah yang akan dihapus
BH = Warna layar yang muncul
AL = banyaknya bans yang dihapus
(0 = semua)
Interrupt 10h Service 08h
Kegunaan: Read Character And Attribute
Fungsi mi berguna untuk membaca warna dan karakter yang terdapat pada posisi kursor.
Input: Output:
AH =08h AH =Warna tulisan
BH = Halaman layar AL = Kode ASCII tulisan
Interrupt 10h Service 09h
Kegunaan: Write Karakter And Attribute
Fungsi mi berguna untuk mencetak karakter dengan warna pada posisi kursor. Di sini karakter yang dicetak menurut Tabel IBM ASCII, bukan Tabel ASCII.
Input: Output:
AH = 09h Tidak ada
AL = Kode ASCII
BR = Halaman layar
BL = Warna karakter
CX = Banyaknya karakter yang
akan dicetak
Interrupt 10h Service 0Ah
Kegunaan: Write Character
Fungsi mi berguna untuk mencetak sebuah karakter di posisi kursor. Di sini karakter yang dicetak adalah menurut Tabel IBM ASCII, bukan Kode ASCII. Berbeda dengan service 09h, service mi
hanya mencetak dalam warna 07h (putih di atas hitam) pada mode layar teks dan mencetak dengan warna pada mode layar grafik.
Input: Output:
AR = OAh Tidak ada
AL = Kode ASCII
BH = Halaman layar
CX = Banyaknya karakter yang dicetak
BL = Warna (untuk grafik)

Interrupt lOh Service OBh
Kegunaan: Set Color Palette . Fungsi ini berguna untuk mengatur komposisi warna (palette) suatu layar grafik. Register BH harus berisikan kode palette yang mempunyai 2 kemungkinan yaitu 0 dan 1. Bila register BH berisikan 0 maka register BL dapat berisikan kode warna dengan 16 warna dengan pembagian 4 bit untuk warna dasar dan 4 bit untuk warna border. Adapun ke-16 warna tersebut adalah:

0 = Hitam
1 = Biru
2 = Hijau
3 = Cyan
4 = Merah
5 = Magenta
6 = Cokiat
7 = Putih 8 = Gray
9 = Biru Terang
10 = Hijau terang
11 = Cyan terang
12 = Merah terang
13 = Magenta terang
14 = Kuning
15 = Putih bersinar

Bila register BH berisikan 1, maka pilihan register BL hanya dua
yaitu:
0 untuk Hijau/Merah/Coklat
1 untuk CyanlMagenta/Putih
Input: Output
AH = OBh tidak ada
BH = Kode palette
BL = Kode warna

Interrupt 10h Service OCh
Kegunaan: Write Pixel Dot
Fungsi mi berguna untuk mencetak sebuah titik di layar grafik.
Input: Output
AH= 0Ch tidak ada
AL = warna titik
CX = kolom titik
DX = baris titik
Interrupt lOh Service ODh
Kegunaan: Read Pixel Dot
Fungsi ini berguna untuk membaca titik yang terdapat di warna layar grafik.
Input: output
AH = ODh AL = warna titik
CX = Kolom titik CX = colom titik
DX = Baris titik DX = baris titik
Interrupt 10h Service 0Eh
Kegunaan: TTY Character Output
Fungsi mi berguna untuk mencetak karakter dan tabel ASCII ke layar.
Input: Output:
AH = OEh Tidak ada
AL = Kode ASCII
BH = Halaman layar
BL = Warna tulisari (pada layar grafik)
Interrupt 10h Service 0Fh
Kegunaan: Get Current Aktive Page
Fungsi mi berguna untuk mengambil halaman layar yang sedang aktif pada saat interrupt mi dijalankan.
Input: Output:
AH = OFh AH = Lebar layar
AL = Mode layar
BH = Halaman layar yang aktif
Interrupt 11h
Kegunaan: Get Equipment List
Interrupt 11h berguna untuk mengambil Equipment list. Equipment List merupakan suatu byte data yang bit-bitnya menyatakan komposisi peralatan komputer yang terdiri atas:
Bit Keterangan
14—15 banyaknya parallel printer
13 serial printer/internal modem
12 GAME I/O
9 — 11 Jumlah RS-232
8 Reserved (kosong)
6 — 7 Jumlah disk drive ( 0 = 1 drive).
4 — 5 Inisial Mode layar.
2 — 3 RAM di Motherboard
1 NDP (Co-Processor 8087)
0 Disk Drive

Input: Output:
Tidak Ada AL = Equipment List
Interrupt 12h
Kegunaan: Get Memory Size
Interrupt 12h ini berguna untuk mengambil besarnya memory induk (base memory) yang terdapat pada komputer.
Input: Output:
Tidak Ada AX = Besarnya memory dalam KB
Interrupt 13h
Kegunaan: Disk Function
Interrupt 13h Berguna untuk mengatur operasi disk.
Interrupt 13h Service 0h
Kegunaan: Reset Disk Drive
Fungsi 0h dan Interrupt 13h berguna untuk melakukan Reset terhadap suatu disk drive.
Input: Output:
AH = 0 Tidak Ada
Interrupt 13h Service 01h
Kegunaan: Get Floppy Disk Status
Fungsi mi berguna untuk mengetahui apakah terjadi kesalahan pada disk. Adapun kesalahan pada disk tersebut adalah:
Isi Disket/Hard disk Arti
0(0) SEMUA Tidak ada error
1(1) SEMUA Kesalahan Parameter Disket
(Invalid diskette parameter)
2(2) SEMUA Alamat yang dituju tidak ada
(Address mark was not found)
3(3) DISKET Menulis di disket yang terproteksi
(Attempted write on protected
diskette)
4(4) SEMUA Sector tidak ditemukan
(Sector was not found)
5(5) Hard disk Reset gagal (Reset failed)
6(6) DISKET Disket dipindahkan
(Diskette was removed)
7(7) Hard Disk Kesalahan tabel parameter
(Bad Parameter Table)
8(8) DISKET DMA melampaui operasi sebenarnya
(DMA Overrun on previous operation)
9(9) SEMUA Operasi melewati 1 segment
(Attempted to cross 64k segment)
A(10) Hard Disk Bad Sector Flag
10(16) SEMUA kesalahan CRC atau ECC pada saat
baca
(CRC or ECC error on disk read)
11(17) Hard Disk Data yang dibenarkan dan ECC
(ECC corrected data error)
20(32) SEMUA Controller failed
40(80) SEMUA Seek Operation Failed
80(128) SEMUA Drive tidak siap
(Drive timed out,assumed not ready)
AA(170) Hard Disk Drive not ready
BB(187) Hard Disk Undefined Error
CC(204) Hard Disk Write fault
E0(224) Hard Disk Status Error

Input: Output:
AH = 1 AL = Status

Interrupt 13h Service 02h
Kegunaan: Read Disk Sectors
Fungsi ini berguna untuk membaca suatu sector dan disket. Bila terjadi kesalahan, kesalahan akan sama dengan status yang terdapat pada fungsi 1.
Input: Output:
AH = 02h AH = Kode Kesalahan
AL = Jumlah sector
BX = Offset buffer tampung
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment buffer tampung
Interrupt 13h Service 03h
Kegunaan: Write Disk Sectors
Fungsi ini berguna untuk menulis sector ke disk. Bila terjadi kesalahan operasi akan terdapat kode kesalahan di register AH yang artinya dapat Anda lihat pada service 01h.
Input: Output:
AH = 03h AH = Kode kesalahan
AL = Jumlah sector
BX = Offset data yang akan ditulis
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment data yang akan ditulis
Interrupt 13h Service 04h
Kegunaan: Verify Disk Sectors
Fungsi ini berguna untuk mengecek kesalahan suatu sector dan disk. Kode kembali dan hasil interrupt mi dapat Anda cocokan dengan daftar yang terdapat pada fungsi 0lh.
Input: Output:
AH = 04h AH = Kode kesalahan
AL = Jumlah sector
CH = Track
CL = Sector
DH = Side
DL = Drive
Interrupt iSh Service 05h
Kegunaan: Format Disk Track
Fungsi ini berguna untuk memformat disket secara per track.
Input: Output:
AH = 02h AH = Kode kesalahan
AL = Jumlah sector
BX = Offset dan CHRN
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment dan CHRN
Interrupt 13h Service 06h & 07h
Kegunaan: Tidak ada
Interrupt 13h Service 08h
Kegunaan: Return Drive Parameters
Fungsi ini berguna untuk mengambil parameter hard disk. Karena kadang-kadang nomor track lebih besar dan 1 byte data (255), maka 2 bit paling atas dan CL yang berisi sector akan digunakan untuk 2 bit paling besar dan CH yang berisi track.
Nomor drive yang diberikan harus lebih besar atau sama dengan 80h.
Input: Output:
AR = 08h CH = Track
DL = Drive Hard Disk CL = Sector /Track
(80≤ ) DH = Side
DL = Banyak drive dalam 1 harddisk

Interrupt 13h Service 09h
Kegunaan: Initialize Fixed Disk Table
Fungsi ini hampir sama dengan fungsi 0 dan interrupt 13h. Perbedaannya, fungsi ini hanya khusus untuk hard disk sehingga nomor drive yang diberikan paling kecil 80h.

Input: Output:
AH = OAh Tidak ada
DL = Drive (80h)
Interrupt 13h Service 0Ah
Kegunaan: Read Long Sectors
Fungsi mi berguna untuk membaca suatu sector dan hard disk, isi register DL harus lebifi besar dan 80h.
Input: Output:
AR = OAh AH = Kode Kesalahan
AL = Sector
BX = Offset buffer penampung
CH = Track
CL = Sector
DH = Side
DL = Drive ( 80h≤)
ES = Segment Buffer Penampung
Interrupt 13h Service 0bh
Kegunaan: Write Long Sectors
Fungsi ini berguna untuk menulis suatu sector ke hard disk.
Input: Output:
AH = OBh AH = Kode kesalahan
AL = Sector
BX = Offset data
CH = Track
CL = Sector
DH = Side
DL = Drive ( 8Oh)
ES = Segment Data
Interrupt 13h Service 0Ch
Kegunaan: Seek Cylinder
Fungsi ini berguna untuk memindahkan head pembaca hard disk dan suatu track ke track lain.
Input: Output:
AH = OCh AH = Kode kesalahan
CH = Bagian bawah track
CL = Bagian atas track (bit 6 & 7)
DH = Head
DL = Drive ( 80h )
Interrupt 13h Service 0Dh
Kegunaan: Alternate Reset
Fungsi ini hampir sama dengan fungsi 0, namun fungsi ini digunakan untuk hard disk.
Input: Output:
AH = 0Dh AH = Kode kesalahan
DL = Drive (80h )



Interrupt 14h
Kegunaan: Comunication
Fungsi ini berguna untuk memprogram port komunikasi.
Interrupt 14h Service Oh
Kegunaan: Initialize Communications Port
Fungsi ini berguna untuk melakukan inisialisasi suatu port komunikasi.
Hasil inisialisasi akan berupa keterangan dalam line status dan modem status. Adapun arti kedua byte tersebut adalah: