Borland Delphi2.0/3.0 dengan fungsi yang kuat dan pemrograman yang nyaman dan cepat
Dan disukai oleh sebagian besar programmer. Namun ketika menggunakannya untuk menulis program kontrol industri, Anda perlu melakukannya
Perangkat eksternal yang terhubung ke komputer beroperasi, yaitu langsung membaca dan menulis alamat I/O.
Saat ini, perangkat lunak tersebut tampaknya memiliki beberapa kekurangan.
Menanggapi permasalahan tersebut, penulis menggunakan Delphi 2.0/3.0 untuk menulis dalam bentuk inline assembly
Modul PORT95.PAS dipasang, yang dapat dengan mudah mewujudkan operasi membaca dan menulis langsung pada alamat I/O.
Kode ini sederhana dan cepat dalam eksekusi.
Saat menggunakannya, cukup tambahkan PORT95.PAS ke file proyek dan tambahkan Port ke pengguna
95, Anda dapat langsung mengoperasikan port I/O di aplikasi.
Metode implementasi spesifik dan kode sumber PORT95.PAS adalah sebagai berikut:
satuan Port95;
antarmuka
fungsi PortReadByte(Addr:Word) : Byte;
fungsi PortReadWord(Addr:Word) : Kata;
fungsi PortReadWordLS(Addr:Word) : Kata;
Prosedur PortWriteByte(Addr:Word; Nilai:Byte);
prosedur PortWriteWord(Addr:Word; Nilai:Word);
prosedur PortWriteWordLS(Addr:Word; Nilai:Word);
pelaksanaan
{*
* Port Baca fungsi byte
*Parameter:alamat port
*Kembali: nilai byte dari port yang diberikan
*}
fungsi PortReadByte(Addr:Word): Byte;
saudara;
asm
MOVDX, KAPAK
DI AL,DX
akhir;
{*
* Fungsi Kata Baca Port KECEPATAN TINGGI
* Parameter: alamat port
* Kembali: nilai kata dari port yang diberikan
* Komentar: mungkin ada masalah dengan beberapa kartu dan komputer itu
tidak dapat mengakses seluruh kata, biasanya berhasil.
*}
fungsi PortReadWord(Addr:Word): Word;
saudara;
asm
MOVDX, KAPAK
DI AX,DX
akhir;
{*
* Fungsi Kata Baca Port KECEPATAN RENDAH
* Parameter: alamat port
*Kembali:nilai kata dari port yang diberikan
*Komentar: bekerja dalam kasus, hanya untuk menyesuaikan DELAY jika perlu
*}
fungsi PortReadWordLS(Addr:Word): Word;
saudara perempuan;
konstanta
Penundaan = 150;
// tergantung kecepatan CPU dan kecepatan kartu
asm
MOVDX, KAPAK
DI AL,DX
//baca port LSB
MOV ECX, Penundaan
@1:
LOOP @1 //penundaan antara dua pembacaan
XCHG AH,AL
INC DX
//pelabuhan+1
DI AL,DX //baca port MSB
XCHG AH,AL //memulihkan urutan byte
akhir;
{* Fungsi byte Port Tulis*}
prosedur PortWriteByte(Addr:Word; Nilai:Byte merakit
r;
asm
XCHGAX,DX
KELUAR DX, AL
akhir;
{*
* Prosedur penulisan kata Port KECEPATAN TINGGI
* Komentar: mungkin ada masalah dengan beberapa kartu dan komputer itu
tidak dapat mengakses seluruh kata, biasanya berhasil.
*}
prosedur PortWriteWord(Addr:kata; Nilai:kata merakit
r;
asm
XCHGAX,DX
KELUARDX, AX
akhir;
{*
* Prosedur Tulis Word Port KECEPATAN RENDAH
*}
prosedur PortWriteWordLS(Addr:word; Nilai:word assemb
mendaftar;
konstanta
Penundaan = 150;
// tergantung kecepatan CPU dan kecepatan kartu
asm
XCHGAX,DX
KELUAR DX, AL
MOV ECX, Penundaan
@1:
lingkaran @1
XCHG AH,AL
INC DX
KELUAR DX, AL
akhir;
akhir. //Akhir dari unit
PORT95.PAS di atas cocok untuk sistem operasi Delphi 2.0/3.0 dan Windows 95
.