Лабораториялық жұмыс №11.

Тақырып: Принтер жұмысын басқару.

Жұмыс мақсаты: студенттерді бағдарламалық бейнемен принтермен басқаруды үйрету .

Теориялық мәліметтер:

MS DOS үш паралельді құрылғылармен (LPT1 - LPT3) жұмыс істей алады. Әрбір паралельді құрылғының өз адаптері болады. Адаптер үш енгізу/шығару регистрмен басқарылады және регистрдің порттар адрестері әрбір адаптер үшін әртүрлі. BIOS берілгендер облысы әрбір адаптерге үшін базалық адрестерден тұрады. Базалық адрес үш порттар адрестер тобының кіші адресіне сәйкес келеді. Базалық адрес үшін LPT1 - 0040:0008, үшін LPT2 - 0040:000A және т.б. Қандай адаптер қай LPT нөмірге белгіленген - анықталмаған, бұл төмендегі кестеден көрсетілген. Осы себеппен бағдарлама, паралельді портқа тура адрестеледі, ол қолданылатын адрестерді табуға тиісті. Базалық адресті инициализация кезінде 0 мағынасы меншіктеледі, қашан сәйкес адаптер орнатылмаған кезде. Жүйелі/паралельді АТ картасы (LPT1 сияқты орнатылған). Жүйелі/паралельді 278H 279H 27AH АТ картасы (LPT2 сияқты орнталыған).

Шығатын берілгендер регистрі - бұл порт адесі, ол принтерге жіберілетін арқылы әрбір берілгендер байты жүреді. Статус регистрі принтер туралы әртүрлі ақпаратты хабарлайды; процессор сол кезеңде оны оқып тану үшін жиі-жиі сұрай алады, қашан бәрі де жақсы болғанда және берілгендерді жіберуге болады. Сонымен қатар, статус регистрі принтерде қандай қате болғанын хабарлайды. Басқару регитрі адаптерді инициализациялайды және берілгендерді шығарумен басқарады. Ол сонымен қатар, үзу операцияларына арналған паралельді портты дайындай алады, принтер процессорға үзуді жіберді үшін, қашан ол кезекті символды қабылдауына дайын болғанша, басқа істерге процессор бос қалдыруға арналған. Міне статус регистрінің биттер мағынасы және басқаруы: Басқару регистрі

0 бит 0 = нормалы орнату, 1 = берілгендер байтын шығаруды шақырады

1 0 = нормалы орнату, 1 = жолды каретка қайтаруынан кейін автоматты аудару

2 0 = принтера портын инициализациялау, 1 = нормалы орнату

3 0 = принтерді таңдауды болдырмау, 1 = нормалды орнату

4 0 = принтер үзуі тиым салынған, 1 = рұқсат етілген

5-7 Регистр статусы қолданылмайды бит 0-2 қолданылмайды

30 = принтер қателігі, 1 = қателік жоқ

40 = принтер off-line, 1 = принтер on-line

50 = қағаз қойылған, 1 = қағаз жоқ

60 = принтер символ қабылдауын растайды, 1 = нормалы орнату

70 = принтер бос емес, 1 = принтер бос

Кез келген бағдарлама принтермен жұмыс кезінде пайда болатын қателерді қалпына келу процедурасы болады. Жақсы жазылған бағдарлама біріншіден принтер (on line) машинамен байланысты екенін тексереді. Егер бірде-бір принтер қосылмаса, онда бағдарлама пайдаланушыға олардың қайсысымен жұмыс істейтінін таңдауға рұқсат етеді. Сонымен бірге, бұл процедура принтер қателерінде жағдайды қалпына келтіру тиісті, бұл құжат барлығын қайтадан баспау үшін қажет. Принтер порт инициализациясы/принтер қайталу инициализациясы.

Бағдарламалар принтерді бірінші қолдану алдында, әрбір принтер (LPT1 - LPT3) порты инициализациялау тиісті. Сонымен қатар, принтер порттары принтер қателері себептердің жоюдан кейін қайта инициализациялау тиіс. Принтер портын инициализациямен принтердің өзінің инициализациялауын шатастырмаңыз. Принтер инициализациясы бұл принтердің ішіндегі ісі. Ол қосқан кезде автоматты түрде болады және принтер көп жағдайда оны сөндірмей және қайта қоспай, қайта инициализациялау мүмкін емес. Бірақ бағдарлама принтерді қайта инициализациялай алады, егер баспа үшін қолданатын бастапқы параметрлер, принтерді бұрынғы қалпына келтірген болса, барлық арнайы қаріптерді болдырмай, тастауы, табуляция және т.б. Қашан бағдарлама олармен жұмысты аяқтаған кезде принтердің мұндай лақтыруы жақсы тон ереже болып есептеледі.

Көптеген принтерлерде символдар басылмайды, жол аяқтайтын каретканың қайтару коды алынғанға шейін (немесе толығымен жол берілгендері енгізілгенше дейін). Символдар принтер буферінде күте алады, тіпті олардың туғызушы бағдарламасы аяқталған соң. Қашан осы принтерге жаңа берілгендер жіберілгенде, онда бұл символдар басып шығарылады. Бұл проблемалардан құтылу үшін, баспа алдында буферді тазалауға ұмытпаңыздар; ал жақсы тон ережесіне ретінде, сонымен қатар бағдарлама аяқтау кезінде де буферді тазалаңыздар. Бұл принтерге ASCII 24 коды жіберіледі (баспа параметрлері өзгермейді).

