o nado pomestit' ego kod ASCII v sootvetstvuyushchyuyu poziciyu vtoroj stroki. Naprimer: Poziciya simvola 1 2 3 4 5 6 7 8 9 10 Kod ASCII 205 32 98 111 114 105 110 103 32 205 Kod 2-j stroki 205 32 32 32 32 32 32 32 32 205 V pamyati dolzhna hranit'sya otdel'naya tablica cepochek bitov etih simvolov dlya vtorogo prohoda. Dlya dvojnoj vertikal'noj cherty soderzhimoe tablicy dlya pervogo prohoda budet 0, 255, 0, 255, 0, 0, a dlya vtorogo - 0, 15, 0, 15, 0, 0. Otmetim, chto vo vtorom i chetvertom bajte dlya vtorogo prohoda verhnie 4 bita sbrosheny, chtoby ne bylo nadpechatki. Koroche, kogda nachinaetsya pechat', to v pervuyu ochered' prove- ryaetsya yavlyaetsya li dannyj simvol psedograficheskim, i esli net, to on posylaetsya na pechat', kak obychnyj kod ASCII. Vo vremennuyu stroku, ispol'zuemuyu dlya pechati vtorogo prohoda vstavlyaetsya pro- bel. Zatem obrabatyvaetsya sleduyushchij simvol. Kogda vstrechaetsya simvol psevdografiki, to 6 kodiruyushchih ego bajtov berutsya iz tab- licy, printer perevoditsya v graficheskij rezhim dlya vyvoda 6 bajtov i posylayutsya dannye. Zatem printer avtomaticheski vozvrashchaetsya v tekstovyj rezhim. V sootvetstvuyushchuyu poziciyu stroki dlya vtorogo prohoda pomeshchaetsya kod ASCII etogo simvola psevdografiki. |tot process prodolzhaetsya do konca stroki, posle chego delaetsya progon bumagi na vysotu chetyreh tochek. Pri povtornom prohode nado opyat' poocheredno rassmotret' kazhdyj simvol. Esli eto probel, to nado pechatat' simvol probela (t.e. ne pechatat' nichego, a prosto prod- vinut' golovku k sleduyushchemu simvolu). Esli zhe eto graficheskij simvol, to nado najti sootvetstvuyushchij emu dannye dlya vtorogo prohoda v otdel'noj tablice i napechatat' ego takim zhe obrazom, kak i pri pervom prohode. Povtorno ispol'zujte stroku dlya vtorogo prohoda s kazhdoj pechataemoj strokoj. Na ris. 6-3 pokazana eta procedura. Vysokij uroven'. V dannom primere tekst razdelen na dve kolonki, pri etom nep- reryvnaya liniya razdelyaet stranicu posredine. Dlya prostoty pecha- taetsya tol'ko odna stroka, odnako etot primer mozhet pechatat' i celuyu stranicu, esli vstavit' cikl FOR/NEXT v strokah 325 i 505. Dlya demonstracii dvuh podhodov pri pervom prohode pechataetsya po odnomu simvolu, v to vremya kak pri vtorom prohode pechataetsya celaya stroka. 100 '''tablica dannyh dlya pervogo prohoda (tol'ko kody 178 i 179) 110 DATA 0, 0, 255, 0, 0, 0 120 DATA 4, 4, 255, 0, 0, 0 130 '''analogichnaya tablica dlya vtorogo prohoda 140 DATA 0, 0, 15, 0, 0, 0 150 DATA 0, 0, 15, 0, 0, 0 160 '''pomeshchaem pervuyu tablicu v massiv 170 DIM FIRSTPASS$(45) 'opisyvaem massiv 180 FOR N = 1 TO 2 'zapolnyaem ego 190 Y$ = "" 'Y$ hranit 6 bajtov na simvol 200 FOR M=1 TO 6: READ X: Y$ = Y$+CHR$(X): NEXT 210 FIRSTPASS$(N) = Y$: NEXT 'pomeshchaem v massiv 220 '''pomeshchaem v massiv vtoruyu tablicu 230 DIM SECONDPASS$(45) ' 240 FOR N = 1 TO 2 ' 250 Y$ = "" ' 260 FOR M=1 TO 6: READ X: Y$ = Y$+CHR$(X): NEXT 270 SECONDPASS$(N) = Y$: NEXT ' 280 '''pechataem tekst sleduyushchej stroki 290 TEXT$ = "Here is one column"+CHR$(179)+"Here is the second column" 300 TEMP$ = STRING$(80,32) 'sozdaem stroku dlya 2-go prohoda 310 GRAPH$ = CHR$(27)+CHR$(75)+CHR$(6)+CHR$(0) 320 OPEN "LPT1:" AS #1 'otkryvaem printer 330 FOR N = 1 TO LEN(TEXT$) 'dlya kazhdogo simvola teksta 340 C$ = MID$(TEXT$,N,1) 'berem simvol i proveryaem ego 350 IF C$ < CHR$(128) THEN PRINT #1,C$;: GOTO 400 360 '''predpolagaem, chto vse ostal'nye simvoly - psevdografika 370 PRINT #1,GRAPH$; 'vhodim v graficheskij rezhim 380 PRINT #1,FIRSTPASS$(ASC(C$) - 178);vyvodim 1-j prohod 390 MID$(TEMP$,N) = C$ 'marker v stroke 2-go prohoda 400 NEXT 410 '''smeshchaemsya na 8 tochek vniz i delaem vtoroj prohod 420 PRINT #1,CHR$(27)+CHR$(65)+CHR$(4)+CHR$(141); 430 Z$ = "" 'Z$ soderzhit stroku dlya 2-go prohoda 440 FOR N = 1 TO LEN(TEXT$) 'dlya kazhdogo simvola teksta 450 C$ = MID$(TEMP$,N,1) 'berem simvol i obrabatyvaem ego 460 IF C$ = CHR$(32) THEN Z$ = Z$+" ": GOTO 480 470 Z$ = Z$+GRAPH$+SECONDPASS$(ASC(C$) - 178) 480 NEXT 490 PRINT #1,Z$ 'pechataem vsyu stroku srazu 500 PRINT #1,CHR$(10); 'dobavlyaem v konce perevod stroki Nizkij uroven'. Programma na assemblere ispol'zuet tot zhe samyj algoritm, chto i privedennaya programma na Bejsike. Kogda ispol'zuetsya tol'ko neskol'ko simvolov, to Vy mozhete sekonomit' mesto, szhav tablicu, s tem chtoby ih polozhenie v tablice ne bylo proporcional'no ih pozicii v nabore ASCII. Zatem podgotov'te nebol'shuyu tablicu in- deksov s pomoshch'yu instrukcii XLAT, s pomoshch'yu kotoroj mozhno bystro iskat' dannye v etoj tablice. 6.3.5 Kopirovanie ekrana na printer (damp ekrana). Damp tekstovogo ekrana sdelat' dostatochno prosto, esli vse ispol'zuemye simvoly soderzhatsya v PZU printera i ni odin iz nih ne vyvoditsya so special'nymi atributami, takimi kak podcherkivanie ili negativnoe izobrazhenie. V etom prostejshem sluchae programme nuzhno lish' ustanovit' shirinu printera ravnoj 80 simvolam, a zatem schityvat' simvoly poocheredno iz videobufera, posylaya ih kak nep- reryvnyj potok dannyh na printer. Esli v PZU printera otsutstvuyut special'nye simvoly, takie kak simvoly psevdografiki, to program- ma dolzhna podgotovit' svoyu tablicu dannyh dlya etih simvolov i vyvodit' ih na printer v graficheskom rezhime. Poskol'ku eti simvo- ly mogut zahodit' v mezhstrochnye intervaly, to mozhet potrebovat'sya special'noe programmirovanie [6.3.4]. Kazhdyj iz special'nyh atributov simvolov sozdaet svoi proble- my. Proveryajte atribut kazhdogo simvola pri schityvanii ego iz videobufera (v [4.1.3] obsuzhdaetsya znachenie bitov, sootvetstvuyu- shchee razlichnym atributam). Kogda simvol vydelen s pomoshch'yu podcher- kivaniya ili povyshennoj intensivnosti, to nado vklyuchat' podcherki- vanie ili pechat' zhirnym shriftom na printere. Odnako esli simvol vyvoditsya v negativnom izobrazhenii, to voznikayut te zhe problemy, chto i s nekotorymi graficheskimi simvolami: oblast' negativnogo izobrazheniya dolzhna prostirat'sya do verhnego kraya sleduyushchej stro- ki. V etom sluchae nado sleduya ukazaniyam [6.3.4] zapolnit' chernym vsyu oblast' pri vtorom prohode. V zavisimosti ot printera, Vam mozhet ponadobit'sya sozdat' special'nuyu tablicu dannyh dlya vyvoda simvolov v negative, poskol'ku kogda oni budut pechatat'sya, to okruzhayushchie tochki mogut nahodit'sya slishkom blizko odna k drugoj, zatemnyaya izobrazhaemyj simvol. V etom sluchae ne mozhet byt' i rechi o pechati v dva prohoda. Prostym resheniem problemy s negativnym izobrazheniem yavlyaetsya ispol'zovanie graficheskogo rezhima ekrana dlya vyvoda teksta, a zatem sdelat' damp graficheskogo ekrana. Graficheskie dampy sozdayut svoi problemy. Bajt dannyh printera sootvetstvuet vos'mi vertikal'nym tochkam, v to vremya kak na ekra- ne bajt predstavlyaet 8 gorizontal'nyh tochek. Poetomu trebuetsya procedura preobrazovaniya, pokazannaya na ris. 6-4. Nado srazu poluchat' po 8 bajtov pamyati ekrana, vybiraya takie, kotorye soot- vetstvuyut oblasti tochek 8*8. Zatem nado ispol'zovat' logicheskie operacii dlya perestanovki bitov, kak pokazano v primerah. Imejte vvidu, chto bol'shinstvo matrichnyh printerov iskazhayut ekrannoe izobrazhenie. |to proishodit potomu, chto oni ispol'zuyut masshtabnyj koefficient 1:1, v to vremya kak ekran ispol'zuet koef- ficient 5:6 (masshtabnyj koefficient sravnivaet chislo gorizontal'- nyh tochek na dyujm s chislom vertikal'nyh tochek na dyujm). Tochnee govorya, iskazhenie izobrazheniya na samom dele voznikaet iz-za massh- tabnogo koefficienta ekrana, poskol'ku programmy dolzhny special'- no menyat' dannye dlya izobrazheniya, chtoby ono vyglyadelo tak, kak nam hochetsya (naprimer, izobrazhenie okruzhnosti na ekrane sozdaetsya vyvodom na nego ellipsa). Kogda dannye s ekrana vyvodyatsya na printer, to eti iskazhenie dolzhny obrashchat'sya. Nekotorye grafiches- kie printery imeyut special'nye rezhimy, v kotoryh mozhno vyvodit' kopiyu ekrana bez iskazheniya, a cvetnoj printer IBM mozhet menyat' masshtabnyj koefficient v lyubom iz svoih graficheskih rezhimov. Vysokij uroven'. Privodimaya procedura na Bejsike delaet kopiyu tekstovogo ekra- na, ignoriruya special'nye atributy: 10 OPEN "LPT1:" AS #1 'otkryvaem printer 20 DEF SEG = &HB000 'ukazyvaem na videobufer 30 PRINT #1,CHR$(13) 'sdvigaem golovku vlevo 40 FOR G = 0 TO 3998 STEP 2 'dlya kazhdogo bajta bufera 50 PRINT #1,CHR$(PEEK(G)); 'chitaem ego i vyvodim na printer 60 NEXT 'obrabatyvaem sleduyushchij bajt Perebroska cepochek bitov dlya graficheskogo dampa trebuet v Bejsike slishkom mnogo vremeni. Pomestite v massiv (zdes', BYTE$) vosem' bajtov, otvechayushchih oblasti ekrana 8*8 tochek. Sozdajte vtoroj massiv (VERTICAL$) i obnulite ego elementy, a zatem poocheredno perebrasyvajte bity elementov etih massivov sleduyushchim obrazom: 500 FOR M = 0 TO 7 'dlya kazhdogo bita 510 FOR N = 0 TO 7 'dlya kazhdogo bajta 520 X = ASC(BYTES(N)) 'poluchaem znachenie bajta 530 Y = 2*(7 - M) 'maska dlya odnogo vklyuchennogo bita 540 Z = X AND Y 'proverka etogo bita v bajte 550 IF Z <> 0 THEN VERTICAL$(M) = CHR$(ASC(VERTICAL$(M) OR 2*N) 'esli on vklyuchen, to ustanavlivaem bit 'v sootvetstvuyushchej pozicii 2-go massiva 560 NEXT N 'sleduyushchij bit 570 NEXT M 'sleduyushchij bajt Nizkij uroven'. YAzyk assemblera delaet bitovye preobrazovaniya namnogo bystree. Vot procedura, kotoraya delaet eti preobrazovaniya uzhasno bystro, poskol'ku ona derzhit vse v mikroprocessore (ona nemnogo velikova- ta, no Vy mozhete ispol'zovat' vzamen algoritm, pokazannyj v Bej- sike). Procedura rabotaet, hranya 8 rezul'tiruyushchih bajtov v re- gistrah CX, DX, BP i DI. Bajt ekrannyh dannyh pomeshchaetsya v AL, a zatem v AH peredvigayutsya posledovatel'no CL, CH, DL i DH. Kazhdyj raz iz AL v AH sdvigaetsya odin bit i kogda sdelany 4 sdviga, to CX i DX obmenivayutsya s DX i BP, posle chego vse eto povtoryaetsya snova. |tot process povtoryaetsya dlya kazhdogo iz 8-mi ekrannyh bajtov i kogda on zavershen, to preobrazovannoe izobrazhenie hra- nitsya v registrah mikroprocessora, prichem samyj levyj bajt dannyh dlya pechati v CL. Soderzhimoe registrov vyvoditsya na printer i obnulyaetsya, posle chego process povtoryaetsya dlya sleduyushchih vos'mi bajtov ekrana. Snachala poluchite 8 bajtov iz videobufera i pomes- tite ih v bufer s imenem BUFFER. Pomestite 0 v AX, CX, DX, BP i DI. Zatem: LEA BX,BUFFER ;ukazyvaem na bufer videodannyh MOV SI,0 ;smeshchenie v etom bufere GET_BYTE: MOV AL,[BX][SI] ;berem bajt DO_HALF: XCNG AH,CL ;poluchaem CL, CH, DL i DH SHL AX,1 ;sdvigaya bit iz AL XCNG AH,CL ; XCNG AH,CH ; SHL AX,1 ; XCNG AH,CH ; XCNG AH,DL ; SHL AX,1 ; XCNG AH,DL ; XCNG AH,DH ; SHL AX,1 ; XCNG AH,DH ; ;---nachinaem vtoruyu polovinu peremeshcheniya bitov XCNG CX,BP ;obmenivaem soderzhimoe CX i DX XCNG DX,DI ; CMP SI,7 ;esli vse bajty preobrazovany, to pechataem JE PRINT_BYTES ; INC SI ;inache perehodim k sleduyushchemu bajtu JMP SHORT GET_BYTE ; ;---pechataem bajty PRINT_BYTES: PUSH DX ;sohroanyaem DX MOV AH,5 ;funkciya vyvoda na printer MOV DL,27 ;kod Esc INT 21H ;posylaem ego MOV DL,75 ;kod graficheskogo rezhima INT 21H ;posylaem ego MOV DL,6 ;budet poslano 6 bajtov INT 21H ; MOV DL,0 ; INT 21H ; CALL PRINT_2_BYTES ;posylaem soderzhimoe CX POP CX ; CALL PRINT_2_BYTES ;posylaem soderzhimoe DX MOV CX,BP ; CALL PRINT_2_BYTES ;posylaem soderzhimoe BP MOV DX,DI ; CALL PRINT_2_BYTES ;posylaem soderzhimoe DI . (idem k sleduyushchej gruppe iz vos'mi bajtov) . PRINT_2_BYTES: PROC NEAR MOV AH,5 ;funkciya pechati MOV DL,CL ;snachala CL INT 21H ;pechataem MOV DL,CH ;zatem CH INT 21H ;pechataem RET PRINT_2_BYTES ENDP Glava 7. Vvod/vyvod. Razdel 1. Dostup k posledovatel'nomu portu. Pri asinhronnoj svyazi mashina posylaet ili prinimaet bajty informacii po odnomu bitu. Vremennye intervaly mezhdu bajtami pri etom nesushchestvenny, no vremena mezhdu otdel'nymi bitami bajta ochen' vazhny. Signal na linii mozhet byt' vysokogo ili nizkogo urovnya, chto sootvetstvuet logicheskim nulyu i edinice, i govoryat, chto liniya otmechena (marking), kogda uroven' vysokij, i pustaya (spacing), kogda uroven' nizkij. Liniya podderzhivaetsya v otmechennom sostoyanii, kogda po nej net peredachi dannyh. Pri nachale peredachi bajta dannyh signal padaet v 0, otmechaya startovyj bit. Zatem sleduyut vosem' bitov dannyh (inogda men'she) v vide nabora vysokih i nizkih urovnej. Poslednij bit dannyh mozhet soprovozhdat'sya bitom chetnosti, ispol'zuemym dlya obnaruzheniya oshibok, a zatem v posledovatel'nost' vklyuchayutsya 1 ili bolee stop-bitov, kotorym sootvetstvuet vysokij uroven'. |ti stop-bity nachinayut otmechennoe sostoyanie, kotoroe budet sohranyat'- sya do teh por, poka ne nachnetsya peredacha sleduyushchego bajta dannyh; chislo ispol'zuemyh stop-bitov sushchestvenno, poskol'ku oni ustanav- livayut minimal'noe vremya, kotoroe dolzhno projti pered sleduyushchim startovym bitom. Na ris. 7-1 pokazana eta posledovatel'nost'. Konechno, peredayushchaya i priemnaya stancii dolzhny ispol'zovat' odin i tot zhe protokol dlya etih cepochek bitov i oni dolzhny rabo- tat' s odnoj i toj zhe skorost'yu obmena (izmeryaemoj v bitah v sekundu, nazyvaemyh takzhe bodami). Pri obmene mogut legko vozni- kat' oshibki, poetomu kommunikacionnoe oborudovanie predostavlyaet raznoobraznuyu informaciyu o statuse kak samogo porta, tak i pri- soedinennogo k nemu modema. Zadachej modema yavlyaetsya preobrazova- nie signala, generiruemogo portom kommunikacii, v akusticheskij signal, kotoryj mozhet zatem byt' peredan po telefonnomu kanalu. Bol'shinstvo modemov predostavlyayut takzhe dopolnitel'nye kommunika- cionnye vozmozhnosti, takie kak avtomaticheskij vyzov i otvet, kotorye ne podderzhivayutsya samim portom kommunikacii. 7.1.1 Programmirovanie mikroshemy UART 8250. Posledovatel'naya svyaz' nastol'ko slozhna, chto byli razrabotany special'nye mikroshemy, vypolnyayushchie rabotu po formirovaniyu i sinhronizacii strok bitov, sostavlyayushchih posledovatel'nye dannye. Takie mikroshemy nazyvayut universal'nym asinhronnym priemni- kom-peredatchikom (universal asynchronous receiver transmitter ili UART). IBM PC ispol'zuet UART 8250 firmy Intel. Operacionnaya sistema podderzhivaet 2 porta kommunikacii, poeto- mu v mashine imeyutsya 2 mikroshemy. Ih bazovye adresa hranyatsya v yachejke 0040:0000 dlya COM1 i 0040:0002 dlya COM2. (Bazovyj adres eto 2-hbajtovyj adres porta, kotoryj yavlyaetsya mladshim iz gruppy adresov portov, dayushchih dostup k UART.) Na vseh mashinah krome PCjr COM1 imeet bazovyj adres 3F8H, a COM2 - 2F8H; PCjr imeet svoj vnutrennij modem po adresu 3F8H, a COM1 - po adresu 3F8H. Dlya udobstva, my v dal'nejshem budem vsegda numerovat' registry 3FxH, no vse skazannoe v ravnoj stepeni primenimo i k registram 2FxH. Mikroshema 8250 imeet 10 programmiruemyh odnobajtnyh regist- rov, s pomoshch'yu kotoryh upravlyaetsya i kontroliruetsya port kommuni- kacii. Bol'shinstvo iz nih zanimayutsya inicializaciej porta, pro- cessom, kotoryj mozhet byt' ochen' slozhnym. Dostup k etim 10 re- gistram osushchestvlyaetsya cherez sem' adresov portov s nomerami 3F8H - 3FEH (ili 2F8H - 2FEH). V pyati sluchayah registr, k kotoromu poluchaem dostup cherez dannyj port, zavisit ot togo, kak ustanov- len bit 7 v registre kontrolya linii, kotoryj yavlyaetsya edinstven- nym registrom s adresom porta 3FBH. Vot eti registry: 3F8H (OUT, bit 7 = 0 v 3FBH) Registr hraneniya peredatchika 3F8H (IN, bit 7 = 0 v 3FBH) Registr dannyh priemnika 3F8H (OUT, bit 7 = 1 v 3FBH) Delitel' skorosti obmena (mladshij) 3F9H (IN, bit 7 = 1 v 3FBH) Delitel' skorosti obmena (starshij) 3F9H (OUT, bit 7 = 0 v 3FBH) Registr razresheniya preryvaniya 3FAH (IN) Registr identifikacii preryvaniya 3FBH (OUT) Registr upravleniya linii 3FCH (OUT) Registr upravleniya modemom 3FDH (IN) Registr statusa linii 3FEH (IN) Registr statusa modema Iz desyati registrov tol'ko shest' neobhodimy dlya prostoj posle- dovatel'noj svyazi. Registr hraneniya peredatchika soderzhit bajt dannyh, kotorye budut poslany [7.1.6], a registr dannyh priemnika - poslednij poluchennyj bajt dannyh [7.1.7]. Registry upravleniya i statusa linii inicializiruyut i upravlyayut liniej svyazi, ispol'zuya skorost' obmena, soderzhashchuyusya v dvuh registrah delitelya skorosti obmena [7.1.2]. Iz ostavshihsya chetyreh registrov registry upravle- niya i statusa modema ispol'zuyutsya tol'ko dlya svyazi cherez modem [7.1.5], a dva registra, svyazannyh s preryvaniyami ispol'zuyutsya tol'ko v procedurah, upravlyaemyh preryvaniyami [7.1.8]. Preryvaniya ispol'zuyutsya pri svyazi v celyah effektivnosti. Obych- naya kommunikacionnaya procedura nepreryvno proveryaet registr sta- tusa linii, ozhidaya vvodimogo simvola ili ukazaniiya, chto vse goto- vo dlya peredachi sleduyushchego bajta dannyh. Poskol'ku processor namnogo bystree, chem obychnye skorosti s kotorymi peredayutsya pos- ledovatel'nye dannye, to etot metod naprasno rashoduet processor- noe vremya, kotoroe mozhet ispol'zovat'sya dlya obrabotki postupayushchih ili peredavaemyh dannyh. Po etoj prichine mikroshema 8250 mozhet byt' ustanovlena v rezhim, vyzyvayushchij preryvanie pri poyavlenii simvola, vozniknovenii oshibki i t.p. |to preryvanie momental'no vyzovet proceduru Vashej programmy, kotoraya, skazhem, budet pereda- vat' sleduyushchij simvol iz kommunikacionnogo bufera. 7.1.2 Inicializaciya posledovatel'nogo porta. Pri inicializacii porta kommunikacii ("otkrytii") ustanavli- vayutsya vse ego parametry. |ti parametry dlinu slova, chislo stop-bitov, ustanovku chetnosti i skorost' obmena. Dlina slova eto chislo bitov, kotoroe obrazuet osnovnuyu edinicu dannyh. Esli my rabotaem s privychnymi porciyami po 8 bitov, to 7 bitov dostatochny dlya standartnyh fajlov ASCII (v kotoryh vse simvoly imeyut kody, ne prevyshayushchie ASCII 128), v to vremya kak dlya peredachi chislennyh dannyh dostatochno porcij po 4 bita. Vysokij uroven'. Bejsik otkryvaet kommunikacionnyj kanal kak fajl, i kak tako- vomu emu dolzhen byt' prisvoen identifikacionnyj nomer: OPEN "COM1: .........." AS #1 V kavychkah dolzhna byt' pomeshchena vsya informaciya, neobhodimaya dlya inicializacii porta kommunikacii, pri etom kazhdyj element otde- lyaetsya ot predydushchego zapyatoj. Inicializacionnye dannye vsegda vvodyatsya v sleduyushchem poryadke: Skorost' obmena daetsya kak celoe chislo: 75, 100, 150, 300, 600, 1200, 1800, 2400, 4800 ili 9600 bod. Po umolcha- niyu beretsya skorost' obmena 300 bod. CHetnost' vvoditsya kak odnosimvol'nyj kod: O dlya nechetnoj E - dlya chetnoj i N - pri otsutstvii kontrolya po chetnosti. Mogut byt' takzhe S - kogda bit chet- nosti vsegda raven 0 i M - kogda bit chetnosti vsegda raven 1. Esli ispol'zuyutsya 8 bit dannyh, to nado ukazyvat' N; pri ispol'zovanii chetyreh bit ne nado ispol'zovat' N. Po umolchaniyu - E. Bity dannyh daetsya kak celoe chislo 4, 5, 6, 7 ili 8. Po umolchaniyu beretsya 7. Stop-bity daetsya kak celoe chislo 1 ili 2, prichem 2 - znachenie po umolchaniyu dlya 75 i 110 bod, a 1 - dlya ostal'nyh. Kogda chislo bitov dannyh ravno 4 ili 5, to 2 oboznachaet 1 1/2 stop-bita. Takoe znachenie vozmozhno pri kommunikacii, tak kak v etom sluchae bit yavlyaetsya edinicej vremeni i poetomu delim. Operator OPEN "COM1:" AS #1 otkryvaet COM1 dlya svyazi so skorost'yu 300 bod s chetnoj chetnost'yu, ispol'zuya 7 bitov dannyh i 1 stop-bit. OPEN "COM1:1200,O,8,1" ustanavlivaet skorost' 1200 bod, nechetnuyu chetnost', 8 bit na simvol i 1 stop-bit. Otmetim, chto Vy mozhete zavershit' operator OPEN vyrazheniem LEN = chislo, gde chislo ustanavlivaet maksimal'nyj razmer bloka, s kotorym operatory GET i PUT mogut obrabatyvat' dannye (po umolchaniyu 128 bajtov). Imeet- sya takzhe ryad komand upravleniya modemom, kotorye takzhe mogut byt' vklyucheny v etu specifikaciyu. (V [7.1.5] ob®yasnyaetsya special'naya terminologiya, ispol'zuemaya pri etom): RS Podavlyaet signal "Zapros na posylku" (Request to send). Esli eta komanda opushchena, to OPEN "COM" vklyuchaet RTS. CS Vyzyvaet proverku linii "Ochistka posylki" (Clear to send). Za etoj komandoj mozhet sledovat' znachenie (ot 0 do 65535), dayushchee chislo millisekund kotorye budet ozhi- dat'sya signal pered tem kak budet vydana oshibka tajmau- ta, naprimer, CS500. Znachenie po umolchaniyu 1000, esli ukazan parametr RS, v etom sluchae 0. DS Vyzyvaet proverku linii "Gotovnost' nabora dannyh" (Data set ready). Dopuskaetsya neobyazatel'nyj parametr, kak i dlya CS. Znachenie po umolchaniyu 1000. CD Vyzyvaet proverku linii "Opredelenie nositelya" (Carrier detect). Dopuskaetsya neobyazatel'nyj vremennoj parametr, kak i dlya CS. Znachenie po umolchaniyu 0. LF Vyzyvaet avtomaticheskuyu podachu koda perevoda stroki (ASCII 10) posle kazhdogo simvola vozvrata karetki (AS- CII 13). Ispol'zuetsya dlya posledovatel'nogo vyvoda na printer. PE Razreshaet proverku chetnosti, vyzyvaya oshibku tajmauta ustrojstva pri vozniknovenii oshibki chetnosti. |ti special'nye komandy mogut pomeshchat'sya v lyubom meste opera- tora OPEN "COM" i v lyubom poryadke. Otmetim, chto obychno signaly CTS i DSR dolzhny byt' ustanovleny, chtoby operator OPEN vypolnil- sya, a inache budet vydana oshibka tajmauta ustrojstva. V zaklyuchenie privodim operator OPEN "COM", soderzhashchij vse parametry, krome RS i LF: OPEN "COM1:1200,O,7,1,CS2000,DS2000,CD,PE" AS #1 LEN = 256 Srednij uroven'. Funkciya 0 preryvaniya 14H BIOS inicializiruet port kommunika- cii. V DX dolzhen davat'sya nomer kommunikacionnogo kanala (COM1 = 0, COM2 = 1). V AL dolzhen soderzhat'sya bajt inicializacionnyh dannyh, znachenie bitov kotorogo sleduyushchee: bity 1-0 dlina slova. 10 = 7 bitov, 11 = 8 bitov. 2 chislo stop-bitov. 0 = 1, 1 = 2. 4-3 chetnost'. 00 ili 10 = net, 01 = nechet., 11 = chet. 7-5 skorost' obmena. 000 = 110 bod 001 = 150 bod 010 = 300 bod 011 = 600 bod 100 = 1200 bod 101 = 2400 bod 110 = 4800 bod 111 = 9600 bod V dannom primere port inicializiruetsya so slovom v 8 bitov, odnim stop-bitom i chetnoj chetnost'yu. Skorost' obmena 1200 bod. ;---prisvaivaem znacheniya parametrov peremennym MOV WORDLENGTH,00000011B ;dlina slova 8 bitov MOV STOPBITS,00000000B ;1 stop-bit MOV PARITY,00011000B ;chetnaya chetnost' MOV BAUDRATE,10000000B ;skorost' 1200 bod ;---inicializiruem COM1 MOV AL,0 ;chistim AL OR AL,WORDLENGTH ;ustanavlivaem nuzhnye bity OR AL,STOPBITS ; OR AL,PARITY ; OR AL,BAUDRATE ; MOV AH,0 ;funkciya inicializacii porta MOV DX,0 ;vybiraem COM1 INT 14H ;inicializiruem port Nizkij uroven'. Nezavisimo ot togo, zanimaemsya li my vvodom ili vyvodom, kak minimum 4 registra mikroshemy 8250 dolzhny byt' inicializirovany dlya operacij obmena. |to registry delitelya skorosti obmena, re- gistr kontrolya linii i registr razresheniya preryvaniya. Inicializaciya skorosti obmena. Delitel' skorosti obmena eto chislo, na kotoroe nado razdelit' chastotu sistemnyh chasov (1190000 gerc), chtoby poluchit' zhelaemuyu skorost' obmena. Naprimer, dlya skorosti obmena 1200 bod delitel' skorosti obmena dolzhen byt' raven 96, poskol'ku 1190000/96 prib- lizhenno ravno 1200. CHem bol'she delitel', tem men'she skorost' obmena. Skorosti obmena 300 i men'she trebuyut dvuhbajtnogo chisla dlya delitelya. Starshij bajt posylaetsya v 3F9H (ili 2F9H), a mlad- shij v 3F8H (2F8H). V oboih sluchayah bit 7 registra upravleniya linii dolzhen byt' ustanovlen v 1 pered zasylkoj znachenij; v pro- tivnom sluchae po etim dvum adresam znacheniya budut adresovany v drugie registry (sm. [7.1.0]). Vot nekotorye znacheniya, trebuemye dlya obychnyh skorostej obmena: Skorost' obmena 3F9H 3F8H 110 04H 17H 300 01H 80H 600 00H C0H 1200 00H 60H 1800 00H 40H 2400 00H 30H 3600 00H 20H 4800 00H 18H 9600 00H 0CH Vsegda ustanavlivajte registry skorosti obmena pervymi, tak kak oni edinstvennye, kotorye trebuyut, chtoby byl ustanovlen bit 7 v registre kontrolya linii. Posle etogo nado izmenit' soderzhimoe registra kontrolya linii, sbrasyvaya 7-j bit, chtoby vse ostal'nye dostupy k registram byli pravil'nymi. Poskol'ku registr kontrolya linii yavlyaetsya registrom tol'ko dlya zapisi, to net sposoba ver- nut' bit 7 obratno v 1 bez odnovremennoj ustanovki vseh ostal'nyh bitov etogo registra. Otmetim, chto PCjr ispol'zuet drugie delite- li, opisanie kotoryh Vy mozhete najti v tehnicheskom rukovodstve. Inicializaciya registra kontrolya linii. Znachenie bitov registra kontrolya linii, adres porta kotorogo raven 3FBH (ili 2FBH), sleduyushchee: bity 1-0 Dlina simvola. 00 = 5 bitov, 01 = 6 bitov 10 = 7 bitov, 11 = 8 bitov 2 CHislo stop-bitov. 0 = 1, 1 = 1.5, esli dlina pyati, inache 2. 3 CHetnost'. 1 = generiruetsya bit chetnosti, 0 = net. 4 Tip chetnosti. 0 = nechetnaya, 1 = chetnaya 5 Fiksaciya chetnosti. Zastavlyaet bit chetnosti vsegda byt' 0 ili 1. 0 = otmenena 1 = vsegda 1, esli bit 3 = 1 & bit 4 = 0 ili 1 = vsegda 0, esli bit 3 = 1 & bit 4 = 1 ili 1 = net chetnosti, esli bit 3 = 0 6 Ustanovka pereryva. Vyzyvaet vyvod stroki nulej v kachestve signala otdalennoj stancii. 0 = zapreshcheno, 1 = pereryv 7 Menyaet adresa portov drugih registrov Obychno bity 5-7 sbrosheny v 0. Ostal'nye opisyvayut znacheniya, opre- delyaemye protokolom obmena. Registr razresheniya preryvaniya. Dazhe esli Vy ne ispol'zuete preryvaniya, vse ravno Vy dolzhny proizvesti zapis' v registr razresheniya preryvaniya, chtoby byt' uverennym, chto preryvaniya zapreshcheny. Prosto pomestite v etot registr 0. Registr identifikacii preryvaniya mozhno ignorirovat'. Inicializaciya ostal'nyh registrov svyazana s modemami. YAsno, chto modemy nuzhny tol'ko dlya svyazi s udalennymi ustrojstvami, a ne dlya upravleniya blizlezhashchimi ustrojstvami, takimi kak posledova- tel'nyj printer. V [7.1.5] ob®yasneno kak inicializirovat' registr kontrolya modema. V dannom primere iz oblasti dannyh BIOS beretsya bazovyj adres COM1, posle chego razlichnye registry inicializiruyutsya dlya skorosti obmena 1200 bod, semibitnyh dannyh, chetnoj chetnosti i odnogo stop-bita. ;---poluchaem bazovyj adres COM1 MOV AX,40H ;ES ukazyvaet na oblast' dannyh BIOS MOV ES,AX ; MOV DX,ES:[0] ;poluchaem bazovyj adres COM1 ;---inicializiruei registry delitelya skorosti obmena na 1200 bod ADD DX,3 ;ukazyvaem na registr kontrolya linii MOV AL,10000000B ;ustanavlivaem bit 7 OUT DX,AL ;posylaem bajt DEC DX ;ukazyvaem na starshij bajt delitelya DEC DX ;skorosti obmena MOV AL,0 ;starshij bajt dlya 1200 bod OUT DX,AL ;posylaem starshij bajt dlya 1200 bod DEC DX ;ukazyvaem na mladshij bajt delitelya MOV AL,60H ;mladshij bajt delitelya dlya 1200 bod OUT DX,AL ;posylaem mladshij bajt ;---inicializiruem registr kontrolya linii MOV AL,0 ;obnulyaem AL OR AL,10B ;dlina dannyh 7 bitov OR AL,000B ;1 stop-bit OR AL,1000B ;generiruetsya bit chetnosti OR AL,10000B ;chetnaya chetnost' ADD DX,3 ;ukazyvaet na registr kontrolya linii OUT DX,AL ;posylaem inicializacionnoe znachenie ;---inicializiruem registr razresheniya preryvaniya DEC DX ;ukazyvaem na registr razresheniya DEC DX ;preryvaniya MOV AL,0 ;zapreshchaem preryvaniya OUT DX,AL ;posylaem bajt 7.1.3 Ustanovka tekushchego kommunikacionnogo porta. Imeyutsya dva sposoba, kotorymi programma mozhet opredelit', kakoj iz kommunikacionnyh portov dolzhen ispol'zovat'sya. Odin iz sposobov sostoit v ukazanii nomera kanala v operatore programmy. Vtoroj sposob sostoit v napisanii programmy dlya obmena cherez port COM1, no izmenenii kommunikacionnogo adaptera, dostup k kotoromu idet cherez COM1. Oblast' dannyh BIOS soderzhit mesto dlya chetyreh 2-hbajtnyh peremennyh, kotorye soderzhat bazovye adresa kommunikacionnyh kanalov (MS DOS podderzhivaet tol'ko pervye dva iz nih). Bazovyj adres porta eto mladshij iz gruppy adresov portov, cherez kotorye mozhno poluchit' dostup k dannomu kommunikacionnomu kanalu. Bazovyj adres dlya COM1 hranitsya v yachejke 0040:0000, a dlya COM2 - v yachejke 0040:0002. Dlya smeny kommunikacionnyh portov nado prosto pomenyat' eti dva znacheniya. Povtornaya smena znachenij privedet k pervona- chal'nomu naznacheniyu portov. Vysokij uroven'. V Bejsike operator OPEN "COM" mozhet ispol'zovat'sya v vide OPEN C$+"1200,N,8" AS #2, gde C$ mozhet byt' libo "COM1:", libo "COM2:". V kachestve al'ternativy mozhno ispol'zovat' PEEK i POKE dlya obmena bazovyh adresov: 100 DEF SEG = &H40 'ukazyvaem na oblast' dannyh BIOS 110 X = PEEK(0): Y = PEEK(1) 'zapominaem pervye 2 bajta 120 POKE 0,PEEK(2): POKE 1,PEEK(3) 'perenosim 2-e dva bajta 130 POKE 2,X: POKE 3,Y 'zasylaem zapomnennye znacheniya Srednij uroven'. Esli programma obrashchaetsya k kommunikacionnomu portu cherez preryvanie 14H BIOS, to COM port opredelyaetsya soderzhimym DX, kotoroe ravno 0 ili 1 (dlya COM1 ili COM2). Vmesto togo, chtoby prisvaivat' DX neposredstvennoe znachenie, zapolnyajte ego iz pere- mennoj, kotoroj mozhet byt' prisvoeno znachenie 0 ili 1. Programmy, ispol'zuyushchie kommunikacionnye funkcii 3 i 4 preryvaniya 21H vsegda adresuyutsya k COM1. V etom sluchae nado pomenyat' bazovye adresa: ;---obmen bazovyh adresov dlya COM1 i COM2 MOV AX,40H ;ES ukazyvaet na oblast' dannyh BIOS MOV ES,AX ; MOV DX,ES:[0] ;pomeshchaem 1-j bazovyj adres v DX MOV AX,ES:[2] ;pomeshchaem 2-j bazovyj adres v AX MOV ES:[0],AX ;obmenivaem adresa MOV ES:[2],DX ; 7.1.4 Opredelenie statusa kommunikacionnogo porta. Registr statusa linii mikroshemy UART 8250 opredelyaet protokol svyazi. |tot registr imeet adres porta na 5 bol'she, chem bazovyj adres dannogo kanala. Obychno on postoyanno prosmatrivaetsya v pro- cesse kommunikacionnogo obmena. Pri peredache dannyh registr soob- shchaet, chto predydushchij simvol uzhe poslan, pozvolyaya programme zapi- sat' novyj simvol poverh ego. Pri prieme dannyh registr informi- ruet programmu o postuplenii sleduyushchego simvola, s tem chtoby programma mogla prochitat' ego prezhde chem on budet unichtozhen sle- duyushchim pribyvshim. Znachenie bitov etogo registra sleduyushchee: bit 0 1 = bajt dannyh poluchen 1 1 = poluchennye dannye byli perezapisany (predydushchij simvol ne byl vovremya schitan) 2 1 = oshibka chetnosti (veroyatno, iz-za shuma v linii) 3 1 = oshibka okruzheniya (peredacha ne sinhronizovana) 4 1 = obnaruzhen pereryv (poluchena dlinnaya stroka edinic, indiciruyushchaya, chto drugaya stanciya zaprashivaet konec peredachi) 5 1 = registr hraneniya peredatchika pust (v etot registr dolzhny pomeshchat'sya peredavaemye dannye) 6 1 = registr sdviga peredatchika pust (etot registr po- luchaet dannye iz registra hraneniya i preobrazuet ih v posledovatel'nyj vid) 7 1 = tajmaut (ustrojstvo ne svyazano s mashinoj) Vysokij uroven'. V Bejsike snachala opredelite bazovyj adres ispol'zuemogo kom- munikacionnogo porta, zatem dobav'te k nemu 5 i ispol'zujte ope- rator INP dlya polucheniya bajta iz etogo porta. V prilozhenii B ob®yasnyaetsya kak v Bejsike proizvodyatsya bitovye operacii, kotorye neobhodimo prodelat' programme, chtoby interpretirovat' znachenie etogo bajta. V sleduyushchem primere proveryaetsya bit nalichiya perery- va: 100 DEF SEG = &H40 'ukazyvaem na oblast' dannyh BIOS 110 ADDR = PEEK(4)+PEEK(5)*256 'vychislyaem adres COM2 120 X = INP(ADDR+5) 'vychislyaem adres registra statusa 130 IF X AND 16 THEN 500 'perehod na podpr-mu, esli bit 4 = 1 . . 500 '''nachinaem proceduru obrabotki pereryva Srednij uroven'. Funkciya 3 preryvaniya 14H BIOS vozvrashchaet v AH registr statusa linii (AL poluchaet registr statusa modema [7.1.5]). Pri vhode DX dolzhen soderzhat' nomer kommunikacionnogo porta, k kotoromu osu- shchestvlyaetsya dostup, gde COM1 = 0, a COM2 = 1. Kak i predydushchij primer, etot proveryaet nalichie pereryva: MOV AH,3 ;nomer funkcii MOV DX,1 ;vybiraem COM2 INT 14H ;poluchaem bajt statusa TEST AH,10000B ;obnaruzhen pereryv? JNZ BREAK_DETECT ;esli da, to na proceduru obrabotki Nizkij uroven'. |tot primer sovershenno analogichen privedennomu na Bejsike. Iz oblasti dannyh BIOS schityvaetsya bazovyj adres kommunikacionnogo kanala, k nemu dobavlyaetsya 5, a zatem iz poluchennogo adresa porta schityvaetsya bajt statusa. MOV AX,40H ;ES ukazyvaet na oblast' dannyh BIOS MOV ES,AX ; MOV DX,ES:[2] ;poluchaem bazovyj adres COM2 ADD DX,5 ;dobavlyaem 5 dlya registra statusa IN AL,DX ;poluchaem bajt statusa TEST AL,10000B ;bit 5 ustanovlen? JNZ BREAK_DETECT ;esli da, to na obrabotku pereryva 7.1.5 Inicializaciya i upravlenie modemom. Imeetsya 6 linij, po kotorym modemy svyazyvayutsya s komp'yuterom (usovershenstvovannye modeli mogut imet' dobavochnye linii po in- terfejsu RS232). Vot ih nazvaniya, sokrashcheniya i funkcii: Ot komp'yutera k modemu: Data Terminal Ready (DTR) Informiruet modem, chto komp'yuter Gotovnost' komp'yutera vklyuchen i gotov k svyazi. Request To Send (RTS) Informiruet modem, chto komp'yuter Zapros na posylku ozhidaet posylki dannyh. Ot modema k komp'yuteru: Data Set Ready (DSR) Informiruet komp'yuter, chto modem Gotovnost' modema vklyuchen i gotov. Clear To Send (CTS) Informiruet komp'yuter, chto modem Gotovnost' k posylke gotov nachat' peredachu dannyh. Data Carrier Detect (DCD) Informiruet komp'yuter, chto modem Obnaruzhen nositel' dannyh svyazan s drugim modemom. Ring Indicator (RI) Informiruet komp'yuter, chto tele- Indikator zvonka fonnaya liniya, po kotoroj prisoe- dinen modem imeet zvonok. Snachala komp'yuter ustanavlivaet signal DTR, a zatem instukti- ruet modem svyazat'sya s udalennoj stanciej. Posle togo, kak modem ustanovil svyaz' on ustanavlivaet signal DSR. |tot signal informi- ruet komp'yuter, chto modem gotov k svyazi i v etot moment komp'yuter mozhet ustanovit' signal RTS. Kogda modem otvetit signalom CTS, to peredacha nachinaetsya. Dve standartnye linii, po kotorym komp'yuter upravlyaet modemom, dostupny cherez registr kontrolya modema mikroshemy UART 8250. |tot registr imeet adres porta na 4 bol'she, chem bazovyj adres ispol'- zuemogo kommunikacionnogo kanala. Vot znachenie ego bitov: Registr kontrolya modema: bity 7-5 (vsegda 0) 4 1 = vyhod UART zamknut na vhod 3 dobavochnyj pol'zovatel' naznachen na vyvod #2 2 dobavochnyj pol'zovatel' naznachen na vyvod #1 1 1 = "zapros na posylku" aktiven 0 1 = "gotovnost' komp'yutera" aktivna Obychno ustanovleny bity 0 i 1 registra kontrolya modema, a ostal'nye ravny 0. Bit 2 raven 0, za isklyucheniem sluchaev, kogda proizvoditel' modema prednaznachil ego dlya special'nogo ispol'zo- vaniya. Bit 3 ustanovlen tol'ko v sluchae, kogda ispol'zuyutsya pre- ryvaniya [7.1.8]. Nakonec, bit 4 predostavlyaet vozmozhnost' testi- rovaniya kommunikacionnyh programm bez ustanovleniya real'noj svya- zi. Vyhodnoj signal mikroshemy UART podaetsya na vhod, kak budto UART prinimaet posledovatel'nye dannye. |to svojstvo mozhno is- pol'zovat' dlya testirovaniya pravil'nosti raboty samoj mikroshemy. Ono nedostupno pri ispol'zovanii kommunikacionnyh procedur prery- vaniya 14H BIOS. CHetyre linii, po kotorym modem posylayut informaciyu komp'yuteru, upravlyayutsya registrom statusa modema. |tot registr raspolozhen po adresu porta na 6 bol'she, chem bazovyj adres ispol'zuemogo kommu- nikacionnogo adaptera. Vot znachenie ego bitov: Registr statusa modema: bit 7 1 = DCD 6 1 = RI 5 1 = DSR 4 1 = CTS 3 1 = izmenenie v DCD 2 1 = izmenenie v RI 1 1 = izmenenie v DSR 0 1 = izmenenie v CTS Programma nepreryvno proveryaet eti bity v hode kommunikacion- nyh operacij. Otmetim, chto 4 mladshih bita parallel'ny starshim chetyrem bitam. |ti bity ustanavlivayutsya v 1 tol'ko togda, kogda proishodit izmenenie v statuse sootvetstvuyushchego starshego bita s teh por, kogda registr chitalsya poslednij raz. Vse 4 mladshih bita avtomaticheski sbrasyvayutsya pri chtenii registra. Programmy lyubogo urovnya mogut pryamo chitat' etot registr. Drugoj vozmozhnost'yu yav- lyaetsya ispol'zovanie funkcii 3 preryvaniya 14H BIOS, kotoraya vozv- rashchaet registr statusa modema v AL (pri etom v AH budet soder- zhat'sya registr statusa linii). Pri vhode DX dolzhen soderzhat' nomer kommunikacionnogo kanala (0 ili 1). Bol'shinstvo modemov imeet namnogo bol'she vozmozhnostej, po sravneniyu s temi, chto otrazheny v dvuh svyazannyh s modemom regist- rah. Imeyutsya vozmozhnosti avtomaticheskoj svyazi i avtomaticheskogo otveta, kotorye kontroliruyutsya upravlyayushchej strokoj. |ta stroka posylaetsya v modem, kak budto peredayutsya obychnye dannye. Modem vydelyaet etu stroku iz dannyh po special'nomu simvolu, ispol'zue- momu tol'ko dlya ukazaniya nachala upravlyayushchej stroki. |tot simvol mozhet byt' predopredelennym (chasto ispol'zuetsya kod Esc - ASCII 27) ili vybiraemym pol'zovatelem. Modem sposoben opredelit' nas- kol'ko dlinnoj dolzhna byt' kazhdaya stroka, poetomu po okonchanii stroki on opyat' rassmatrivaet vhodyashchij potok informacii kak dan- nye. Kazhdyj modem imeet svoj nabor komand. V kachestve primera rassmotrim komandy, ispol'zuemye vnutrennim modemom PCjr: Simvol Znachenie Primenenie A otvet vhod v rezhim otveta Bn pereryv posylaet signal pereryva n*100 ms Cn otschet n otschityvaet n zvonkov do otveta Dn...n vyzov posylaet stroku chisel n...n Fn format ustanavlivaet protokol svyazi H razryv prekrashchaet svyaz' s mashinoj I inicializaciya inicializiruet modem LR dolgij otvet menyaet ispol'zuemuyu kodovuyu sistemu M rezhim modem beret simvoly kak dannye Nn novyj menyaet komandnyj simvol na n O originate vhod v rezhim originate P pick-up vhod v rezhim golosa Q zapros zapros statusa modema R povtor povtorit' komandu svyazi Sn skorost' vybor skorosti obmena Tn...n prozrachnost' ignorirovat' upravlyayushchie stroki v sleduyushchih n...n bajtah V golos perevesti modem v rezhim golosa W ozhidanie nichego ne delat' do sled. komandy X peredat' peredat' tona vyzova Z test provodit diagnostiku oborudovaniya V otvet na komandu zaprosa modem posylaet informaciyu o svoem sostoyanii, posylaya ee v UART kak obychnye dannye. Pomimo prochej informacii, mozhet soobshchat'sya, chto liniya zanyata. CHt