PostHeaderIcon Διασύνδεση της τυποποιημένης παράλληλης θύρας - Χρησιμοποίηση της παράλληλης θύρας για την εισαγωγή· 8· μπιτ

Article Index
Διασύνδεση της τυποποιημένης παράλληλης θύρας
Ιδιότητες υλικού
Centronics
Διευθύνσεις θυρών
καταχωρητες λογισμικού· -· τυποποιημένης παράλληλης θύρας (SSP)
Αμφίδρομες θύρες
Χρησιμοποίηση της παράλληλης θύρας για την εισαγωγή· 8· μπιτ
Nibble Mode
Χρησιμοποιώντας την διακοπή της παράλληλης θύρας (IRQ)
Επιλογή λειτουργίας(mode) από το BIOS
Χαρακτηριστικά επιλογής λειτουργίας
All Pages

Χρησιμοποίηση της παράλληλης θύρας για την εισαγωγή  8  μπιτ


Εάν η παράλληλη θύρα σας δεν υποστηρίζει τον αμφίδρομο τρόπο, μην απογοητεύεστε. Μπορείτε να εισαγάγετε ένα μέγιστο 9  μπιτ σε οποιοδήποτε δεδομένο χρόνο. Για να το κάνετε αυτό μπορείτε να χρησιμοποιήσετε τις 5  γραμμές εισαγωγής του Status Port και τις 4  γραμμές εισόδου (ανοικτού συλλέκτη) του Control Port.

74LS05 Hex Inverter

Οι είσοδοι στην παράλληλη θύρα έχουν επιλεχτεί υπό αυτήν τη μορφή, για να καταστήσουν τη ζωή ευκολότερη για μας. Το Pin Busy συμβαίνει να είναι το MSB (pin 7)  του Status Port, κατόπιν σε φθίνουσα σειρά  έρχεται το ack, Paper Out και Select, αποτελώντας το σημαντικότερο nibble του Control Port. Οι γραμμές πάνω από τα ονόματα χρησιμοποιούνται για να αντιπροσωπεύσουν ποιες είσοδοι αναστρέφονται από το υλικό, δηλ.τα + 5v θα διαβαστούν σαν 0 από τον καταχωρητη, ενώ gnd θα διαβάσει σαν 1. Το Status Port έχει μόνο μια ανάστροφη είσοδο.

Το Control Port χρησιμοποιείτε για να διαβαστεί το low nibble. Όπως περιγράφεται πριν, το Control Port έχει εξόδους ανοιχτού συλλέκτη, δηλ. δύο καταστάσεις, υψηλής αντίστασης και gnd. Εάν συνδέσουμε στις εισόδους μας άμεσα με τη θύρα  (παραδείγματος χάριν ένα ADC0804) ,  ένα conflict θα συμβεί εάν η είσοδος είναι υψηλή και η θύρα προσπαθεί να την τραβήξει κάτω. Επομένως χρησιμοποιούμε τους αναστροφείς ανοικτού συλλέκτη.

Εντούτοις αυτό δεν είναι πάντα απαραίτητο. Εάν συνδέαμε απευθείας μονοπολους διακόπτες στη θύρα με pull-up αντιστάσεις, δεν υπάρχει καμία ανάγκη να ασχοληθείτε με αυτήν την προστασία. Επίσης εάν το λογισμικό σας αρχικοποιήσει το Control Port με xxxx0100 έτσι ώστε όλες οι καρφίτσες στο Control Port να είναι υψηλές, τότε μπορεί πάλι να είναι περιττό. Εάν εντούτοις υπάρχει συσκευή συνδεμένη στη θύρα πριν από την αρχικοποίηση από το software της θύρας τότε πιθανών να υπάρχει πρόβλημα.

Ένα άλλο πρόβλημα που πρέπει να γνωρίζετε είναι οι pull-up αντιστάτες στο Control Port. Ο μέσος pull-up αντιστάτης είναι 4.7k. Προκειμένου να τραβήξετε τη γραμμή χαμηλά, η συσκευή σας θα πρέπει να βυθίσει 1mA, το οποίο μερικές χαμηλές τροφοδοτημένες συσκευές μπορούν να δυσκολευτούν να κάνουν. Τώρα τι συμβαίνει εάν υποδείξω ότι μερικές θύρες έχουν 1K Pull-up αντιστάτες; Ναι, υπάρχουν τέτοιες κάρτες. Η συσκευή σας πρέπει τώρα να βυθίσει 5mA. Περισσότεροι λόγοι να χρησιμοποιηθούν οι αναστροφείς ανοικτού συλλέκτη.