Функция 1 үзіліс 17Н BIOS ринтер портын инициализациялайды және порт статус беретін байтты қайтарып береді. DX порт номерін – 0-ден 2 дейін санымен сыйғызыңыздар LPT1 - LPT3 үшін, кейін үзілісті шақырыңыздар. Принтер статус байты ([6.1.2]) АН қайтып келеді;--- LPT1 инициализациясы.

MOV AH,1 ; принтер инициализация функциясы

MOV DX,0 ;LPT1

INT 17H ;инициализацияны өткіземіз

Принтердің әрбір адаптері шығаруының басқару регистрі бит болады, ол адаптер инициализациясын шақырады. Бұл регистр порт адресі, адаптер базалық адресіне қарағанда, 2 көбірек болады. Еске алсақ, LPT1 базалық адресі 0040:0008 ұяшығында сақталады, LPT2 үшін 0040:000A арналған және т.б. Шығарумен басқару регистрі тек қана 5 бит кіші мағынаны болады. Бит 2 - принтер инициализация биті және ол әдетте 1 орналастырады. Адаптер инициализациясы үшін бұл битті 0 бос мыңдаған тактіге лақтыру керек. Бұл кезеңде тек қана бит 3 орнатылу керек (принтер таңдалған). Сондықтан портқа 12 мағынасын жіберіңіздер, тоқтаңыз, ал содан соң портқа қарапайым (үзулерсіз) ининлизацияланбаған мағына жіберіңіздер, ол 8 тең.

Берілген мысалда инициализацияланады LPT1: ;---инициализациялаймыз LPT1

MOV DX,ES:[8] ;базалық адресті оқимыз DX

INC DX ;базалық адреске 2 қосамыз

INC DX ;

MOV AL,12 ;инициализация үшін мағына

OUT DX,AL ;инициализацияны бастаймыз DELAY: MOV AX,1000;бос цикл басы

DEC AX ;есепшіні кемітеміз

JNZ DELAY ;1000 рет қайталаймыз

MOV AL,8;регистр үшін қарапайым мағына

OUT DX,AL ;инициализация соңы, тексерілді, принтер машинамен байланысты.

Бағдарлама әрқашан, принтер машинамен байланысты екенін тексеруге тиісті, оған шығаруға жібермес бұрын. Жеңіл анықталады, принтер дайын емес екендігі, дәл осылай регистр бит 3 принтер статусы бұл жағдайда 1 орнатылады. Қиыны неге принтер дайын емес екендігін анықтау: өшірілген бе ол, принтер таңдалмаған немесе онда қағаз жоқ. Бұның себебі әр түрлі өндірушілердің принтерлері принтер статусы регистріне биттердің әр түрлі жиындары жібереді. Бірақ регистр статусы биттерге ие болады, бұлар принтер үш жағдайын көрсету тиісті, бірақ биттердің мағынасы нақты бұл шарттарға сәйкес келмейді (бит 3, принтер өшірілгенін көрсету тиіс, бит 4, принтер таңдалмағанын және бит 5 қағаздар жоқтығын). Төменде көрсетілген мағыналар регистр статусына "Эпсон"стандартпен қайтып келеді, қайсыға әдеттегі IBM көрсетіледі:

Интерпретация Биттер тізбегінің Мағынасы

22311011111 принтер дайын

8701010111 принтер дайын емес

11901110111 принтерде қағаздар жоқ

24711110111 принтер өшірілген

Енгізу регистр статусы порт адресі 1 көбірек болады, принтер базалық адресіне қарағанда. LPT1 арналған базалық адрес 0040:0008 адресі бойынша сақталады, LPT2 арналған 0040:000A адресі бойынша және т.с.с. Егер принтер өшірілген болса, онда қосқаннан кейін оған инициализация үшін уақыт керек. Соған дейін, енгізу регистр статусы, принтер машинамен байланысты және берілгендерді қабылдауға дайын деп хабарлағанша дейін қағазды баспаға жіберуді бастамаңыз.

Берілген мысал, ең қарапайым бит on – line регистр статусын тексереміз. Байт статусын алу үшін LPT1 базалық адрес қолданылады.

;--- сегменте

MESSAGE DB 'Printer not ready - strike any key when OK$'

;---принтердің машинамен байланысын тексеру (on-line)

MOV AX,40H ;ES көрсетеді BIOS берілгендер облысына

MOV ES,AX ;

MOV DX,ES:[8] ;базалық адресті аламыз

INC DX ;регистра статусы үшін қызметтен алу

IN AL,DX ;AL статус байтын аламыз

TEST AL,1000B ;бит 3 тексереміз

JNZ GO_AHEAD ;егер принтер on-line, онда алға

;--- қате туралы хабарламаны басамыз және перне басуды күтеміз

MOV AH,9 ;жолды шығару функциясы

LEA DX,MESSAGE ;DS:DX хабарламаны көрсетеді

INT 21H ;хабарламаны басамыз

MOV AH,7 ;енгізуді күту функциясы

INT 21H ;перне басуды күтеміз (жаңғырықсыз)

GO_AHEAD: ; бағдарлама жалғасысы

Тапсырма:

1. LPT принтер портын инициализациялайтын бағдарлама жазыңыздар.

2. Принтердің машинамен байланыстығын тексеретін бағдарлама жазыңыздар.

3. Принтерге символды басу.

4. Принтерде жол символдарын басу.

Әдебиет: 10, бет. 122-135; 17, бет. 65- 69.

Бақылау сұрақтар

1. Компьютердің BIOS қанша LPT-порттарды сүйейді?

2. LPT1 арналған қандай базалық адрес бар?

3. Принтер порт инициализациямен принтердің өз инициализациясының айырмашылығы неде?

4. Қандай функция және қандай үзулер принтер портын инициализациялайды?

5. Принтердің машинамен байланысын қалай тексеруге болады?