Apraksts:
Datoraparatūras terminos, ports kalpo kā saskarne starp datoru un citiem datoriem vai aparatūru elektriski savienotas ar vadu kontaktligzdas veidā uz aprīkojuma vai iekārtas, kurai tiek pieslēgts kabelis vai spraudkontakts. Šiem datoraparatūras portiem ir dažādas fiziskas formas (female, male, apaļi, taisnstūrveida utt.). Portu fiziskajās īpašības un funkcijas ir daļēji standartizētas, piemēram, vairākumam datoru ir tastatūras ports, kuram pievieno tastatūru.Darbs:
Rēzeknes AugstskolaInženieru fakultāte
Datorzinātņu un matemātikas katedra
DATORU ARHITEKTŪRA
Referāts
Datora portu programmēšana
Autors
Dienas nodaļas
Inženiera programmētāja specialitātes
3.kursa studente
Sandra Lobazova
St. apliecības Nr.:04I1020
Docētājs
Docents ______________ Pēteris Grabusts
Rēzekne 2006
Satura rādītājs
Ievads 3
1. Paralēlo datoraparatūras portu programmēšana 5
1.1.Uzbūve, adresācija un paralēlo portu veidi 5
1.2.Paralēlo portu programmēšanas iespējas un kodu paraugi 6
1.3.Iespējamās problēmas, programmējot paralēlos portus 8
2.Seriālo datoraparatūras portu programmēšana 10
2.1.Seriālo portu pamata jēdzieni, uzbūve un darbības principi 10
2.2.Datu formāti 11
2.3.Datora seriālo portu programmēšana 11
Izmantotā literatūra 15
Ievads
Datoraparatūras terminos, ports kalpo kā saskarne starp datoru un citiem datoriem vai aparatūru elektriski savienotas ar vadu kontaktligzdas veidā uz aprīkojuma vai iekārtas, kurai tiek pieslēgts kabelis vai spraudkontakts. Šiem datoraparatūras portiem ir dažādas fiziskas formas (female, male, apaļi, taisnstūrveida utt.). Portu fiziskajās īpašības un funkcijas ir daļēji standartizētas, piemēram, vairākumam datoru ir tastatūras ports, kuram pievieno tastatūru. Datoraparatūras portus gandrīz vienmēr var iedalīt divās lielās grupās:
• seriālie porti sūta un saņem vienu bitu vienā laika posmā pa vienstieples vadu pāri;
• paralēlie porti nosūta vairākus informācijas bitus, izmantojot vairākus vadu kopu.
Sistēmas maģistrāle, kas satur mātesplates paplašināšanas slēdžus ir paralēlā porta forma. Datoraparatūras portu apvienošana ir tehnoloģija, kas ļauj vairākus datoraparatūras portus apkopot vienā grupā, efektīvi radot vienu pieslēgumu ar lielāku joslas platumu. Šī tehnoloģija dod arī augstāku bojājumpiecietības pakāpi.
Programmnodrošinājuma ports ir virtuāls datu savienojums, ko var izmantot programmas, lai tiešā veidā apmainītos ar datiem, nevis izejot caur failu vai kādu citu laicīgu datu glabātuvi. Visizplatītākie no šādiem portiem ir TCP un UDP porti, kuri tiek izmantoti, pārsūtot datus starp datoriem Internetā.
Ievada/izvada operācijām gandrīz visas procesoru ģimenes lieto līdzīgas asamblera instrukcijas piekļūšanai gan atmiņai, gan datoraparatūras ievadam/izvadam. Tomēr Intel mikroprocesoriem ir asamblera instrukcijas (IN un OUT), kas tiek lietotas sevišķi datoraparatūras ievadam/izvadam. Šīs instrukcijas aprēķina, ar kuru datoraparatūras ierīci sazināties, izmantojot izvada/ievada porta jeb mašīnporta koncepciju. Šie porti ir numurēti, balstoties uz tā, uz kuru datoraparatūras ierīci tie atsaucas. Intel mikroprocesori galvenokārt atļauj sūtīt vai saņemt vienu oktetu (8-bitu baitu vai vārdu) katras instrukcijas laikā. Datoraparatūras ierīce nolemj kā interpretēt datus, kas tai nosūtīti un kādus datus nosūtīt procesoram. Piemēram, parasti tiek sūtīts vaicājums datoraparatūras ierīcei par to, kāds baits (datu pārsūtīšanā) tiks sūtīts nākamais.
1.tabula – Populārāko datora interfeisu salīdzinājums
(vietās, kur standarts nenosaka maksimumu, rakstīts parasti pielietojamais maksimums)
Interfeiss Formāts Ierīču skaits (maksimums) Maksimālais garums (pēdas) Ātrums (maksimālais, biti/sek)
RS-232 (EIA/TIA-232) asinhronais seriālais 2 50-100 20k (ar dažiem draiveriem 115k)
RS-485 (TIA/EIA-485) asinhronais seriālais 32 (unit loads) 4000 1M
IrDA asinhronais seriālais infrasarkanais 2 6 115k
Microwire sinhronais seriālais 8 10 2M
SPI sinhronais seriālais 8 10 2.1M
I2C sinhronais seriālais 40 18 400k
USB asinhronais seriālais 127 16 12M
Firewire seriālais 64 15 400M
IEEE-488 (GPIB) paralēlais 15 60 1M
Ethernet seriālais 1024 1600 10M
MIDI seriālais (current loop) 2 15 31.5k
Paralēlais printera ports paralēlais 2, vai 8 ar daisy-chain atbalstu 10-30 1M
1. Paralēlo datoraparatūras portu programmēšana
1.1.Uzbūve, adresācija un paralēlo portu veidi
Oriģinālajam datora paralēlajam portam bija astoņi izvadi, pieci ievadi un četras divvirziena līnijas. Tas ir pietiekoši, lai komunicētos ar daudzām perifērijas ierīcēm. Daudzos jaunākos datoros astoņi izvadi var kalpot arī ievadīšanai, lai ātrāk sazinātos ar skeneriem, pievadiem un citām ierīcēm, kas nosūta savus datus uz datoru.
Standarta paralēlais ports izmanto trīs 8-bitu portu reģistrus datorā. Dators piekļūst paralēlā porta signāliem, nolasot un rakstot uz šiem reģistriem, ko parasti sauc par Datu, Statusa un Kontroles reģistriem. Katram no signāliem ir vārds, kas apzīmē tā funkciju printera interfeisā. Saskarnē ar citiem ierīču tipiem, signālus nevajag izmantot to oriģinālajiem mērķiem. Piemēram, ja nesazinās ar printeri, paper-end signāls nav vajadzīgs, un ievadi var izmantot citiem nolūkiem.
Paralēlais ports tika izstrādāts kā printera ports, un daudzi porta signālu oriģinālie nosaukumi atspoguļo šādu pielietojumu (PaperEnd, AutoLineFeed). Tomēr mūsdienās blakus printerim var atrast daudzas ierīces pieslēgtas pie šī porta. Mūsdienās izstrādātas daudzas paralēlā porta modifikācijas lielākas efektivitātes (galvenokārt ātruma) palielināšanai. Šādi modificētie porti ir, piemēram, EEP (Enchanced Parallel Port), ECP (Extended Capabilities Port), Multi-Mode porti utt.
Standarta paralēlais ports izmanto trīs saistītas adreses, parasti vienā no šiem apgabaliem:
3BCh, 3BDh, 3BEh
378h, 379h, 37Ah
278h, 279h, 27Ah
Pirmā adrese apgabalā ir porta bāzes adrese, ko sauc arī par Datu reģistru vai vienkārši porta adresi. Otrā adrese ir porta Statusa reģistrs, un trešā ir Kontroles reģistrs.
Daudzos datoros tiek izmantoti tādi paralēlie porti kā SCSI un IEEE-488. SCSI (small computer sustem interface) ir paralēlais interfeiss, kas atļauj pieslēgt līdz septiņām ierīcēm uz viena kabeļa, turklāt katrai ierīcei ir unikāla adrese. Daudzi datori izmanto SCSI saskarnei ar ārējiem vai iekšējiem cietajiem diskiem, diskus lasošām iekārtām u.c. SCSI interfeisi ir ātri, un kabelis var būt līdz par 6 metrus garš. Tomēr standarta paralēlā porta saskarne ir vienkāršāka, lētāka un izplatītāka. IEEE-488 ir paralēlais interfeiss, ko izstrādāja Hewlett Packard, un kas spēj apvienot uz viena kabeļa līdz 15 ierīcēm, kas sazinās ar ātrumu līdz 1 Mb sekundē.
1.2.Paralēlo portu programmēšanas iespējas un kodu paraugi
Windows, DOS un Visual Basic piedāvā vairākas iespējas, kā nolasīt un ierakstīt informāciju paralēlajos portos. Vistiešākais veids ir nolasīt un ierakstīt porta reģistros. Vairākums programmēšanas valodu atbalsta šo iespēju, vai vismaz atļauj to pievienot. Visual Basic iekļauj arī citas opcijas, tādas kā Printer objekta iekļaušanu, PrintForm metodi un Open LPTx. Windows ir arī API izsaukumi piekļūšanai LPT portiem, un 16-bitu programmas, kas izmanto BIOS un DOS programmnodrošinājuma pārtraukumus piekļūšanai LPT.
Ir daudz veidu, kā piekļūt paralēlajam portam no pielietojumprogrammām, bet parasti notiek rakstīšana vai lasīšana no porta reģistriem. Reģistri ir speciālā apgabalā, kas domāta piekļūšanai ievada/izvada ierīcēm, ieskaitot printerus un tastatūru, disku iekārtas, displeju un citām komponentēm. Lai atšķirtu ievada/izvada ierīces un sistēmas atmiņu, mikroprocesors izmanto atšķirīgas instrukcijas un kontroles signālus katram. Ierakstīt informāciju vai nolasīt to no portiem var, izmantojot asamblera valodu vai augsta līmeņa valodas, tādas kā Basic, Pascal un C.
Tiešā rakstīšana un lasīšana no porta reģistriem dod gandrīz pilnīgu kontroli pār paralēlo portu signāliem. Atšķirībā no citām metodēm, tiešā rakstīšana/nolasīšana nepieliek kontroles vai t.s. handshaking signālus; tā vienkārši nolasa vai nosūta baitu uz norādīto portu (tomēr EEP un ECP arī vienkāršajā portu rakstīšanā/lasīšanā pievienos automātisku handshake).
Lai tieši rakstītu portā, jānorāda porta reģistrs un dati, kas jāraksta, un jāinstruē CPU ierakstīt datus pieprasītajā portā. Lai nolasītu no porta, norāda porta reģistru un vietu, kur uzglabāt nolasītos datus, un noinstruē CPU nolasīt datus norādītajā vietā.
Piemēram, programma, kas vienkārši ieraksta noteiktu vērtību paralēlajā portā, rakstīta asamblera valodā, izskatās šādi (paskaidrojumi komentāros, x86):
title Parallel Port Writer
; Šī programma ieraksta vienu vērtību paralēlajā portā.
; Pielietota out instrukcija (out accumulator, port).
; Ports var būt konstante diapazonā 0-FF hex,
; vai vērtība DX no 0 un FFFF hex.
dosseg
.model small
.stack 100h
.code
main proc
mov al,48 ; 8-bitu izvada vērtība, uzglabāt al
mov dx,378h ; paralēlais ports ir 378 hex
out dx,al ; ieraksta vērtību
mov ax,4C00h ; atgriežas DOS
int 21h
main endp
end main
Lai nolasītu vērību no porta, izmantojot asamblera valodu, izmanto instrukciju in, piemēram, lai nolasītu 379h Status porta vērtību:
mov dx,379h ; uzglabāt porta adresi dx
in al,dx ; nolasīt datus no porta adreses al
Visual C++ ierakstīšana paralēlajā portā var tikt izpildīta, izmantojot bibliotēku conio.h, kas satur funkciju _outp. Šī funkcija var ierakstīt datus norādītajā portā. Zemāk redzamais piemērs paņem lietotāja ievadītu vērtību un ieraksta to paralēlajā portā:
#include <conio.h>
#include <stdio.h>
int _outp( unsigned short port, int databyte );
// Šī programma saņem ievada vērtību no lietotāja
// decimālajā formā un izvada šo vērtību kā 8-bitu
// bināro skaitļ portam pēc adreses 378 hex, parasti LPT1
int main () {
int inval = 0;
while ( inval < 256) {
printf("Enter a value in decimal (256 to quit)>");
scanf("%d", &inval);
_outp(0x378, inval);
}
_outp(0x378, 0);
return 0;
}
Pascal programmētāji var izmantot funkciju port, lai piekļūtu paralēlajiem portiem, piemēram, lai ierakstītu AAh Datu portā 378h:
port[378h]:=AAh
Lai nolasītu Status portu 379h:
value:=port[379h]
1.3.Iespējamās problēmas, programmējot paralēlos portus
Programmējot paralēlos portus ar tiešās piekļuves palīdzību no Windows NT/2000/XP vides, nākas saskarties ar problēmu: augstāk minētie programmkodi neizpildās. Iemesls tam ir tāds, ka Windows NT kodols neatļauj lietotāju rakstītu programmu tiešu piekļuvi ievada/izvada portiem. Risinājums šeit ir uzrakstīt draiveri vai izmantot kāda cita izstrādātāja izveidotus rīkus tiešai portu piekļuvei. Piemēram, šim nolūkam izmantojama programma ar



Komentāri