Port paralel disebut sebagai port paralel.
1. Baca dan tulis paralel
Dalam bahasa perakitan, port paralel dapat dioperasikan dengan instruksi masuk dan keluar, tetapi tidak ada fungsi dan metode yang sesuai di Delphi untuk membaca dan menulis port paralel. Instruksi perakitan masuk dan keluar dapat dengan mudah membaca dan menulis port paralel. Kami juga dapat mengakses port paralel dengan memanggil Windows API Functions atau DLL dan VXD yang disediakan oleh pihak ketiga, tetapi lebih nyaman dan cepat membaca dan menulis port paralel dengan menggunakan metode perakitan tertanam.
Gunakan fungsi readport dan prosedur Writeport berikut untuk membaca dan menulis port paralel, dan port parameter adalah alamat port yang akan dioperasikan.
fungsi readport (port: word): byte;
var
B: byte;
Mulai
Asm
MOV DX, Port;
Di Al, DX;
MOV B, AL;
AKHIR;
Hasil: = B;
akhir;
Prosedur Writeport (port: Word; conbyte: byte);
Mulai
Asm
MOV DX, Port;
MOV AL, CONBYTE;
Out DX, AL;
AKHIR;
akhir;
Untuk mengontrol port paralel dalam istilah bitwise, Anda dapat membaca data port paralel terlebih dahulu, kemudian melakukan operasi bit, dan kemudian menulis ke port paralel lagi, sehingga kontrol bit port paralel dapat dicapai.
Operator logis dan melakukan logika bitwise dan operasi pada dua angka yang akan dioperasikan: yaitu, hasil 1 dan 1 adalah 1, dan yang lainnya 0 dan 1, 1 dan 0 dan 0 dan 0. Hasil 0 adalah semua 0 .
Operator logis atau melakukan bitwise logis atau operasi pada dua angka untuk dioperasikan: yaitu, selama dua bit "atau" adalah satu, hasilnya adalah 1;
Gunakan dan operator untuk menentukan posisi 0. Misalnya, biner hexadecimal 84H adalah: 10000100, dan bit ketiga adalah 1. Untuk mengatur posisi ketiga ke 0 dan bit lainnya tetap tidak berubah, Anda dapat menggunakan: $ 84 dan $ fb = $ 80, nilai biner 80h adalah 10000000.
Gunakan OR Operator untuk menentukan posisi 1, misalnya: bit kedua dari hexadecimal 84H adalah 0. Untuk mengatur bit kedua menjadi 1 dan bit lainnya tetap tidak berubah, Anda dapat menggunakan: $ 84 atau $ 02 = $ 86, 86H nilai biner adalah 10000110.
contoh:
1. Tetapkan potensial bit D2 port data 378H ke rendah, yaitu, set 0:
B: = readport ($ 378);
B: = B dan $ fb;
Writeport ($ 378, b);
2. Tetapkan potensi bit D2 port data 378H ke tinggi, yaitu, set 1:
B: = readport ($ 378);
B: = B atau $ 04;
Writeport ($ 378, b);
3. Tentukan potensi bit D2 port data 378H:
B: = readport ($ 378);
if ((b dan $ 04) = $ 04) lalu
// Kode saat potensinya tinggi
kalau tidak
// kode saat potensi rendah
atau:
B: = readport ($ 378);
if ((b atau $ fb) = $ ff) lalu
// Kode saat potensinya tinggi
kalau tidak
// kode saat potensi rendah
3. Implementasi spesifik
Contoh berikut adalah potensi tinggi dari setiap bit port data 378H yang mengontrol port paralel. 8 bit port data: D0 ~ D7 sesuai dengan pin 2 ~ 9 dari antarmuka paralel.
Pertama jalankan Delphi, buat proyek baru, dan klik F12 untuk menambahkan kode port baca dan tulis ke Unit1 dari Form1:
fungsi readport (port: word): byte;
Prosedur Writeport (port: Word; conbyte: byte);
fungsi readport (port: word): byte;
var
B: byte;
Mulai
Asm
MOV DX, Port;
Di Al, DX;
MOV B, AL;
AKHIR;
Hasil: = B;
akhir;
Prosedur Writeport (port: Word; conbyte: byte);
Mulai
Asm
MOV DX, Port;
MOV AL, CONBYTE;
Out DX, AL;
AKHIR;
akhir;
Tambahkan 8 komponen kotak centang, ubah properti teks mereka ke D0 ke D7 masing -masing, dan atur ke kiri.
Klik dua kali CHECKBOX1 dan tambahkan kode program berikut ke acara OnClick dari komponen centang kotak:
Prosedur TFORM1.CheckBox1Click (Pengirim: Tobject);
var
B: byte;
Mulai
B: = 0;
Jika centang kotak
B: = B atau $ 01;
Jika centang kotak
B: = B atau $ 02;
Jika kotak centang3
B: = B atau $ 04;
Jika kotak centang4
B: = B atau $ 08;
Jika kotak centang5
B: = B atau $ 10;
Jika centang kotak
B: = B atau $ 20;
jika centang kotak
B: = B atau $ 40;
jika centang kotak
B: = B atau $ 80;
Writeport ($ 378, b); // Tulis port data
akhir;
Setelah input selesai, atur acara OnClick dari Checkbox2 ke Checkbox8, komponen 7 centang, ke acara OnClick Checkbox1: Checkbox1Click.
Pada saat ini, kompilasi dan jalankan program, Anda dapat mengklik 8 kotak centang ini untuk mengontrol potensi setiap bit port data LPT1.
Selanjutnya, fungsi memantau status port data port paralel ditambahkan.
Tambahkan komponen timer di Form1: Timer1, ubah properti yang diaktifkan ke properti false dan interval ke 1.
Ditambahkan ke acara Ontimer di Timer1:
Prosedur TFORM1.TIMER1TIMER (Pengirim: Tobject);
var
B: byte;
Mulai
B: = Readport ($ 378); // Baca port data
Centang kotak.
Centang kotak2.
Centang kotak3.
Centang kotak4.
Centang kotak5.
CHECKBOX6.CHECKED: = ((b atau $ df) = $ ff);
Centang kotak.
Centang kotak.
akhir;
Tambahkan komponen kotak centang, dan properti Caption yang dimodifikasi adalah "Monitor Parallel Port", dan tambahkan ke acara OnClick:
Prosedur TForm1.CheckBox9Click (pengirim: TOBJEKS);
Mulai
Timer1.enabled: = centang kotak.
akhir;
Kompilasi dan jalankan program, klik "Port Monitor Paralel", dan Anda dapat memantau status port Paralel LPT1 Port Data 378H dan memodifikasi statusnya secara real time.
Untuk memfasilitasi melihat dan memverifikasi status port data 378H, saya membuat sirkuit uji port paralel kecil, yang menggunakan antarmuka pencetakan, 8 LED (dioda pemancar cahaya) dan resistor 8 1K. :
Setelah diagram sirkuit selesai, instal pada port paralel komputer, dan jalankan program tertulis untuk dengan mudah melihat potensi setiap bit port data 378H.
Akhirnya, mari kita lakukan eksperimen lentera berputar lainnya.
Pertama -tama mendeklarasikan variabel global TB: tambahkan "tb: byte" di bawah "form1: tform1":
var
Form1: tform1;
TB: byte;
Kemudian tambahkan timer dan kotak centang di Form1, ubah properti yang diaktifkan dari Timer2 menjadi false, ubah properti interval menjadi 300, klik dua kali timer2, dan tambahkan ke acara Ontimer-nya:
Prosedur TFORM1.TIMER2TIMER (Pengirim: Tobject);
var
B: byte;
Mulai
Jika TB = 0 lalu
TB: = 1
kalau tidak
TB: = TB * 2;
WritePort ($ 378, TB);
B: = readport ($ 378);
Centang kotak.
Centang kotak2.
Centang kotak3.
Centang kotak4.
Centang kotak5.
CHECKBOX6.CHECKED: = ((b atau $ df) = $ ff);
Centang kotak.
Centang kotak.
akhir;
Ubah Properti Caption dari Checkbox10 menjadi "Revolving Light Demo", lalu klik dua kali kotak centang10, dan tambahkan ke acara OnClick-nya:
Prosedur TFORM1.CHECKBOX10CLICK (pengirim: Tobject);
Mulai
Timer2.enabled: = centang kotak10.Checked;
akhir;
Kompilasi dan jalankan program.
Klik "Demonstrasi Lentera Revolving", apakah Anda pernah melihat efek "Revolving Lantern"? Dengan memodifikasi interval Timer2, Anda dapat menyesuaikan kecepatan.
CATATAN: Metode pengalihan embedding di atas port paralel hanya dapat digunakan di bawah Win9x.
Program di atas diuji dan diwariskan di bawah Win98+Delphi6.0