VÆR FORSIKTIG! KRETSKORT OG UTSTYR KAN BLI SKADET!
Parallel port programmering er stas.
Parallel port programmering er gøy.
Med parallelporten kan man gjøre mye rart. Man setter de forskjellinge pinnene til enten high eller low. Men før man begynner, trenger man en kort innføring i paralellporten.
Addressen er 3bc, 378 eller 278. Det avgjør BIOS i PC'n. Jeg har satt min addresse til 3bc.
Porten har 25 pinner:
- nStropbe -inn/ut
- Data 0 - ut
- Data 1 - ut
- Data 2 - ut
- Data 3 - ut
- Data 4 - ut
- Data 5 - ut
- Data 6 - ut
- Data 7 - ut
- nAck - inn
- Busy - inn
- Paper out/Paper End - inn
- Select - inn
- nAuto/Linefeed - inn/ut
- nError/nFault - in
- nInitialize - inn/ut
- nSelect-Printer/NSelect-In - inn/ut
- Ground
- Ground
- Ground
- Ground
- Ground
- Ground
- Ground
- Ground
Som du ser, så er pin 2-9 data pin ut, 18-25 er ground. Det er disse vi skal konsentrere oss om.
For å sjekke at vi sender de rette signalene til de rette pinnene har jeg laget et lite hjelpeverktøy, med noen LED. Disse lyser eller blinker alt ettersom hvilke signaler vi sender.

Den andre enden av ledningene stikker vi inn i parallelporten. LED 1 til pin 2, LED 2 til pin 3 osv. Den siste stikker vi inn i pin nr 18, som er ground. Vær forsiktig med hva du gjør, så ikke du ødlegger noe.
Det lille c programmet som liver opp lysene er dette:
/* Program for å lyse opp LEDs i en liten krets Jens Christoffersen 2009 */
// includes #include #include #include #include #include
// definitions #define base 0x3bc // parallel port address #define sleeping 1000000 // time for led to light
main(int argc, char **argv) { if (ioperm(base,1,1)) // open the parallel port fprintf(stderr, "Couldn't get the port at %x\n", base), exit(1); // error mesg if not open
outb(0, base); // set all pins to 0 = low
outb(1, base); // outb = write, 1 = send 1/high to pin 2, base = par port add 3bc printf ("Pin 2 set to high.\n"); // mesg to screen usleep(sleeping); // wait for 1 sec outb(2, base); printf ("Pin 3 set to high.\n"); usleep(sleeping);
outb(4, base); printf ("Pin 4 set to high.\n"); usleep(sleeping);
outb(8, base); printf ("Pin 5 set to high.\n"); usleep(sleeping);
outb(16, base); printf ("Pin 6 set to high.\n"); usleep(sleeping);
outb(32, base); printf ("Pin 7 set to high.\n"); usleep(sleeping);
outb(64, base); printf ("Pin 8 set to high.\n"); usleep(sleeping);
outb(0, base); // set all pins to 0 = low return 0; }
Siden jeg bare hadde en kat 5 kabel tilgjenelig, har jeg utelatt den siste pinnen. Koden for den ville være:
outb(128, base);
printf(Pin 9 set to high.\n");
usleep(sleeping);
Dette programmet har jeg kompilert med kommandoen:
gcc -O light-led.c -o light-led
(Jeg har en Ubuntu 9.04 installasjon med build-essentials pakken installert)
Her ligger det en liten video av vidunderet.
Link til video
Lykke til
|