Οι αναστροφείς ανοικτού συλλέκτη επιλέχτηκαν πέρα από τους buffer και με το δεδομένο ότι είναι δημοφιλέστεροι, και έτσι ευκολότεροι να βρεθούν. Δεν υπάρχει κανένας λόγος, για να μην τους χρησιμοποιήσετε. Μια άλλη δυνατότητα είναι να χρησιμοποιηθούν τρανζίστορ.
Η εισαγωγή, D3 συνδέεται μέσω του αναστροφέα με το Select Printer. Το pin Select Printer συμβαίνει ακριβώς να είναι pin 3  του Control Port.  D2, D1 & D0 συνδέονται με Init, Auto LineFeed και strobe, για να αποτελέσει αντίστοιχα το χαμηλό nibble. Τώρα  που έγινε αυτό, το μόνο που πρέπει να κάνουμε είναι να «φτιάξουμε» το byte  χρησιμοποιώντας το λογισμικό. Το πρώτο πράγμα που πρέπει να κάνουμε είναι να γράψουμε xxxx0100 στο Control Port. Αυτό τοποθετεί όλες τις γραμμές θυρών ελέγχου υψηλα και, έτσι μπορούν να τραβηχτούν κάτω από τα δεδομένα εισόδου.

outportb(CONTROL,   inportb(CONTROL)   & 0xF0   |    0x04);

Τώρα που έγινε αυτό, μπορούμε να διαβάσουμε το σημαντικότερο nibble. Αυτό συμβαίνει ακριβώς να είναι το σημαντικότερο nibble του Status Port. Δεδομένου ότι ενδιαφερόμαστε μόνο για το MSnibble θα χρησιμοποιήσουμε μια μάσκα AND με 0xF0 στα αποτελέσματα, έτσι ώστε το LSnibble να είναι 0. Το Busy θα αναστραφεί από το υλικό, αλλά δεν θα ανησυχήσουμε για αυτό τώρα. Μόλις κατασκευαστούν οι δύο ψηφιολέξεις(byte), μπορούμε να κερδίσουμε διπλά από την αναστροφή Busy και Init συγχρόνως.

a  =   (inportb(STATUS)    & 0xF0);    /* Read MSnibble  */

Μπορούμε τώρα να διαβάσουμε και το LSnibble. Αυτό συμβαίνει να είναι ακριβώς το LSnibble του Control Port - πόσο βολικά! Αυτή τη φορά δεν ενδιαφερόμαστε για το MSnibble της θύρας, κατά συνέπεια κάνουμε AND το αποτέλεσμα με 0x0F για να καθαρίσουμε το MSnibble. Μόλις γίνει αυτό, είναι ώρα να συνδυαστούν οι δύο ψηφιολέξεις από κοινού. Αυτό γίνεται κάνοντας OR τις δύο ψηφιολέξεις. Αυτό μας αφήνει τώρα με μια ψηφιολέξη, εντούτοις δεν είμαστε έτοιμοι ακόμα. Τα bit  2 και 7 είναι ανεστραμμένα. Αυτό ξεπερνιέται κάνοντας XOR την ψηφιολέξη με 0x84,  το οποίο αναστρέφει τα δύο μπιτ.

a  = a   |(inportb(CONTROL)    & 0x0F);    /* Read LSnibble  */
a  = a ^0x84;   /* Toggle Bit  2  & 7 */

Σημείωση: Μερικές θύρες ελέγχου δεν είναι ανοικτού συλλέκτη, αλλά έχουν απλές εξόδους. Αυτό είναι επίσης η περίπτωση με τις θύρες EPP και ECP. Κανονικά όταν τοποθετείτε μια παράλληλη θύρας στον τρόπο ECP ή του EPP, το Control Port γίνεται απλή(totem pole output) έξοδος μόνο. Τώρα τι συμβαίνει εάν συνδέετε τη συσκευή σας με την παράλληλη θύρα σε αυτόν τον τρόπο; Επομένως, για χάρη της φορητότητας συστήνω το επόμενο κύκλωμα, η ανάγνωση nibble σε έναν χρόνο.



 

You must login first to make comments.