1.1 Pendahuluan
Bagi sebagian orang, komputer dipandang sebagai alat pengolah kata sekedar pengganti
mesin ketik. Sebagian orang yang lain menggunakan komputer hanya sebagai sarana permainan
video game. Sebagian lainnya lagi memakai komputer untuk menyelesaikan perhitungan
pembukuan/keuangan perusahaannya sekedar pengganti mesin hitung. Sebenarnya penggunaan
komputer tidak hanya sebatas itu, tetapi jauh lebih luas.
Penggunaan komputer di bidang kendali (kontrol) jauh lebih luas dibanding penggunaannya
untuk maksud umum (general purpose). Komputer dapat digunakan sebagai cash register (mesin
bayar), sebagai mesin timbangan otomatis, sebagai pengendali alat musik, mobil, robot, rudal
(peluru kendali), dan sangat banyak lagi yang lainnya. Untuk dapat memanfaatkan komputer sesuai
dengan kebutuhan, perlu diketahui apa saja yang ada di dalam komputer itu dan bagaimana
bekerjanya.
1
dilaksanakan dalam waktu yang tepat. Pewaktuan (timing) memegang peranan yang sangat penting
dalam operasi setiap komputer, sebab tanpa pewaktuan yang tepat, komputer tidak akan dapat
memberikan sesuatu yang berarti bagi pemakainya.
Berdasarkan keterangan di atas, maka secara umum, sebuah komputer dapat digambarkan
dengan diagram blok seperti Gambar 1 berikut:
Bus Alamat
Bus Data
Bus Kendali
Gambar 1 Diagram blok komputer secara umum
2
Biasanya alamat dasar untuk LPT1 adalah 0x378 atau 0x3BC.
Untuk mengidentifikasi dengan tepat alamat port printer untuk suatu komputer tertentu,
dapat digunakan program DEBUG dari DOS untuk menampilkan data pada lokasi memori
0000:00408h yang berisi nomor alamat port printer LPT1 sampai LPT4. Sebagai contoh:
>debug
-d 0000:0408 L8
0000:0400 F8 02 F8 03 00 00 00 00-78 03 78 02 00 00 00 00
LPT1 LPT2 LPT3 LPT4
Pada contoh ini, LPT1 berada pada alamat 0x0378h, LPT2 pada 0x0278h, sementara LPT3 dan
LPT4 tidak ada. Dengan demikian, untuk komputer ini, daftar alamat port paralel adalah sebagai
berikut:
Printer Port Data Port Status Port Kontrol
LPT1 0x0378 0x0379 0x037a
LPT2 0x0278 0x0279 0x027a
LPT3 TIDAK ADA
LPT4 TIDAK ADA
3
Port Data (alamat 0x378):
D7 D6 D5 D4 D3 D2 D1 D0
Data 7 Data 6 Data 5 Data 4 Data 3 Data 2 Data 1 Data 0
Untuk fungsi (yang mengembalikan nilai), format deklarasinya diubah menjadi sebagai berikut:
Pada kedua deklarasi di atas, simbol procname adalah nama prosedur, funcname adalah
nama fungsi, “libname” adalah string yang berupa nama file *.DLL, variable adalah variabel
yang diperlukan pada prosedur atau fungsi, type adalah tipe data untuk variabel yang bersangkutan.
Kata kunci Private digunakan jika prosedur atau fungsi dideklarasikan di dalam modul Form
atau Class. Secara default, jika tidak dituliskan kata kunci Private atau Public, prosedur atau
fungsi adalah bersifat Public.
4
Sebagai contoh, untuk akses perangkat keras, digunakan file “IO.DLL” (diambil dari
internet) yang berisi prosedur PortOut (meniru prosedur outportb pada bahasa C) dan fungsi
PortIn (meniru fungsi inportb pada bahasa C). Untuk menggunakannya, deklarasinya adalah
sebagai berikut:
Private Declare Sub PortOut Lib “IO.DLL” (ByVal PortNo As Integer, ByVal
Data As Byte)
5
1.5.4 Operasi Manipulasi Bit
Pada Gambar 3, dapat dilihat bahwa Port Status memiliki sebuah bit yang aktif rendah,
yaitu bit 7 (MSB), sementara pada Port Kontrol terdapat tiga buah bit yang aktif rendah, yaitu bit 0,
bit 1, dan bit 3. Untuk kedua port ini perlu dilakukan operasi manipulasi bit khusus agar pembacaan
dan penulisan data tidak kacau.
Pada Port Status, hanya lima buah bit tertinggi yang digunakan dan berhubungan dengan
konektor ke luar komputer. Semua masukan ini dijemput dengan cara membaca 5-bit tertinggi dari
Port Status. Namun demikian, karena rangkaian antarmuka printer melakukan inversi (pembalikan
bit) secara hardware, logika 0 pada masukan ~S7 harus dibaca sebagai logika 1 dan sebaliknya.
Potongan program berikut ini menunjukkan contoh pembacaan 5-bit tertinggi dari Port Status
menggunakan bahasa C:
Pada potongan program di atas, Port Status dibaca dan bit 7 (yaitu ~S7) dibalik dengan operasi
EXOR. Hasilnya kemudian digeser ke kanan tiga kali sehingga lima bit tertinggi berada pada posisi
lima bit terendah.
7 6 5 4 3 2 1 0
0 0 0 ~S S6 S5 S4 S3
7
Pada Port Kontrol, hanya empat buah bit terendah yang digunakan dan berhubungan
dengan konektor ke luar komputer. Dari keempat bit ini, bit 3, bit 1, dan bit 0 masing-masing
memiliki logika aktif rendah, yaitu terjadi pembalikan (inversi) secara hardware pada rangkaian
antarmuka port printer. Untuk bit-bit yang menggunakan logika inversi, hal ini harus diperhatikan
agar tidak mengacaukan maksudnya. Untuk itu, bit-bit data yang akan dikirimkan dapat dibalik
dengan cara menggunakan operasi EXOR (exclusive-OR) dengan nilai 0x0B (00001011 biner)
sebelum operasi penulisan. Misalkan diinginkan untuk mengirimkan suatu nilai 0x08 (00001000
biner) ke Port Kontrol, maka dapat digunakan potongan program berikut:
Pada contoh di atas, hanya nibble (4-bit) rendah dari X yang berperan. Pada baris terakhir kode
program di atas, ~C3, ~C1, dan ~C0 merupakan keluaran dalam bentuk terbalik (logika aktif
rendah) dengan menggunakan operasi EXOR sehingga mengatasi inversi secara hardware.
Sebagai perbandingan, jika diinginkan mengeluarkan 1000 pada rendah dan tidak
melakukan inversi, hardware akan membalik bit 3, membiarkan bit 2 apa adanya, dan membalik bit
1 dan 0. Hasil yang muncul pada keluaran adalah 0011 yang jauh berbeda dari yang diharapkan.
Dengan menggunakan operasi EXOR, 1000 sebenarnya dikirimkan ke port sebagai 0011. Hardware
kemudian membalik bit 3, 1 dan 0 dan keluarannya adalah 1000 sesuai dengan yang diharapkan.
Seringkali, ketika menuliskan data, pemrogram hanya tertarik pada beberapa bit dari satu
byte data. Untuk membuat bit-bit pada posisi tertentu berlogika 0, maka dapat digunakan
operasi AND terhadap bit-bit pada posisi yang bersangkutan dengan 0, sementara bit-bit pada posisi
6
lainnya di-AND-kan dengan 1. Sebaliknya, untuk membuat bit-bit pada posisi tertentu berlogika
1, maka dapat digunakan operasi OR terhadap bit-bit pada posisi yang bersangkutan dengan 1,
sementara bit-bit pada posisi lainnya di-OR-kan dengan 0. Potongan program berikut ini
menunjukkan bit 2 dibuat tinggi (logika 1) selama 100 ms dan kemudian dibuat rendah (logika 0).
7
BAB II
APLIKASI 1: MODUL PENGENDALI 12-LED
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface tampilan 12-LED
mampu membuat program komputer untuk mengendalikan tampilan 12-LED
Teori Dasar
Aplikasi yang digunakan untuk mengendalikan tampilan 12-LED merupakan aplikasi yang
paling sederhana, karena untuk menghidupkan dan mematikan sebuah LED hanya dibutuhkan
tegangan standar TTL dengan komponen tambahan berupa sebuah resistor untuk pembatas arus.
Pada aplikasi yang menggunakan 12 buah LED ini, 8 buah LED dikendalikan oleh Port
Data, sedangkan 4 buah LED oleh Port Kontrol.
Rangkaian Interface
8
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 4.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai
Tugas
1. Buatlah program yang memiliki kemampuan berikut:
dapat menghidupkan 12 buah LED sekaligus
dapat mematikan semua LED
dapat membuat 12-LED menyala secara bergiliran membentuk lingkaran
dapat berkedip-kedip
2. Buatlah program yang dapat menghidupkan dan mematikan satu atau lebih LED
yang diinginkan.
3. Buatlah program yang dapat menghidupkan LED secara memantul.
9
BAB III
APLIKASI 2: MODUL PENGENDALI
TAMPILAN SEVEN-SEGMENT
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface tampilan seven-segment
mampu membuat program komputer untuk mengendalikan tampilan seven-segment.
Teori Dasar
Pada dasarnya, untuk menampilkan angka pada satu buah seven-segment diperlukan sebuah
dekoder, misalnya dekoder 7447 yang mampu mengubah data biner 4-bit (kode BCD) menjadi
tampilan digit 0 sampai 9. Setiap segmen (segmen a sampai g) dalam sebuah seven-segment berupa
sebuah LED. Jika semua katoda dari masing-masing LED dalam seven-segment dihubungkan
secara bersama, maka seven-segment ini disebut common-cathode, sedangkan jika semua anoda
dihubungkan, maka seven-segment ini disebut common-anode. Setiap rangkaian LED perlu diberi
resistor sebagai pembatas arus untuk melindunginya terhadap arus listrik yang berlebihan. Nilai
resistor ditentukan berdasarkan sifat kerja LED. Agar dapat menyala, LED membutuhkan arus
antara 5 sampai 30 mA; semakin besar arus diberikan, semakin terang nyala LED. Sewaktu
menyala, jatuh tegangan di antara kedua terminal LED secara umum berkisar 1,5 V. Untuk LED
tunggal dengan tegangan catu sebesar +5 V dan arus sekitar 20 mA, nilai resistor yang dibutuhkan
adalah (5 – 1.5)/0.020 = 175 . Jika menggunakan dekoder 7447, jatuh tegangan pada dekoder itu
sendiri harus diperhitungkan. Untuk tampilan seven-segment yang digerakkan 7447, LED pada
setiap segmen akan menyala jika keluaran 7447 bertegangan rendah (berlogika 0). Tegangan
maksimum keluaran 7447 pada saat berlogika 0 adalah 0,4 V dengan arus 40 mA. Dengan data ini,
cukup aman jika tegangan anoda saat LED menyala dianggap 0,2 V dengan arus 20 mA, sehingga
jatuh tegangan pada resistor pembatas arus adalah 5 – 1,5 – 0,2 = 3,3 V. Ini berarti bahwa resistor
yang dibutuhkan adalah 3,3/0,02 = 165 , yang cukup aman menggunakan resistor standar 168
yang tersedia di pasaran.
Dalam penampilan lebih dari satu digit, jika setiap seven-segment membutuhkan sebuah
dekoder 7447, maka rangkaian menjadi kurang efisien karena membutuhkan dekoder yang banyak
dan konsumsi daya yang besar. Penampilan dengan menggunakan rangkaian seperti ini disebut
penampilan statis. Sebagai contoh, untuk menampilkan 16 digit, dibutuhkan dekoder 16 buah.
Jika seven-segment menampilkan angka 8, artinya ketujuh LED menyala dan masing-masing
menarik arus 20 mA, maka ketujuh LED itu menarik arus 7 x 20 = 140 mA. Jika ke-16 seven-
segment secara bersamaan menampilkan angka 8, maka dibutuhkan arus yang sangat besar, yaitu
16 x 140 mA = 2240 mA = 2,24 A.
Untuk mengatasi kelemahan penampilan statis, digunakan penampilan dinamis. Dalam
penampilan ini, penampilan dilakukan bergilir digit demi digit, dan setiap saat hanya salah satu
digit tampilan yang diaktifkan dan hanya dalam waktu singkat, sehingga kebutuhan daya setiap saat
tidak lebih dari sebesar daya yang dibutuhkan oleh penampil 1 digit. Dengan periode hidup-mati
yang cukup cepat, antara 40 sampai 200 kali setiap detik, mata manusia masih melihat seolah-olah
LED tersebut menyala secara terus-menerus. Operasi mati-hidup ini juga menurunkan duty cycle
(lamanya periode hidup terhadap periode hidup-mati), tidak seperti pada penampilan statis yang
hidup terus-menerus (duty cycle 100%). Dalam cara ini digunakan teknik multiplexing, yaitu
mengirimkan data angka tampilan secara berurutan ke semua seven-segment, tetapi pada setiap saat
hanya satu seven-segment yang dihidupkan.
Aplikasi 2 ini menggunakan bantuan IC decoder/demultiplexer 74154 yang mempunyai 16
keluaran yang pada setiap saat hanya satu keluaran yang aktif (berlogika rendah). Setiap keluaran
dekoder ini digunakan untuk memilih seven-segment yang harus diaktifkan. Masukan pemilih 4-bit
untuk IC ini dihubungkan ke Port Kontrol pada bit ~C0, ~C1, C2, dan ~C3. Seven-segment yang
digunakan adalah jenis common-anode. Data biner untuk menghidupkan segmen-segmen a sampai
g pada masing-masing seven-segment tidak dilewatkan melalui dekoder 7447, tetapi langsung ke
10
segmen yang bersangkutan. Data biner ini diambil dari bit D0 sampai D6 (7 bit saja) pada Port
Data. Karena tidak menggunakan dekoder 7447, setiap seven-segment tidak hanya dapat
menampilkan angka 0 sampai 9, tetapi juga bentuk karakter lain, seperti huruf atau tanda baca
tertentu. Rangkaian lengkap untuk aplikasi dapat dilihat pada Gambar 5.
Dengan rangkaian seperti Gambar 5, penampilan dimulai dengan mengirimkan data angka
dari Port Data pada bit D0 sampai D7 (masing-masing untuk segmen a sampai g) untuk seven-
segment yang anodanya terhubung ke keluaran Y0 dari dekoder melalui transistor. Kemudian
dikirim data pemilih digit (4 bit) dari Port Kontrol ke 74154 sehingga keluaran Y0 aktif dan seven-
segment yang bersangkutan menampilkan data yang diberikan. Penyalaan digit ini dibiarkan
berlangsung sekitar 1 sampai 2 milidetik (atau disesuaikan dengan kecepatan komputer yang
digunakan). Kemudian data untuk digit berikutnya dikirim ke D0 sampai D7 diikuti dengan
pemberian data pemilih digit untuk mengaktifkan keluaran Y1. Setelah masa hidup dilampaui,
kembali dilakukan penampilan digit berikutnya sampai keluaran Y15 diaktifkan dengan cara yang
sama. Setelah semua digit ditampilkan secara bergiliran, proses penampilan diulangi lagi untuk
digit yang pertama sekali diaktifkan.
Rangkaian Interface
11
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 5.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program yang memiliki kemampuan berikut:
dapat menampilkan 16 digit konstan
dapat menampilkan tanggal sekarang
dapat menampilkan jam sekarang
2. Buatlah program yang dapat menampilkan 16 digit yang berkedip-kedip
3. Buatlah program yang dapat menampilkan karakter berjalan.
4. Buatlah program untuk menampilkan counter
.
12
BAB IV
APLIKASI 3: MODUL PENGENDALI LAMPU PIJAR
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface pengendali lampu pijar.
mampu membuat program komputer untuk mengendalikan lampu pijar.
Teori Dasar
Untuk mengendalikan peralatan listrik rumah tangga, misalnya lampu pijar, kipas angin,
dan sebagainya, yang membutuhkan catu daya yang berbeda dengan tingkat tegangan TTL, maka
perlu dibuat rangkaian driver untuk peralatan yang bersangkutan. Untuk lampu pijar, misalnya,
dapat digunakan relay yang diaktifkan dengan transistor. Rangkaian untuk aplikasi ini dapat dilihat
pada Gambar 6.
Rangkaian Interface
13
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 6.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program yang memiliki kemampuan berikut:
dapat menghidupkan semua lampu
dapat mematikan semua lampu
dapat menghidupkan lampu secara bergiliran
2. Buatlah program yang dapat menghidupkan semua lampu secara berkedip-kedip
3. Buatlah program yang dapat menghidupkan dan mematikan satu atau beberapa
lampu yang diinginkan.
14
BAB V
APLIKASI 4: MODUL PENGENDALI MOTOR STEPPER
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface pengendali motor stepper.
mampu membuat program komputer untuk mengendalikan motor stepper.
Teori Dasar
Motor stepper merupakan salah satu jenis motor yang dapat digunakan untuk
memindahkan sebuah benda (beban) dengan jarak perpindahan yang kecil. Berbeda halnya
dengan motor jenis lain yang bergerak dengan putaran yang kontinyu (mulus), motor
stepper bergerak dengan putaran yang kaku. Motor stepper bergerak dari posisi tertentu ke
posisi berikutnya seperti gerak melangkah (step). Motor stepper banyak digunakan untuk
berbagai keperluan, seperti pada pinter Epson LX-800, atau Epson LQ-2170 atau printer
lain yang sejenis (dot-matrix printer). Motor ini juga ditemukan pada floppy disk drive,
harddisk drive, plotter, dan lain-lain.
Motor stepper yang umum digunakan mempunyai jangkauan langkah (step)
berputar antara 0,9º sampai dengan 30º. Motor-motor itu adalah motor stepper dua atau
empat fase. Secara teoritis, sebuah motor stepper berukuran kecil dapat digerakkan secara
langsung oleh mikroprosesor. Dalam kenyataannya, arus dan tegangan yang dapat
dikeluarkan oleh mikroprosersor terlalu kecil untuk menggerakkan sebuah motor stepper
kecil. Sebagai perbandingan, gerbang-gerbang tipe TTL dalam mikroprosesor hanya
mampu mengeluarkan arus dalam orde mA atau tegangan antara 2 sampai 2,5 volt.
Sementara itu, untuk menggerakkan motor stepper dibutuhkan arus yang cukup besar
(dalam orde ampere) dengan tegangan berkisar 5 – 24 V. Untuk mengatasi masalah
tersebut, dibutuhkan sebuah perangkat tambahan yang dapat memenuhi kebutuhan arus dan
tegangan yang besar itu, yaitu dengan menambahkan suatu rangkaian transistor yang
disebut pasangan Darlington. Rangkaian aplikasi untuk pengendalian motor stepper ini
dapat dilihat seperti pada Gambar 7.
Sebuah motor stepper digerakkan dari posisi yang satu ke posisi yang lain
berikutnya dengan mengubah arus yang terhubung ke masing-masing fase. Pengubahan
arus tersebut mempunyai pola/kombinasi tertentu. Berikut ini adalah cara untuk
menggerakkan motor stepper 4-fase.
Fase
CWW
Step
D3 D2 D1 D0
1 0 0 1 1
2 1 0 0 1
3 1 1 0 0
4 0 1 1 0
1 0 0 1 1
CCWW
15
Tabel 3 kombinasi arus fase motor stepper
untuk langkah paruh (half-step)
Fase
Step
D3 D2 D1 D0 CWW
1 0 0 1 1
2 0 0 0 1
3 1 0 0 1
4 1 0 0 0
5 1 1 0 0
6 0 1 0 0
7 0 1 1 0
CCWW
8 0 0 1 0
1 0 0 1 1
Pada Gambar 7, misalkan D0 dan D1 diberi arus (dalam keadaan ON). Bila arus
pada D1 diputus (OFF) dan D3 diberi arus (ON), motor stepper akan bergerak satu langkah
searah dengan putaran jarum jam. Bila arus pada D1 ditutup dan D2 diberi arus, motor
stepper bergerak lagi satu langkah searah putaran jaruim jam. Demikian seterusnya, motor
stepper dapat digerakkan langkah per langkah searah putaran jam.
Pengubahan kombinasi arus fase adalah untuk menggerakkan motor stepper
dengan langkah penuh (full-step). Gerakan motor dapat diperhalus dengan
menggerakkannya setengah-setengah langkah. Hal ini dilakukan dengan mengubah arus
fase motor sesuai dengan urutan yang ditunjukkan oleh Tabel 3. Urutan gerak dari langkah
pertama, kedua, ketiga, dan seterusnya akan menghasilkan gerakan separuh langkah searah
jarum jam; sebaliknya akan menghasilkan gerakan yang berlawanan dengan arah putaran
jam.
16
Rangkaian Interface
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 7.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program untuk mengendalikan motor stepper sehingga motor stepper
dapat berputar CW 1 kali
dapat berputar CCW 1 kali
dapat berputar CW n kali
dapat berputar CCW n kali
dapat berputar CW menurut besar sudut yang diinginkan
dapat berputar CCW menurut besar sudut yang diinginkan
2. Buatlah program sehingga motor stepper dapat berputar dan berhenti secara
interaktif menurut perintah yang diinginkan.
17
BAB VI
APLIKASI 5: MODUL PENGENDALI TRAFFIC LIGHT
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface pengendali traffic light
mampu membuat program komputer untuk mengendalikan traffic light.
Teori Dasar
Komponen elektronik yang digunakan pada Modul 5 ini tepat sama dengan Modul 1
(Modul Pengendali 12-LED) dan dihubungkan tepat seperti pada Modul 1, tetapi LED-LED
disusun sedemikian rupa sehingga merupakan miniatur traffic light yang terdapat pada simpang
empat. Setiap simpang empat pada aplikasi ini dilengkapi dengan tiga buah LED yang masing-
masing berwarna merah, kuning, dan hijau.
Waktu menyala dan padam setiap LED diatur sehingga pada setiap satu siklus, hanya satu
jalur jalan raya yang dibolehkan melewatkan kendaraan. Pengaturan waktu ini dapat dirancang
dengan menggunakan tabel berikut ini.
Tabel 4 Urutan penyalaan LED untuk miniatur traffic light pada simpang empat
Selatan Timur Utara Barat
Urutan
M K H M K H M K H M K H
0 - - 5 5 - - 5 - - 5 - -
1 - 1 - 1 - - 1 - - 1 - -
2 5 - - - - 5 5 - - 5 - -
3 1 - - - 1 - 1 - - 1 - -
4 5 - - 5 - - - - 5 5 - -
5 1 - - 1 - - - 1 - 1 - -
6 5 - - 5 - - 5 - - - - 5
7 1 - - 1 - - 1 - - - 1 -
0 - - 5 5 - - 5 - - 5 - -
18
Keterangan:
M = LED merah 5 = waktu menyala LED (5 detik)
K = LED kuning 1 = waktu menyala LED (1 detik)
H = LED hijau - = padam
Rangkaian Interface
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 9.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
19
Tugas
1. Buatlah program untuk mengendalikan traffic light dengan urutan penyalaan LED
sesuai dengan Tabel 4.
2. Buatlah program untuk mengendalikan traffic light yang akan membuat LED
kuning pada semua sisi simpang empat berkedip terus-menerus selama jam di
komputer menunjukkan pukul 21:00 sampai 05:00.
20
BAB VII
APLIKASI 6: MODUL PENDETEKSIAN CAHAYA
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
mampu membuat rangkaian interface pendeteksi cahaya
mampu membuat program komputer untuk mendeteksi cahaya.
Teori Dasar
Rangkaian untuk Aplikasi 6 menggunakan LDR untuk mendeteksi cahaya. Keluaran dari
pendeteksi cahaya dihubungkan ke port status pada port paralel. Cahaya yang jatuh pada LDR
menyebabkan transistor on atau off sehingga keadaan kolektor dapat berlogika 0 atau 1. Kolektor
transistor ini dihubungkan ke port status pada bit ~S7. Keadaan ~S7 ini selanjutnya digunakan
sebagai pengendali empat buah LED.
Rangkaian Interface
21
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 10.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program untuk mendeteksi cahaya dengan ketentuan bahwa jika cahaya
terang, matikan seluruh LED; sebaliknya, jika cahaya gelap, buat semua LED
berkedip-kedip.
2. Buatlah program pendeteksi cahaya seperti di atas, tetapi dengan tambahan bahwa
jika cahaya gelap, di samping semua LED berkedip, juga buat speaker komputer
berbunyi seperti sirine.
22
DAFTAR PUSTAKA
1. Anderson, Peter H., Use of a PC Printer Port for Control and Data Acquisition,
Internet Resource.
2. Majerus, Philippe, LPT (Parallel) Port, Internet Resource.
3. Stewart, Zhahai, Interfacing the IBM PC Parallel Printer Port, Internet Resource.
4. Putra, Agfianto Eko, Teknik Antarmuka Komputer: Konsep dan Aplikasi, Graha
Ilmu, Yogyakarta, 2002.
5. Prasetia, Retna, dan Catur Edi Widodo, Teori dan Praktek Interfacing Port Paralel
dan Port Serial Komputer dengan Visual Basic 6.0, Penerbit Andi, Yogyakarta,
2004.
6. Kadir, Abdul, Pemrograman Lanjutan Turbo C, Penerbit Andi, Yogyakarta, 1993.
7. Link, Wolfgang, Pengukuran, Pengendalian, dan Pengaturan dengan PC: Praktek
Otomasi dengan Pengaturan Numerik, Elex Media Komputindo, Jakarta, 1995.
8. Ibrahim, K.F., Teknik Digital (Terjemahan), Penerbit Andi, Yogyakarta, 1998.
9. Tarigan, Pernantin, Pemrograman Assembly untuk IBM PC dan Kompatibelnya,
USU Press, Medan, 1994.
10. Hall, Douglas V., Microprocessors and Interfacing, McGraw-Hill, Singapore, 1986.
11. Simanjuntak, Henri S.V., Dasar-dasar Mikroprosesor, Kanisius, Yogyakarta, 2001.
12. Rizkiawan, Rizal, Tutorial Perancangan Hardware, Elex Media Komputindo,
Jakarta, 1997.
23
LAMPIRAN 1
LISTING PROGRAM APLIKASI
DENGAN TURBO C
/* ======================
Program: LED-01.C
LED berjalan melingkar
Cara ke-1
====================== */
#include <stdio.h>
#define DATA 0x378
#define CONTROL DATA+2
main()
{ unsigned char i;
int j[]={523,587,659,698,784,880,988,1047,1175,1319,1397,1568};
clrscr();
do{
for(i=0;i<8;i++){
outportb(DATA,0x01<<i);
sound(j[i]);
delay(10000);
}
outportb(DATA,0x00);
for(i=0;i<4;i++){
outportb(CONTROL,(0x01<<i)^0x0B);
sound(j[i+8]);
delay(10000);
}
outportb(CONTROL,0x00^0x0B);
}while(!kbhit());
getch();
outportb(DATA,0x00);
outportb(CONTROL,0x00^0x0B);
nosound();
}
/* ******************************
Program: LED-01A.C
LED berjalan melingkar
Cara ke-2
******************************
*/
#include <stdio.h>
#include <dos.h>
main()
{
unsigned char PD[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char PC[] = {0x0A,0x09,0x0F,0x03};
char i;
clrscr();
outportb(Data,0x00);
outportb(Control,0x0B);
do {
for(i=0;i<8;i++) {
outportb(Data,PD[i]);
delay(8000);
}
outportb(Data,0x00);
delay(8000);
for(i=0;i<4;i++) {
24
outportb(Control,PC[i]);
delay(8000);
}
outportb(Control,0x0B);
delay(8000);
} while(!kbhit());
}
/* ============================
Program: LED-02.C
LED berjalan secara memantul
Cara ke-1
============================ */
#include <stdio.h>
#include <conio.h>
#define DATA 0x378
#define CONTROL DATA+2
#define DELAY 3000
main()
{ unsigned char i;
clrscr();
textcolor(YELLOW);
cputs("LED berjalan secara memantul");
do{
for(i=0;i<8;i++){
outportb(DATA,0x01<<i);
delay(DELAY);
}
outportb(DATA,0x00);
for(i=0;i<4;i++){
outportb(CONTROL,(0x01<<i)^0x0B);
delay(DELAY);
}
outportb(CONTROL,0x00^0x0B);
sound(1047);delay(2000);nosound();
for(i=1;i<4;i++){
outportb(CONTROL,(0x08>>i)^0x0B);
delay(DELAY);
}
outportb(CONTROL,0x00^0x0B);
for(i=0;i<7;i++){
outportb(DATA,0x80>>i);
delay(DELAY);
}
outportb(DATA,0x00);
sound(523);delay(2000);nosound();
}while(!kbhit());
getch();
outportb(DATA,0x00);
outportb(CONTROL,0x00^0x0B);
}
/* *************************************
Program: LED-02A.C
LED berjalan secara memantul
Cara ke-2
*************************************
*/
#include <stdio.h>
#include <dos.h>
25
#define Data 0x378
#define Control Data+2
main()
{
unsigned char PD[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char PC[] = {0x0A,0x09,0x0F,0x03};
char i;
int Tunda=5000;
clrscr();
outportb(Data,0x00);
outportb(Control,0x0B);
do {
for(i=0;i<8;i++) {
outportb(Data,PD[i]);
/*sound(PD[i]*500);*/
delay(Tunda);
}
outportb(Data,0x00);
for(i=0;i<4;i++) {
outportb(Control,PC[i]);
delay(Tunda);
}
outportb(Control,0x0B);
for(i=3;i>=0;i--) {
outportb(Control,PC[i]);
delay(Tunda);
}
outportb(Control,0x0B);
for(i=6;i>=1;i--) {
outportb(Data,PD[i]);
/*sound(PD[i]*500);*/
delay(Tunda);
}
outportb(Data,0x00);
} while(!kbhit());
nosound();
}
#include <stdio.h>
#include <math.h>
main()
{
char Pil,i,Tombol;
clrscr();
do{
clrscr();
printf("######### MENU #########\n");
printf("1. Menghidupkan semua LED\n");
printf("2. Mematikan semua LED\n");
printf("3. Menghidupkan LED berdasarkan tombol fungsi\n");
printf("4. Keluar\n\n\n");
printf("Pilih menu (1-4): ");
Pil=getch();
switch(Pil){
case '1':
clrscr();
printf("Sedang menghidupkan semua LED...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0xFF);
outportb(0x37a,0x04);
getch();break;
case '2':
clrscr();
printf("Sedang mematikan semua LED...\n");
26
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0x00);
outportb(0x37a,~0x04);
getch();break;
case '3':
do{
clrscr();
printf("Tekan tombol F1-F12\n\n");
Tombol=getch();
i=Tombol-0x85;
if((i==0)||(i==1)){
outportb(0x37a,inportb(0x37a)^(i==0?0x04:0x08));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
getch();}
i=Tombol-0x3b;
if((i>=0)&&(i<=9)){
if(i<=7)
outportb(0x378,inportb(0x378)^(char)pow(2,i));
else
outportb(0x37a,inportb(0x37a)^(i==8?0x01:0x02));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
getch();}
}while(Tombol!=0x1b);break;
}
}while(Pil!='4');
}
/* ==========================================
Program: 7SEG-01.C
Menampilkan angka konstan 0123456789AbCdEF
========================================== */
#include <stdio.h>
#define Data 0x378
#define Control Data+2
main()
clrscr();
outportb(Data,0xff);
do{
outportb(Data,Angka[i]);
outportb(Control,(15-i)^0x0b);
delay(200);
outportb(Data,0xff);
i==15?i=0:i++;
}while(!kbhit());
outportb(Data,0xFF);
getch();
}
/* ===============================
Program: 7SEG-02.C
Menampilkan jam sistem komputer
=============================== */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2
main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[16],jam,menit,detik,s100;
struct time *waktu;
27
clrscr();
outportb(Data,0xff);
do{
gettime(waktu);
gotoxy(33,13);
printf("%02d:%02d:%02d:%02d POLI",waktu->ti_hour,
waktu->ti_min,waktu->ti_sec,waktu->ti_hund);
jam=waktu->ti_hour;
menit=waktu->ti_min;
detik=waktu->ti_sec;
s100=waktu->ti_hund;
a[0]=jam/10;
a[1]=jam%10;
a[2]=0xbf;
a[3]=menit/10;
a[4]=menit%10;
a[5]=0xbf;
a[6]=detik/10;
a[7]=detik%10;
a[8]=0xbf;
a[9]=s100/10;
a[10]=s100%10;
a[11]=0xff;
a[12]=0x8c;
a[13]=0xc0;
a[14]=0xc7;
a[15]=0xcf;
for(i=0;i<16;i++){
if((i==2)||(i==5)||(i==8)||(i>10))
outportb(Data,a[i]);
else
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(100);
outportb(Data,0xff);
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}
/* =================================
Program: 7SEG-03.C
Menampilkan teks berjalan
================================= */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2
main()
{ unsigned char Huruf[] =
{0x8c,0xa3,0xc7,0xcf,0x87,0x86,0x8a,0xc8,0xcf,0x8a,0xff};
unsigned char i,j;
clrscr();
outportb(Data,0xff);
do{
for(i=0;i<16;i++){
for(j=0;j<11;j++) {
outportb(Data,Huruf[j]);
outportb(Control,((i+10-j)%16)^0x0b);
delay(100);
outportb(Data,0xff);
}
delay(10000);
28
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2
main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[10],tgl,bln;
int thn;
struct time *tanggal;
clrscr();
outportb(Data,0xff);
getdate(tanggal);
gotoxy(35,13);
tgl=tanggal->da_day;
bln=tanggal->da_mon;
thn=tanggal->da_year;
printf("%02d-%02d-%04d",tgl,bln,thn);
a[0]=tgl/10;
a[1]=tgl%10;
a[2]=0xbf;
a[3]=bln/10;
a[4]=bln%10;
a[5]=0xbf;
a[6]=thn/1000;
a[7]=thn%1000/100;
a[8]=thn%1000%100/10;
a[9]=thn%1000%100%10;
do{
for(i=0;i<10;i++){
if((i==2)||(i==5))
outportb(Data,a[i]);
else
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(100);
outportb(Data,0xff);
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}
/* ==========================================
Program: 7SEG-05.C
Menampilkan counter 0000000 sampai 1000000
========================================== */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2
main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[7];
long int t=0;
clrscr();
29
outportb(Data,0xff);
do{
do{
gotoxy(40,13);
printf("%07d",t);
a[0]=(unsigned char)t/1000000;
a[1]=t%1000000/100000;
a[2]=t%1000000%100000/10000;
a[3]=t%1000000%100000%10000/1000;
a[4]=t%1000000%100000%10000%1000/100;
a[5]=t%1000000%100000%10000%1000%100/10;
a[6]=t%1000000%100000%10000%1000%100%10;
for(i=0;i<7;i++){
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(20000);
outportb(Data,0xff);
}
t==10000000?t=0:t++;
}while(!kbhit());
}while(!kbhit());
outportb(Data,0xFF);
getch();
}
/* ==================================
Program: PIJAR-01.C
Menghidupkan lampu pijar melingkar
================================== */
#include <stdio.h>
#define DATA 0x378
main()
{
char i;
clrscr();
do{for(i=0;i<4;i++){
outportb(DATA,0x01<<i);
delay(40000);
delay(40000);
delay(40000);
}
}while(!kbhit());
getch();
outportb(DATA,0x00);
}
/* ====================================
Program: PIJAR-02.C
Lampu pijar berjalan secara memantul
==================================== */
#include <stdio.h>
#include <conio.h>
#define DATA 0x378
main()
{ unsigned char i;
unsigned char PD[]={0x01,0x02,0x04,0x08,0x04,0x02};
clrscr();
textcolor(YELLOW);
cputs("Lampu pijar berjalan secara memantul");
do{
for(i=0;i<6;i++){
outportb(DATA,PD[i]);
delay(40000);
}
30
}while(!kbhit());
getch();
outportb(DATA,0x00);
}
/* ====================================
Program: PIJAR-03.C
Menghidupkan lampu pijar
dengan menu pilihan
==================================== */
#include <stdio.h>
#include <math.h>
main()
{
char Pil,i,Tombol;
clrscr();
do{
clrscr();
printf("######### MENU #########\n");
printf("1. Menghidupkan semua lampu pijar\n");
printf("2. Mematikan semua lampu pijar\n");
printf("3. Menghidupkan lampu pijar berdasarkan tombol fungsi\n");
printf("4. Keluar\n\n\n");
printf("Pilih menu (1-4): ");
Pil=getch();
switch(Pil){
case '1': clrscr();
printf("Sedang menghidupkan semua lampu pijar...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0xFF);
outportb(0x37a,0x04);
getch();break;
case '2': clrscr();
printf("Sedang mematikan semua lampu pijar...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0x00);
outportb(0x37a,~0x04);
getch();break;
case '3': do{
clrscr();
printf("Tekan tombol F1-F12\n\n");
Tombol=getch();
i=Tombol-0x3b;
if((i>=0)&&(i<=3))
outportb(0x378,inportb(0x378)^(char)pow(2,i));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
}while(Tombol!=0x1b);break;
}
}while(Pil!='4');
}
/* ==========================
Program: STEPPER.C
Pengendalian motor stepper
========================== */
#include <stdio.h>
31
Putar[3-j]=Data[j];
for(i=0;i<(int)(50*sudut/360);i++)
for(j=0;j<4;j++){
outportb(0x378,Putar[j]);
delay(200);
}
}
for(i=0;i<(int)(50*x);i++)
for(j=0;j<4;j++){
outportb(0x378,Putar[j]);
sound((int)x*1000);delay(200);nosound();
}
}
main()
{ char Pil;
float x;
int sudut;
do{
clrscr();
printf("*** Pengendalian motor stepper ***\n\n");
printf("Pilihan:\n");
printf("1. Putar CW 1 kali\n");
printf("2. Putar CCW 1 kali\n");
printf("3. Putar CW n kali\n");
printf("4. Putar CCW n kali\n");
printf("5. Putar CW menurut sudut\n");
printf("6. Putar CCW menurut sudut\n");
printf("7. Selesai\n");
printf("Pilihan Anda: ");
Pil=getch();
switch(Pil){
case '1': Putar_biasa(0,1);break;
case '2': Putar_biasa(1,1);break;
case '3': clrscr();
printf("Berapa putaran: :");
scanf("%f",&x);
Putar_biasa(0,x);break;
case '4': clrscr();
printf("Berapa putaran: ");
scanf("%f",&x);
Putar_biasa(1,x);break;
case '5': clrscr();
printf("Sudut putar: ");
scanf("%d",&sudut);
Putar_sudut(0,sudut);break;
case '6': clrscr();
printf("Sudut putar: ");
scanf("%d",&sudut);
Putar_sudut(1,sudut);break;
default:;
}
}while(Pil!='7');
32
/* **********************************************
Program TRFLGHT.C
Pengendalian Traffic Light pada Simpang Empat
**********************************************
*/
#include <stdio.h>
#include <dos.h>
main()
{
unsigned char PD[] = {0x4C,0x4A,0x61,0x51,0x09,0x89,0x49,0x49};
unsigned char PC[] = {0x09,0x09,0x09,0x09,0x08,0x09,0x03,0x0F};
char i=0;
clrscr();
outportb(Data,0x00); /* matikan semua LED0 - LED7 */
outportb(Control,0x0B); /* matikan semua LED8 - LED11 */
do {
outportb(Data,PD[i]); /* hidupkan LED menurut pola urutan */
outportb(Control,PC[i]); /* hidupkan LED menurut pola urutan */
i%2==0 ? delay(5000) : delay(1000); /* atur lama nyala LED */
i==7 ? i=0 : i++; /* ulang untuk pola berikutnya */
} while(!kbhit()); /* ulang terus selama tidak ada
penekanan tombol */
outportb(Data,0x00); /* matikan semua LED */
}
/* **************************************
Program LDR.C
Detektor cahaya dengan LDR
**************************************
*/
#include <stdio.h>
#include <dos.h>
void Berkedip()
{
unsigned char i;
main()
{
char i=0;
clrscr();
outportb(Control,0x00); /* memberikan Vcc pada transistor */
outportb(Data,0x00); /* matikan semua LED */
do {
i=inportb(Status); /* baca port status */
if((i^0x80)&0x80!=0) /* jika PS7=1, maka */
outportb(Data,0x0F); /* hidupkan semua LED */
else /* kalau tidak, */
Berkedip(); /* buat LED berkedip */
33
delay(1000); /* tunda */
} while(!kbhit()); /* ulang terus selama tidak ada
penekanan tombol */
outportb(Data,0x00); /* matikan semua LED */
}
34
LAMPIRAN 2
LISTING PROGRAM APLIKASI
DENGAN VISUAL BASIC
‘ =================
‘ Program: Demo LED
‘ =================
Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
35
PortOut &H378, 0
For i = 0 To 3
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB
Loop
PortOut &H378, 0
PortOut &H37A, &HB
End Sub
For i = 0 To 3
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB
For i = 3 To 0 Step -1
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB
For i = 7 To 0 Step -1
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
PortOut &H378, 0
Loop
PortOut &H378, 0
PortOut &H37A, &HB
End Sub
‘ ===========================
‘ Program: Demo Seven-Segment
‘ ===========================
Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
36
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Do
DoEvents
PortOut Data, Angka(i)
PortOut Control, (16 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
If i = 16 Then i = 1 Else i = i + 1
Loop
PortOut Data, &HFF
End Sub
37
PortOut Data, Angka(A(i) + 1)
End If
PortOut Control, (16 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
Loop
End Sub
38
Else
PortOut Data, Angka(A(i))
End If
PortOut Control, (15 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
Loop
End Sub
For i = 0 To 6
PortOut Data, Angka(A(i))
PortOut Control, (15 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
If X = 10000000 Then X = 0 Else X = X + 50000
Loop
End Sub
‘ ===========================
‘ Program: Demo Lampu Pijar
‘ ===========================
Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
39
For i = 0 To 3
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
Loop
PortOut &H378, 0
End Sub
‘ ===========================
‘ Program: Demo Motor Stepper
‘ ===========================
Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
40
41