1. Ócòaíoâêa è ÷òeíèe òaéìepa.
Bce IBM PC ècïoëüçóþò ìèêpocxeìó òaéìepa 8253 (èëè 8254) äëÿ
coãëacoâaíèÿ èìïóëücoâ oò ìèêpocxeìû cècòeìíûx ÷acoâ. ×ècëo öèêëoâ
cècòeìíûx ÷acoâ ïpeoápaçóeòcÿ â oäèí èìïóëüc, a ïocëeäoâa- òeëüíocòü
ýòèx èìïóëücoâ ïoäc÷èòûâaeòcÿ äëÿ oïpeäeëeíèÿ âpeìeíè, èëè oíè ìoãóò
áûòü ïocëaíû ía ãpoìêoãoâopèòeëü êoìïüþòepa äëÿ ãeíepaöèè çâóêa
oïpeäeëeííoé ÷acòoòû. Mèêpocxeìa 8253 èìeeò òpè èäeíòè÷íûx íeçaâècèìûx
êaíaëa, êaæäûé èç êoòopûx ìoæeò ïpoãpaììèpoâaòücÿ.
Mèêpocxeìa 8253 paáoòaeò íeçaâècèìo oò ïpoöeccopa. Ïpoöeccop
ïpoãpaììèpóeò ìèêpocxeìó è çaòeì oápaùaeòcÿ ê äpóãèì äeëaì. Taêèì
oápaçoì 8253 äeécòâóeò êaê ÷acû peaëüíoão âpeìeíè - oía c÷èòaeò câoè
èìïóëücû íeçaâècèìo oò òoão, ÷òo ïpoècxoäèò â êoìïüþòepe. Oäíaêo,
ìaêcèìaëüíûé ïpoãpaììèpóeìûé èíòepâaë cocòaâëÿeò ïpèáëèçèòeëüío 1/12
ceêóíäû. Äëÿ ïoäc÷eòa èíòepâaëoâ âpeìeíè â ÷acû è ìèíóòû íóæíû êaêèe-òo
äpóãèe cpeäcòâa. Èìeíío ïo ýòoé ïpè÷èíe èìïóëücû oò íóëeâoão êaíaëa
ìèêpocxeìû òaéìepa íaêaïëèâaþòcÿ â ïepeìeííoé, íaxoäÿùeécÿ â oáëacòè
äaííûx BIOS. Ýòoò ïpoöecc ïoêa- çaí ía pèc. 2-1. Ýòo íaêoïëeíèe oáû÷ío
íaçûâaeòcÿ ïoäc÷eòoì âpe- ìeíè cóòoê. 18.2 paça â ceêóíäó âûxoä êaíaëa
0 oápaáaòûâaeòcÿ aïïapaòíûì ïpepûâaíèeì (ïpepûâaíèeì òaéìepa), êoòopoe
íeíaäoëão ocòaíaâëèâaeò ïpoöeccop è óâeëè÷èâaeò c÷eò÷èê âpeìeíè cóòoê.
×ècëo 0 cooòâeòcòâóeò ïoëío÷è 12:00; êoãäa c÷eò÷èê äocòèãaeò çía÷eíèÿ
ýêâèâaëeíòíoão 24 ÷acaì, oí cápacûâaeòcÿ ía íoëü. Äpóãoe âpeìÿ â
òe÷eíèe cóòoê ëeãêo oïpeäeëÿeòcÿ äeëeíèeì ïoêaçaòeëÿ c÷eò÷èêa ía 18.2
äëÿ êaæäoé ceêóíäû. C÷eò÷èê âpeìeíè cóòoê èc- ïoëüçóeòcÿ â áoëüøèícòâe
oïepaöèé, câÿçaííûx co âpeìeíeì.
2. Ïpoãpaììèpoâaíèe ìèêpocxeìû òaéìepa 8253/8254.
Kaæäûé èç òpex êaíaëoâ ìèêpocxeìû òaéìepa 8253 (8254 äëÿ AT) cocòoèò
èç òpex peãècòpoâ. Äocòóï ê êaæäoé ãpóïïe èç òpex peãècòpoâ
ocóùecòâëÿeòcÿ ÷epeç oäèí ïopò; íoìepa ïopòoâ oò 40H äo 42H
cooòâeòcòâóþò êaíaëaì 0 - 2. Ïopò câÿçaí c 8-áèòíûì peãècòpoì
ââoäa/âûâoäa, êoòopûé ïocûëaeò è ïpèíèìaeò äaííûe äëÿ ýòoão êaía- ëa.
Koãäa êaíaë çaïpoãpaììèpoâaí, òo ÷epeç ýòoò ïopò ïocûëaeòcÿ äâóxáaéòíoe
çía÷eíèe, ìëaäøèé áaéò cía÷aëa. Ýòo ÷ècëo ïepeäaeòcÿ â 16-áèòíûé
peãècòp çaäâèæêè (latch register), êoòopûé xpaíèò ýòo ÷ècëo è èç
êoòopoão êoïèÿ ïoìeùaeòcÿ â 16-áèòíûé peãècòp c÷eò÷èêa. B peãècòpe
c÷eò÷èêa ÷ècëo óìeíüøaeòcÿ ía eäèíèöó êaæäûé paç, êoãäa èìïóëüc oò
cècòeìíûx ÷acoâ ïpoïócêaeòcÿ ÷epeç êaíaë. Koãäa çía÷eíèe ýòoão ÷ècëa
äocòèãaeò íóëÿ, òo êaíaë âûäaeò âûxoäíoé cèãíaë è çaòeì íoâaÿ êoïèÿ
coäepæèìoão peãècòpa çaäâèæêè ïepeäâèãaeòcÿ â peãècòp c÷eò÷èêa, ïocëe
÷eão ïpoöecc ïoâòopÿeòcÿ. ×eì ìeíüøe ÷ècëo â peãècòpe c÷eò÷èêa, òeì
áûcòpee pèòì. Bce òpè êaía- ëa âceãäa aêòèâíû: ïpoöeccop íe âêëþ÷aeò è
íe âûêëþ÷aeò èx. Teêóùee çía÷eíèe ëþáoão èç peãècòpoâ c÷eò÷èêa ìoæeò
áûòü ïpo÷èòaío â ëþáoé ìoìeíò âpeìeíè, íe âëèÿÿ ía c÷eò.
Kaæäûé êaíaë èìeeò äâe âxoäíûe è oäíó âûxoäíóþ ëèíèè. Bûxoäíaÿ ëèíèÿ
âûâoäèò èìïóëücû, âoçíèêaþùèe â peçóëüòaòe ïoäc÷eòa. Haçía- ÷eíèe ýòèx
cèãíaëoâ âapüèpóeòcÿ â çaâècèìocòè oò òèïa IBM PC:
Kaíaë 0 ècïoëüçóeòcÿ cècòeìíûìè ÷acaìè âpeìeíè cóòoê. Oí ócòa-
íaâëèâaeòcÿ BIOS ïpè còapòe òaêèì oápaçoì, ÷òo âûäaeò èìïóëücû ïpèáëè-
çèòeëüío 18.2 paça â ceêóíäó. 4-áaéòíûé c÷eò÷èê ýòèx èìïóëücoâ xpaíèòcÿ
â ïaìÿòè ïo aäpecó 0040:006C (ìëaäøèé áaéò xpa- íèòcÿ ïepâûì). Kaæäûé
èìïóëüc èíèöèèpóeò ïpepûâaíèe òaéìepa (ío- ìep 8) è èìeíío ýòo
ïpepûâaíèe óâeëè÷èâaeò ïoêaçaíèe c÷eò÷èêa. Ýòo aïïapaòíoe ïpepûâaíèe,
ïoýòoìó oío oápaáaòûâaeòcÿ âceãäa, íeçaâècèìo oò òoão, ÷eì çaíÿò
- 2 -
ïpoöeccop, ecëè òoëüêo paçpeøeíû aïïapaòíûe ïpepûâaíèÿ (cì. oácóæäeíèe
â [1.2.2]). Bûxoäíaÿ ëèíèÿ ècïoëüçóeòcÿ òaêæe äëÿ cèíxpoíèçaöèè
íeêoòopûx äècêoâûx oïepaöèé, ïoýòoìó ecëè Bû èçìeíèëè ee çía÷eíèe, òo
Baì íeoáxoäèìo âoccòaío- âèòü ïepâoía÷aëüíoe çía÷eíèe ïepeä oápaùeíèeì
ê äècêó.
Kaíaë 1 óïpaâëÿeò oáíoâëeíèeì ïaìÿòè ïoýòoìó eão ëó÷øe íe òpoãaòü.
Bûxoäíaÿ ëèíèÿ ýòoão êaíaëacâÿçaía c ìèêpocxeìoé ïpÿìoão äocòóïa ê
ïaìÿòè è ee èìïóëüc çacòaâëÿeò ìèêpocxeìó DMA oáíoâèòü âcþ ïaìÿòü.
Kaíaë 1 ècïoëüçóeòcÿ äëÿ ïoäc÷eòa çaáëoêèpoâaííûx èìïóëücoâ ÷acoâ
âpeìeíè cóòoê, c òeì ÷òoáû ìoæío áûëo oáíoâèòü çía÷eíèe c÷eò÷èêa ïocëe
çaâepøeíèÿ äècêoâûx oïepaöèé.
Kaíaë 2 câÿçaí c ãpoìêoãoâopèòeëeì êoìïüþòepa è oí ïpoèçâoäèò
ïpocòûe ïpÿìoóãoëüíûe èìïóëücû äëÿ ãeíepaöèè çâóêa. Ïpoãpaììècòû èìeþò
áoëüøèé êoíòpoëü íaä âòopûì êaíaëoì, ÷eì íaä ocòaëüíûìè. Ïpocòûe çâóêè
ìoãóò ãeíepèpoâaòücÿ oäíoâpeìeíío c äpóãèìè ïpoãpaììíûìè oïepaöèÿìè, a
áoëee cëoæíûe çâóêoâûe ýôôeêòû ìoãóò áûòü äocòèãíóòû ça c÷eò
ècïoëüçoâaíèÿ ïpoöeccopa. Kaíaë 2 ìoæeò áûòü oòcoeäèíeí oò
ãpoìêoãoâopèòeëÿ è ècïoëüçoâaòücÿ äëÿ cèíxpoíèça- öèè. Haêoíeö,
âûxoäíaÿ ëèíèÿ êaíaëa 2 câÿçaía c äèíaìèêoì êoìïüþòepa. Oäíaêo äèíaìèê
íe áóäeò ãeíepèpoâaòü çâóê äo òex ïop ïoêa íe cäeëaíû oïpeäeëeííûe
ócòaíoâêè ìèêpocxeìû èíòepôeéca c ïepèôe- pèeé 8255.
Äâe âxoäíûe ëèíèè äëÿ êaæäoão êaíaëa cocòoÿò èç ëèíèè ÷acoâ, êoòopaÿ
ïepeäaeò cèãíaë oò ìèêpocxeìû cècòeìíûx ÷acoâ è ëèíèè, íaçûâaeìoé
âopoòaìè (gate), êoòopaÿ âêëþ÷aeò è âûêëþ÷aeò cèãíaë oò ÷acoâ. Bopoòa
âceãäa oòêpûòû äëÿ cèãíaëoâ ÷acoâ ïo êaíaëaì 0 è 1. Ho oíè ìoãóò áûòü
çaêpûòûìè äëÿ êaíaëa 2, ÷òo ïoçâoëÿeò íeêo- òopûe cïeöèaëüíûe ìaíèïóëÿ-
öèè co çâóêoì. Bopoòa çaêpûâaþòcÿ ócòa- íoâêoé ìëaäøeão áèòa ïopòa c
aäpecoì 61H, êoòopûé ÿâëÿeòcÿ pe- ãècòpoì ìèêpocxeìû 8255; cápoc ýòoão
áèòa cíoâa oòêpûâaeò âopoòa. Ýòa ìèêpocxeìa oácóæäaeòcÿ â [1.1.1].
Oòìeòèì ÷òo - êaê è âûxoä êaíaëa 2 - áèò 1 ïopòa 61H câÿçaí c äèíaìèêoì
è òaêæe ìoæeò èc- ïoüçoâaòücÿ äëÿ ãeíepaöèè çâóêa. Ha pèc. 2-2
ïpèâeäeía äèaãpaììa ìèêpocxeìû òaéìepa 8253.
Mèêpocxeìa òaéìepa ìoæeò ècïoëüçoâaòücÿ íeïocpeäcòâeíío äëÿ
âpeìeííûx oïepaöèé, ío ýòo peäêo áûâaeò óäoáíûì. Bâoä c ÷acoâ
ïpoèçâoäèòcÿ 1.19318 ìèëëèoíoâ paç â ceêóíäó (äaæe ía AT, ãäe cècòeìíûe
÷acû èäóò áûcòpee, ìèêpocxeìa òaéìepa ïoëó÷aeò cèãíaë c ÷acòoòoé 1.19
Mãö). Ïocêoëüêó ìaêcèìaëüíoe ÷ècëo, êoòopoe ìoæeò xpaíèòücÿ â 16 áèòax,
paâío 65535 è ïocêoëüêó ýòo ÷ècëo äeëèòcÿ ía ÷acòoòó èìïóëücoâ oò
÷acoâ, paâíóþ 18.2, òo ìaêcèìaëüíûé âoçìoæíûé èíòepâaë ìeæäó èìïóëücaìè
paâeí ïpèáëèçèòeëüío 1/12 ceêóíäû. Ïoýòoìó áoëüøèícòâo âpeìeííûx
oïepaöèé ècïoëüçóþò c÷eò÷èê âpeìeíè cóòoê BIOS. Äëÿ ïoäc÷eòa âpeìeíè
÷èòaeòcÿ çía÷eíèe âpeìe- íè cóòoê è cpaâíèâaeòcÿ c íeêoòopûì paíee
çaïoìíeííûì çía÷eíèeì äëÿ oïpeäeëeíèÿ ÷ècëa èìïóëücoâ, ïpoøeäøèx c òoão
ìoìeíòa. Cïe- öèaëüíûé cïocoá ïoçâoëÿeò ècïoüçoâaòü c÷eò÷èê âpeìeíè
cóòoê äëÿ oïepaöèé â peaëüíoì âpeìeíè.
8253 ïpeäocòaâëÿeò paçpaáoò÷èêaì oáopóäoâaíèÿ 6 peæèìoâ paáoòû äëÿ
êaæäoão êaíaëa. Ïpoãpaììècòû oáû÷ío oãpaíè÷èâaþòcÿ òpeòüèì peæèìoì, êaê
äëÿ êaíaëa 0 ïpè cèíxpoíèçaöèè, òaê è äëÿ êaíaëa 2 äëÿ cèíxpoíèçaöèè
èëè ãeíepaöèè çâóêa. B ýòoì peæèìe, êaê òoëüêo peãècòp çaäâèæêè
ïoëó÷aeò ÷ècëo, oí íeìeäëeíío çaãpóæaeò êoïèþ â peãècòp c÷eò÷èêa. Koãäa
çía÷eíèe â c÷eò÷èêe äocòèãaeò íóëÿ pe- ãècòp çaäâèæêè ìãíoâeíío
ïepeçaãpóæaeò c÷eò÷èê è ò.ä. B òe÷eíèe ïoëoâèíû oòc÷eòa âûxoäíaÿ ëèíèÿ
âêëþ÷eía, a â òe÷eíèe ïoëoâèíû - âûêëþ÷eía. B peçóëüòaòe ïoëó÷aþòcÿ
ïpÿìoóãoëüíûe âoëíû, êoòopûe oäèíaêoâo ïpèãoäíû êaê äëÿ ãeíepaöèè
çâóêa, òaê è äëÿ ïoäc÷eòa.
8-áèòíûé êoìaíäíûé peãècòp óïpaâëÿeò cïocoáoì çaãpóçêè ÷èceë â
êaíaë. Aäpec ïopòa äëÿ ýòoão peãècòpa paâeí 43H. Koìaíäíoìó pe- ãècòpó
ïepeäaeòcÿ áaéò, êoòopûé ãoâopèò êaêoé êaíaë ïpoãpaììèpo- âaòü, â êaêoì
peæèìe, a òaêæe oäèí èëè oáa áaéòa peãècòpa çaäâèæêè äoëæíû áûòü
- 3 -
ïepeäaíû. Oí ïoêaçûâaeò òaêæe áóäeò ëè ÷ècëo â äâoè÷íoé èëè BCD
(äâoè÷íoêoäèpoâaííoé äecÿòè÷íoé) ôopìe. Çía÷eíèe áèòoâ ýòoão peãècòpa
òaêoâo:
áèò 0 ecëè 0, äâoè÷íûe äaííûe, èía÷e BCD
3-1 íoìep peæèìa, 1 - 5 (000 - 101)
5-4 òèï oïepaöèè:
00 = ïepeäaòü çía÷eíèe c÷eò÷èêa â çaäâèæêó
01 = ÷èòaòü/ïècaòü òoëüêo còapøèé áaéò
10 = ÷èòaòü/ïècaòü òoëüêo ìëaäøèé áaéò
11 = ÷èòaòü/ïècaòü còapøèé áaéò, ïoòoì ìëaäøèé
7-6 íoìep ïpoãpaììèpóeìoão êaíaëa, 0 - 2 (00 -10)
Äëÿ ïpoãpaììèpoâaíèÿ ìèêpocxeìû 8253 íaäo âûïoëíèòü òpè ocíoâíûx
øaãa. Ïocëe òoão êaê òpeòèé øaã çaâepøeí, çaïpoãpaììèpoâaííûé êaíaë
íeìeäëeíío ía÷èíaeò ôóíêöèoíèpoâaòü ïo íoâoé ïpoãpaììe.
1. Ïocëaòü â êoìaíäíûé peãècòp (43H) áaéò, ïpeäcòaâëÿþùèé öeïo÷êó
áèòoâ, êoòopûe âûáèpaþò êaíaë, còaòóc ÷òeíèÿ/çaïècè, peæèì oïepaöèè è
ôopìó ïpeäcòaâëeíèÿ ÷èceë.
2. Äëÿ êaíaëa 2 íaäo paçpeøèòü cèãíaë oò ÷acoâ, ócòaíoâèâ â 1 áèò 0
ïopòa c aäpecoì 61H. (Koãäa áèò 1 ýòoão peãècòpa ócòaíoâëeí â 1, òo
êaíaë 2 óïpaâëÿeò äèíaìèêoì. Cápocüòe eão â 0 äëÿ oïepa- öèé
cèíxpoíèçaöèè.)
3. Bû÷ècëèòe çía÷eíèe c÷eò÷èêa oò 0 äo 65535, ïoìecòèòe eão â AX, è
ïoøëèòe cía÷aëa ìëaäøèé, a çaòeì còapøèé áaéò â peãècòp ââoäa/âûâoäa
êaíaëa (40H - 42H).
Kaíaëû ìèêpocxeìû 8253 paáoòaþò âceãäa. Ïo ýòoé ïpè÷èíe ïpoãpaììû
âceãäa äoëæíû âoccòaíaâëèâaòü ía÷aëüíûe ócòaíoâêè peãècòpoâ 8253 ïepeä
çaâepøeíèeì. B ÷acòíocòè, ecëè ïpè çaâepøeíèè ïpoãpaììû ãeíepèpóeòcÿ
çâóê, òo oí áóäeò ïpoäoëæaòücÿ äaæe ïocëe òoão, êaê MS DOS ïoëó÷èò
óïpaâëeíèe è çaãpóçèò äpóãóþ ïpoãpaììó. Èìeéòe ýòo ââèäó ïpè íaïècaíèè
ïpoöeäópû âûxoäa ïo Ctrl-Break [3.2.8].
Hèçêèé ópoâeíü.
B äaííoì ïpèìepe êaíaë 0 ïpoãpaììèpóeòcÿ ía äpóãoe çía÷eíèe, ÷eì
ócòaíoâëeío BIOS ïpè còapòe. Ïpè÷èía èçìeíeíèÿ ócòaíoâêè cocòoèò â òoì,
÷òoáû èçìeíèòü èíòepâaë èçìeíeíèÿ c÷eò÷èêa âpeìeíè cóòoê ía áoëüøóþ
âeëè÷èíó, ÷eì 18.2 paça â ceêóíäó. ×acòoòa oáíoâëeíèÿ c÷eò÷èêa
èçìeíÿeòcÿ, cêaæeì, ía 1000 paç â ceêóíäó, c öeëüþ ïpoâeäeíèÿ òo÷íûx
ëaáopaòopíûx èçìepeíèé. Çía÷eíèe çaäâèæêè äoëæío áûòü 1193 (1193180
òaêòoâ â ceêóíäó / 10000). Kaê ÷èòaòü òeêóùee çía÷eíèe peãècòpa
c÷eò÷èêa cì. â ïpèìepe [2.1.8]. Ïepeä äècêoâûìè oïepaöèÿìè opèãèíaëüíoe
çía÷eíèe çaäâèæêè äoëæío áûòü âoccòaíoâëeío, ïocêoëüêó êaíaë 0 ècïoëü-
çóeòcÿ äëÿ cèíxpoíèçaöèè äècêoâûx oïepaöèé. Maêcèìaëüío âoçìoæíoe
çía÷eíèe - 65535 òaêòoâ ÷acoâ ìeæäó èìïóëücaìè oò êaíaëa - ìoæeò áûòü
äocòèãíóòo çacûëêoé 0 â peãècòp çaäâèæêè (0 íeìeäëeíío ïpeâpaùaeòcÿ â
65535 ïpè óìeíüøeíèè ía eäèíèöó.
;---ócòaíoâêa peãècòpoâ ââoäa/âûâoäa
COMMAND_REG EQU 43H ;aäpec êoìaíäíoão peãècòpa
CHANNEL_0 EQU 40H ;aäpec êaíaëa 0
MOV AL,00110110B ;ócòaíoâêa áèòoâ äëÿ êaíaëa 2
OUT COMMAND_REG,AL ;çacûëêa â êoìaíäíûé peãècòp
;---ïocûëêa c÷eò÷èêa â çaäâèæêó
MOV AX,1193 ;c÷eò÷èê äëÿ 100 èìïóëücoâ/ceê.
OUT CHANNEL_2,AL ;ïocûëêa ìëaäøeão áaéòa
MOV AL,AH ;ãoòoâèì äëÿ ïocûëêè còapøèé áaéò
OUT CHANNEL_2,AL ;ïocûëêa còapøeão áaéòa
3. Ócòaíoâêa/÷òeíèe âpeìeíè.
- 4 -
Ïpè còapòe MS DOS çaïpaøèâaeò ó ïoëüçoâaòeëÿ òeêóùee âpeìÿ.
Bâeäeííoe çía÷eíèe ïoìeùaeòcÿ â 4 áaéòa, xpaíÿùèe c÷eò÷èê âpeìeíè cóòoê
(ía÷èíaÿ c 0040:006C, ìëaäøèé áaéò xpaíèòcÿ ïepâûì). Ho cía÷aëa oío
ïpeoápaçóeòcÿ â ôopìó, â êoòopoé ïoäc÷èòûâaeòcÿ âpeìÿ cóòoê, ò.e. âpeìÿ
ïpeoápaçóeòcÿ â ÷ècëo âoceìíaäöaòûx äoëeé ce- êóíäû, ïpoøeäøèx c
ïoëío÷è. Ýòo ÷ècëo ïocòoÿíío oáíoâëÿeòcÿ 18.2 paç â ceêóíäó ïpepûâaíèeì
òaéìepa. Koãäa ïoÿâëÿeòcÿ o÷epeäíoé çaïpoc ía âpeìÿ, òo òeêóùee
çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê ïpeoápaçóeòcÿ oápaòío â ïpèâû÷íûé
ôopìaò ÷acû-ìèíóòû-ceêóíäû. Ecëè ïpè còapòe íe áûëo ââeäeío çía÷eíèÿ,
òo c÷eò÷èê ócòaíaâëèâaeòcÿ â íoëü, êaê áóäòo ceé÷ac ïoëío÷ü. Koìïüþòepû
cíaáæeííûe ìèêpocxeìoé êaëeíäapÿ-÷acoâ ìoãóò aâòoìaòè÷ecêè
ócòaíaâëèâaòü c÷eò÷èê âpeìeíè cóòoê.
Cpeäíèé ópoâeíü.
MS DOS ïpeäocòaâëÿeò ïpepûâaíèÿ äëÿ ÷òeíèÿ è ócòaíoâêè âpeìe- íè,
ïpoèçâoäÿ íeoáxoäèìûe ïpeoápaçoâaíèÿ ìeæäó çía÷eíèeì c÷eò÷èêa âpeìeíè
cóòoê è ÷acaìè-ìèíóòaìè-ceêóíäaìè. Bpeìÿ âûäaeòcÿ c òo÷íocòüþ äo 1/100
ceêóíäû, ío ïocêoëüêó c÷eò÷èê âpeìeíè cóòoê oáíoâëÿeòcÿ c ÷acòoòoé â
ïÿòü paç ìeíüøeé, òo ïoêaçaíèÿ coòûx ce- êóíä o÷eíü ïpèáëèæeííûe. Ôóíê-
öèÿ 2CH ïpepûâaíèÿ 21H âûäaeò âpeìÿ, a ôóíêöèÿ 2DH - ócòaíaâëèâaeò eão.
B oáoèx cëó÷aÿx CH coäepæèò ÷acû (oò 0 äo 23, ãäe 0 cooòâeòcòâóeò
ïoëío÷è), CL - ìèíóòû (oò 0 äo 59), DH - ceêóíäû (oò 0 äo 59) è DL -
coòûe äoëè ceêóíä (oò 0 äo 99).
Kpoìe òoão ïpè ïoëó÷eíèè âpeìeíè ôóíêöèeé 2CH, AL coäepæèò íoìep äíÿ
íeäeëè (0 = âocêpeceíüe). Çía÷eíèe äíÿ áóäeò âepíûì òoëüêo ecëè áûëa
ócòaíoâëeía äaòa. DOS âû÷ècëÿeò íoìep äíÿ íeäeëè ïo äaòe. Oòìeòèì
òaêæe, ÷òo ïpè ócòaíoâêe âpeìeíè ôóíêöèeé 2DH, AL oòìe÷aeò ïpaâèëüíocòü
ââeäeííoão çía÷eíèÿ âpeìeíè (0 = ïpa- âèëüío, FF = íeïpaâèëüío).
;---ócòaíoâêa âpeìeíè
MOV CH,HOURS ;ââoäèì çía÷eíèÿ âpeìeíè
MOV CL,MINUTES ;
MOV DH,SECONDS ;
MOV DL,HUNDREDTHS ;
MOV AH,2DH ;íoìep ôóíêöèè ócòaíoâêè âpeìeíè
INT 21H ;ócòaíaâëèâaeì âpeìÿ
CMP AH,0FFH ;ïpoâepÿeì ïpaâèëüíocòü çía÷eíèÿ
JE ERROR ;ïepexoä ía oápaáoòêó oøèáêè
;---ïoëó÷eíèe âpeìeíè
MOV AH,2CH ;íoìep ôóíêöèè ïoëó÷eíèÿ âpeìeíè
INT 21H ;ïoëó÷aeì âpeìÿ
MOV DAY_OF_WEEK,AH ;ïoëó÷aeì äeíü íeäeëè èç AH
Hèçêèé ópoâeíü.
Ecëè Bû èçìeíèëè cêopocòü èìïóëücoâ êaíaëa 1 ìèêpocxeìû 8253 äëÿ
cïeöèaëüíûx ïpèëoæeíèé, òo Baì íeoáxoäèìo íaïècaòü câoþ ïpo- öeäópó
äeêoäèpoâaíèÿ ïoêaçaíèé c÷eò÷èêa âpeìeíè cóòoê. BIOS ïoçâoëÿeò äèaïaçoí
çía÷eíèé c÷eò÷èêa oò 0 äo 1.573 ìèëëèoía è ýòo ìoæeò áûòü èçìeíeío
òoëüêo ïóòeì èçìeíeíèÿ ïpepûâaíèÿ òaéìepa. Ïoýòoìó ÷acû, peaëüío
ïoêaçûâaþùèe coòûe äoëè ceêóíäû, íe ìoãóò paáoòaòü 24 ÷aca áeç
cïeöèaëüío íaïècaííoé ïpoãpaììû. Oòìeòèì òaêæe, ÷òo áaéò 0040:0070
ócòaíaâëèâaeòcÿ â íoëü ïpè còapòe, a çaòeì óâeëè÷èâaeòcÿ ía 1 (íe
áoëüøe) ïo xoäó ÷acoâ.
4. Ócòaíoâêa/÷òeíèe äaòû.
- 5 -
Ïpè âêëþ÷eíèè êoìïüþòepa MS DOS çaïpaøèâaeò ó ïoëüçoâaòeëÿ òeêóùèe
äaòó è âpeìÿ. Bpeìÿ çaïècûâaeòcÿ â oáëacòè äaííûx BIOS. Äaòa æe
coäepæèòcÿ â ïepeìeííoé â COMMAND.COM. Oía xpaíèòcÿ â ôopìaòe òpex
ïocëeäoâaòeëüíûx áaéòoâ, êoòopûe coäepæaò cooòâeòcòâeíío äeíü ìecÿöa,
íoìep ìecÿöa è íoìep ãoäa, ía÷èíaÿ c 0, ãäe 0 cooòâeòcòâóeò 1980 ãoäó.
B oòëè÷èè oò c÷eò÷èêa âpeìeíè cóòoê, aäpec äaòû â ïaìÿòè ìeíÿeòcÿ c
èçìeíeíèeì âepcèè DOS è ïoëoæeíèeì â ïaìÿòè COMMAND.COM. Ïo ýòoé
ïpè÷èíe äëÿ ïoëó÷eíèÿ äaòû âceãäa íaäo ècïoëüçoâaòü ãoòoâûe óòèëèòû
Áeécèêa èëè MS DOS, a íe oápa- ùaòücÿ ê ýòoé ïepeìeííoé íaïpÿìóþ.
Maøèíû, oáopóäoâaííûe ìèêpocxeìoé êaëeíäapÿ-÷acoâ, aâòoìaòè-
÷ecêè ócòaíaâëèâaþò âpeìÿ è äaòó c ïoìoùüþ cïeöèaëüíoé ïpoãpaììû
(oáû÷ío çaïócêaeìoé ïpè còapòe ÷epeç ôaéë AUTOEXEC.BAT). Kaê
ïoëó÷èòü äocòóï ê ìèêpocxeìe êaëeíäapÿ-÷acoâ, cì. [2.1.4]. Oòìe-
òèì òaêæe, ÷òo êoãäa c÷eò÷èê âpeìeíè cóòoê BIOS ïepexoäèò ÷epeç
oòìeòêó 24 ÷acoâ, MS DOS ìeíÿeò äaòó.
Cpeäíèé ópoâeíü.
Ôóíêöèè 2AH è 2BH ïpepûâaíèÿ 21H ïoëó÷aþò è ócòaíaâëèâaþò äaòó. Äëÿ
ïoëó÷eíèÿ äaòû ïoìecòèòe â AH 2AH è âûïoëíèòe ïpepûâa- íèe. Ïpè
âoçâpaòe CX áóäeò coäepæaòü ãoä â âèäe ÷ècëa oò 0 äo 119, ÷òo
cooòâeòcòâóeò äèaïaçoíó ëeò 1980 - 2099 (ìoæío cêaçaòü ÷òo âûäaeòcÿ
cìeùeíèe oòíocèòeëüío 1980 ã.). DH coäepæèò íoìep ìecÿöa, a DL - äeíü.
MOV AH,2AH ;íoìep ôóíêöèè ïoëó÷eíèÿ äaòû
INT 21H ;ïoëó÷eíèe äaòû
MOV DAY,DL ;äeíü èç DL
MOV MONTH,DH ;ìecÿö èç DH
ADD CX,1980 ;äoáaâëÿeì áaçó ê ãoäó
MOV YEAR,CX ;ïoëó÷aeì íoìep ãoäa
Äëÿ ócòaíoâêè äaòû ïoìecòèòe äeíü, ìecÿö è ãoä â òe æe peãècò-
pû è âûïoëíèòe ôóíêöèþ 2BH. Ecëè çía÷eíèÿ, óêaçaííûe äëÿ äaòû
íeâepíû, òo â AL áóäeò âoçâpaùeío FF, â ïpoòèâíoì cëó÷ae - 0.
MOV DL,DAY ;ïoìeùaeì äeíü â DL
MOV DH,MONTH ;ïoìeùaeì ìecÿö â DH
MOV CX,YEAR ;ïoìeùaeì ãoä â CX
SUB CX,1980 ;áepeì cìeùeíèe oòíocèòeëüío 1980
MOV AH,2BH ;íoìep ôóíêöèè ócòaíoâêè äaòû
INT 21H ;ócòaíoâêa äaòû
CMP AH,0FFH ;ïpoâepÿeì ócïeøíocòü oïepaöèè
JE ERROR ;íeâepíaÿ äaòa, èäeì ía oápaáoòêó oøèáêè
5. Ócòaíoâêa/÷òeíèe ÷acoâ peaëüíoão âpeìeíè.
×acû peaëüíoão âpeìeíè èìeþò câoé coácòâeííûé ïpoöeccop, êoòo- pûé
ìoæeò ïoäc÷èòûâaòü âpeìÿ íe âëèÿÿ ía äpóãèe êoìïüþòepíûe oïe- paöèè.
Oíè èìeþò òaêæe íeçaâècèìûé ècòo÷íèê ïèòaíèÿ, ècïoëüçóeìûé êoãäa êoìïü-
þòep âûêëþ÷eí. Ïpoãpaììío ìoæío êaê ÷èòaòü, òaê è ócòaíaâëèâaòü ÷acû
peëüíoão âpeìeíè. Oáû÷ío èìeeòcÿ äoïoëíèòeëüíoe ïpoãpaììíoe
oáecïe÷eíèe, êoòopoe ócòaíaâëèâaeò c÷eò÷èê âpeìe- íè cóòoê BIOS è
ïepeìeííóþ äaòû DOS òaêèì oápaçoì, ÷òoáû oíè cooòâeòcòâoâaëè òeêóùèì
ïoêaçaíèÿì ÷acoâ peaëüíoão âpeìeíè. Ho ìoæío ïpoãpaììío ïpoâepèòü
cooòâeòcòâèe ìeæäó íèìè è ïpè oáíapóæeíèè paçíoãëacèé ïpèíÿòü íeoáxoäè-
ìûe ìepû.
Paçëè÷íûe ócòaíoâêè âpeìeíè è äaòû ocóùecòâëÿþòcÿ ÷epeç íaáop
aäpecoâ ïopòoâ. Míoãèe ìíoãoôóíêöèoíaëüíûe ïëaòû pacøèpeíèÿ äëÿ IBM PC
èìeþò ÷acû peaëüíoão âpeìeíè, ío, ê coæaëeíèþ, íeò còaíäapòíoé
- 6 -
ìèêpocxeìû è äèaïaçoía aäpecoâ ïopòoâ. AT oáopóäóeòcÿ ÷acaìè peaëüíoão
âpeìeíè, ocíoâaííûìè ía ìèêpocxeìe MC146818 ôèpìû Motorola, êoòopûe
ècïoëüçóþò òe æe peãècòpû, ÷òo è ìèêpoc- xeìa, coäepæaùaÿ äaííûe o
êoíôèãópaöèè cècòeìû. Äocòóï ê ýòèì peãècòpaì ìoæío ïoëó÷èòü, ïocëaâ
cía÷aëa íoìep òpeáóeìoão peãècòpa â ïopò 70H, a çaòeì ïpo÷èòaâ çía÷eíèe
peãècòpa ÷epeç ïopò 71H. Peãècòpû, câÿçaííûe c ÷acaìè, cëeäóþùèe:
Hoìep peãècòpa Ôóíêöèÿ
00H Ceêóíäû
01H Ceêóíäíaÿ òpeâoãa
02H Mèíóòû
03H Mèíóòíaÿ òpeâoãa
04H ×acû
05H ×acoâaÿ òpeâoãa
06H Äeíü íeäeëè
07H Äeíü ìecÿöa
08H Mecÿö
09H Ãoä
0AH peãècòp còaòóca A
0BH peãècòp còaòóca B
0CH peãècòp còaòóca C
0DH peãècòp còaòóca D
Áèòû ÷eòûpex còaòócíûx peãècòpoâ âûïoëíÿþò paçëè÷íûe ôóíêöèè, èç
êoòopûx èíòepec äëÿ ïpoãpaììècòoâ ìoãóò ïpeäcòaâëÿòü cëeäóþùèe:
Peãècòp A: áèò 7 1 = èäeò ìoäèôèêaöèÿ âpeìeíè (íaäo æäaòü
çía÷eíèÿ 0, ÷òoáû ÷èòaòü)
Peãècòp B: áèò 6 1 = paçpeøeío ïepèoäè÷ecêoe ïpepûâaíèe
áèò 5 1 = paçpeøeío ïpepûâaíèe òpeâoãè
áèò 4 1 = paçpeøeío ïpepûâaíèe êoíöa ìoäèôèêaöèè
áèò 1 1 = ÷acû c÷èòaþòcÿ äo 24, 0 = äo 12
áèò 0 1 = paçpeøeío çaïoìèíaíèe âpeìeíè cóòoê
×acû peaëüíoão âpeìeíè ía AT ìoãóò âûçûâaòü aïïapaòíoe ïpepûâaíèe
IRQ8. Ïpoãpaììa ìoæeò ócòaíoâèòü âeêòop ýòoão ïpepûâaíèÿ ía ëþáóþ
ïpoöeäópó, êoòopóþ òpeáóeòcÿ âûïoëíèòü â oïpeäeëeííoe âpeìÿ Ïpepûâaíèe
ìoæeò âûçûâaòücÿ oäíèì èç òpex cïocoáoâ, êaæäûé èç êoòopûx çaïpeùeí ïpè
còapòe. Ïepèoäè÷ecêoe ïpepûâaíèe ïpoècxoäèò ÷epeç oïpeäeëeííûe
èíòepâaëû âpeìeíè. Ïepèoäè÷íocòü ïpèáëèæeíío paâía oäíoé ìèëëèceêóíäe.
Ïpepûâaíèe òpeâoãè ïpoècxoäèò êoãäa çía÷eíèe òpex pe- ãècòpoâ òpeâoãè
coâïaäaeò co çía÷eíèÿìè cooòâeòcòâóþùèx âpeìeííûx peãècòpoâ. Ïpepûâaíèe
êoíöa ìoäèôèêaöèè ïpoècxoäèò ïocëe êaæäoão oáíoâëeíèÿ çía÷eíèé
peãècòpoâ ìèêpocxeìû.
Ïpepûâaíèe 1AH pacøèpeío â BIOS AT, ÷òoáû oío ïoçâoëÿëo ÷èòaòü è
ócòaíaâëèâaòü ÷acû peaëüíoão âpeìeíè. Ïocêoëüêó ïoêaçaíèÿ íèêoãäa íe
cocòoÿò áoëee ÷eì èx äâóx äecÿòè÷íûx öèôp, òo çía÷eíèÿ âpeìeíè âûäaþòcÿ
â äâoè÷ío-êoäèpoâaííoé äecÿòè÷íoé ôopìe (BCD), êoãäa áaéò äeëèòcÿ ía
äâe ïoëoâèíû è êaæäaÿ äecÿòè÷íaÿ öèôpa ïpeäcòaâëÿeòcÿ ÷eòûpüìÿ áèòaìè.
Taêoé ôopìaò ïoçâoëÿeò ëeãêo ïepeâoäèòü ÷ècëa â ôopìó ASCII. Ïpoãpaììe
íóæío òoëüêo cäâèíóòü ïoëoâèíó áaéòa â ìëaäøèé êoíeö peãècòpa è
äoáaâèòü 48 äëÿ ïoëó÷e- íèÿ êoäa ASCII, cooòâeòcòâóþùeão äaííoìó ÷ècëó.
Äëÿ âcex IBM PC ôóíêöèè 0 è 1 ïpepûâaíèÿ 1AH ÷èòaþò è ócòaíaâëèâaþò
c÷eò÷èê âpe- ìeíè cóòoê BIOS. Äëÿ ÷acoâ peaëüíoão âpeìeíè AT èìeeòcÿ
øecòü íoâûx ôóíêöèé:
Ôóíêöèÿ 2: ×òeíèe âpeìeíè èç ÷acoâ peaëüíoão âpeìeíè
Ïpè âoçâpaòe: CH = ÷acû â BCD
CL = ìèíóòû â BCD
DH = ceêóíäû â BCD
- 7 -
Ôóíêöèÿ 3: Ócòaíoâêa âpeìeíè ÷acoâ peaëüíoão âpeìeíè
Ïpè âxoäe: CH = ÷acû â BCD
CL = ìèíóòû â BCD
DH = ceêóíäû â BCD
DL = if daylight savings, else 1
Ôóíêöèÿ 4: ×òeíèe äaòû èç ÷acoâ peaëüíoão âpeìeíè
Ïpè âoçâpaòe: CH = âeê â BCD (19 èëè 20)
CL = ãoä â BCD (c 1980)
DH = ìecÿö â BCD
DL = äeíü ìecÿöa â BCD
Ôóíêöèÿ 5: Ócòaíoâêa äaòû ÷acoâ peaëüíoão âpeìeíè
Ïpè âxoäe: CH = âeê â BCD (19 èëè 20)
CL = ãoä â BCD (c 1980)
DH = ìecÿö â BCD
DL = äeíü ìecÿöa â BCD
Ôóíêöèÿ 6: Ócòaíoâêa òpeâoãè äëÿ ÷acoâ peaëüíoão âpeìeíè
Ïpè âxoäe: CH = ÷acû â BCD
CL = ìèíóòû â BCD
DH = ceêóíäû â BCD
Ôóíêöèÿ 7: Cápoc òpeâoãè (íeò âxoäíûx peãècòpoâ)
Tpeâoãa ócòaíaâëèâaeòcÿ êaê cìeùeíèe, oòíocèòeëüío òeêóùeão ìo- ìeíòa
âpeìeíè. Maêcèìaëüíûé ïepèoä paâeí 23:59:59. Kaê óæe ãoâo- pèëocü âûøe,
âeêòop ïpepûâaíèÿ 4AH äoëæeí óêaçûâaòü ía ïpoöeäópó oápaáoòêè òpeâoãè.
Oòìeòèì, ÷òo ecëè ÷acû íe paáoòaþò (íaèáoëee âepoÿòío, èç-ça oòcóòcòâèÿ
ïèòaíèÿ), òo âûïoëíeíèe ôóíêöèé 2, 4 è 6 ócòaíaâëèâaeò ôëaã ïepeíoca.
6. Çaäepæêa ïpoãpaììíûx oïepaöèé.
Ecëè Bû ocóùecòâëÿeòe çaäepæêó â ïpoãpaììe ïocpeäcòâoì ïócòoão
öèêëa, òo Baì ìoæeò ïoòpeáoâaòücÿ ìíoão âpeìeíè äëÿ òoão, ÷òoáû
äoáèòücÿ íóæíoão âpeìeíè çaäepæêè. Äaæe ecëè Bû oïpeäeëèòe òpe- áóeìóþ
äëèòeëüíocòü, òo íeëüçÿ áûòü óâepeííûì, ÷òo Baøa ïpoãpaììa áóäeò äaâaòü
íóæíoe âpeìÿ çaäepæêè ïpè âcex ócëoâèÿx. Äëèòeëüíocòü öèêëa ìoæeò
ìeíÿòücÿ â çaâècèìocòè oò ècïoëüçóeìoão êoìïèëÿòopa (èëè, äëÿ Áeécèêa,
oò òoão, êoìïèëèpóeòcÿ ïpoãpaììa èëè íeò). A â íaøe âpeìÿ, êoãäa
èìeeòcÿ áoëüøoé íaáop ìaøèí coâìecòèìûx c IBM PC - èìeþùèx øèpoêèé
äèaïaçoí cêopocòè ïpoöeccopa - äaæe öèêë ía ÿçûêe acceìáëepa ìoæeò
ïpèâoäèòü ê paçëè÷íûì âpeìe- íaì çaäepæêè. Ïoýòoìó paçóìío oïpeäeëÿòü
âpeìÿ ïpoãpaììíoé ça- äepæêè íeïocpeäcòâeíío ïo ÷acaì. ×acòoòa oòc÷eòa
18.2 paça â ceêóíäó, ècïoëüçóeìaÿ äëÿ ìoäèôèêaöèè c÷eò÷èêa âpeìeíè
cóòoê, äoëæía âïoëíe óäoâëeòâopÿòü áoëüøèícòâo ïoòpeáíocòeé (êaê óâeëè-
÷èòü ÷acòoòó oòc÷eòoâ.
×òoáû oáecïe÷èòü çaäepæêó äaííoé ïpoäoëæèòeëüíocòè, ïpoãpaììa äoëæía
ïoäc÷èòaòü òpeáóeìoe ÷ècëo èìïóëücoâ c÷eò÷èêa âpeìeíè cóòoê. Ýòo
çía÷eíèe äoáaâëÿeòcÿ ê c÷èòaííoìó òeêóùeìó çía÷eíèþ c÷eò÷èêa. Çaòeì
ïpoãpaììa ïocòoÿíío c÷èòûâaeò çía÷eíèe c÷eò÷èêa è cpaâíèâaeò eão c
çaïoìíeííûì. Koãäa äocòèãaeòcÿ paâeícòâo, òo òpeáóeìaÿ çaäepæêa ïpoøëa
è ìoæío ïpoäoëæaòü âûïoëíeíèe ïpoãpaììû. ×eòûpe áaéòa, â êoòopûx
xpaíèòcÿ çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê xpaíÿòcÿ, ía÷èíaÿ c aäpeca
0040:006C (êaê oáû÷ío, ía÷èíaÿ c ìëaäøeão áaéòa). Äëÿ çaäepæeê ìeíüøèx
14 ceêóíä ìoæío ïoëüçoâaòücÿ òoëüêo ìëaäøèì áaéòoì. Äâa ìëaäøèx áaéòa
ïoçâoëÿþò çaäepæêè äo oäíoão ÷aca (òo÷íee, ía ïoë-ceêóíäû ìeíüøe, ÷eì
÷ac).
Cpeäíèé ópoâeíü.
Ïpo÷èòaéòe çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê BIOS, ècïoëüçóÿ ôóíêöèþ 0
ïpepûâaíèÿ 1AH è äoáaâüòe ê íeìó íeoáxoäèìoe ÷ècëo èìïóëücoâ ïo 1/18
- 8 -
ceêóíäû. Ïocëe ýòoão c÷èòûâaéòe òeêóùèe çía÷e- íèÿ c÷eò÷èêa âpeìeíè
cóòoê, ïocòoÿíío cpaâíèâaÿ c òpeáóeìoé âeëè÷èíoé. Ïpè äocòèæeíèè
paâeícòâa íaäo êoí÷aòü çaäepæêó. Ïpepûâaíèe 1AH âoçâpaùaeò äâa ìëaäøèx
áaéòa â DX (áoëüøèícòâo çaäepæeê óêëa- äûâaþòcÿ â ýòèx ïpeäeëax),
ïoýòoìó äâa còapøèx áaéòa, âoçâpaùae- ìûe â CX, ìoãóò èãíopèpoâaòücÿ,
÷òo ïoçâoëèò Baì èçáeæaòü 32-áaéòíûx oïepaöèé. B äaííoì ïpèìepe
ócòaíoâëeía çaäepæêa ía 5 ceêóíä, ÷òo cooòâeòcòâóeò 91 oòc÷eòó.
;---ïoëó÷eíèe çía÷eíèÿ c÷eò÷èêa è ócòaíoâêa çaäepæêè
MOV AH,0 ;íoìep ôóíêöèè äëÿ "÷òeíèÿ"
INT 1AH ;ïoëó÷aeì çía÷eíèe c÷eò÷èêa
ADD DX,91 ;äoáaâëÿeì 5 ceê. ê ìëaäøeìó cëoâó
MOV BX,DX ;çaïoìèíaeì òpeáóeìoe çía÷eíèe â BX
;---ïocòoÿííaÿ ïpoâepêa çía÷eíèÿ c÷eò÷èêa âpeìeíè cóòoê BIOS
REPEAT: INT 1AH ;ïoëó÷aeì çía÷eíèe c÷eò÷èêa
CMP DX,BX ;cpaâíèâaeì c ècêoìûì
JNE REPEAT ;ecëè íepaâeí, òo ïoâòopÿeì cíoâa
;èía÷e, çaäepæêa oêoí÷eía
AT èìeeò äoáaâo÷íóþ ôóíêöèþ ïpepûâaíèÿ 15H, êoòopaÿ ïoçâoëÿeò
ocóùecòâèòü çaäepæêó ía óêaçaííoe âpeìÿ. Ïoìecòèòe 86H â AH, a ÷ècëo
ìèêpoceêóíä çaäepæêè â CX:DX. Ïocëe ýòoão âûïoëíèòe ïpepûâaíèe.
7. Oïepaöèè çaïpoãpaììèpoâaííûe âo âpeìeíè.
Ïpoãpaììa oïpeäeëÿeò âpeìÿ äëÿ âûïoëíeíèÿ oïpeäeëeííoé oïepa- öèè â
òo÷íocòè òaê æe, êaê è ÷eëoâeê: áepeòcÿ ía÷aëüíoe ïoêaçaíèe c÷eò÷èêa
âpeìeíè cóòoê è çaòeì cpaâíèâaeòcÿ c ïocëeäóþùèìè ïoêa- çaíèÿìè. Moæío
ïoëó÷aòü çía÷eíèÿ â ôopìaòe ÷acû-ìèíóòû-ceêóíäû, ío cëèøêoì xëoïoòío
âû÷ècëÿòü paçíèöó ìeæäó òaêèìè ïoêaçaíèÿìè, ïocêoëüêó cècòeìa c÷eòa íe
äecÿòè÷íaÿ. Ëó÷øe ïpÿìo ÷èòaòü c÷eò÷èê âpeìeíè cóòoê BIOS, èçìepÿòü
ïpoäoëæèòeëüíocòü â 1/18 ceêóíäû, a çaòeì óæe ïepeâoäèòü ee â oáû÷íûé
ôopìaò ÷÷:ìì:cc.
Cpeäíèé ópoâeíü.
Ïpepûâaíèe 1AH èìeeò äâe ôóíêöèè äëÿ ócòaíoâêè (AH = 1) è ïoëó÷eíèÿ
(AH = 0) c÷eò÷èêa âpeìeíè cóòoê. Äëÿ ÷òeíèÿ c÷eò÷èêa íaäo ïpocòo
âûïoëíèòü ïpepûâaíèe c AH = 0. Ïpè âoçâpaòe çía÷eíèe c÷eò÷èêa
coäepæèòcÿ â CX:DX, ïpè÷eì ìëaäøee cëoâo â CX. AL coäep- æèò 0, ecëè
c÷eò÷èê íe ïepexoäèë ÷epeç ãpaíèöó 24 ÷acoâ c ìoìeíòa ïocëeäíeé
ócòaíoâêè. Äëÿ ócòaíoâêè c÷eò÷èêa ïoìecòèòe äâa cëoâa â òe æe peãècòpû,
a â AH - 1. B ïpèâeäeííoì ïpèìepe èçìepÿþòcÿ ïpoìeæóòêè âpeìeíè â
ïpeäeëax ÷aca. Ïpè ýòoì íóæíû òoëüêo äâa ìëaäøèx áaéòa c÷eò÷èêa. Ho â
ýòoì cëó÷ae íeoáxoäèìo ïpoâepÿòü, ÷òo íe áûëo ïepexoäa ÷epeç ãpaíèöó,
êoãäa ía÷aëüíoe çía÷eíèe áûëo áoëüøe, ÷eì cëeäóþùee. ;---â ceãìeíòe
äaííûx OLDCOUNT DW 0 ;xpaíèì ía÷aëüíoe çía÷eíèe c÷eò÷èêa ;---ïoëó÷aeì
ía÷aëüíoe çía÷eíèe c÷eò÷èêa
MOV AH,0 ;íoìep ôóíêöèè
INT 1AH ;ïoëó÷aeì çía÷eíèe c÷eò÷èêa
MOV OLDCOUNT,DX ;coxpaíÿeì ía÷aëüíoe çía÷eíèe
.
(çäecü èäeò ïpoöecc, äëèòeëüíocòü êoòopoão èçìepÿeòcÿ)
.
;---ïoçäíee âû÷ècëÿeì äëèòeëüíocòü ïpoöecca
MOV AH,0 ;íoìep ôóíêöèè
INT 1AH ;ïoëó÷aeì çía÷eíèe c÷eò÷èêa
MOV BX,OLDCOUNT ;c÷èòûâaeì còapoe çía÷eíèe
CMP BX,DX ;ïpoâepÿeì ía ïepeïoëíeíèe
- 9 -
JG ADJUST ;oápaáoòêa ïepeïoëíeíèÿ
SUB DX,BX ;èía÷e áepeì paçíocòü
JMP SHORT FIGURE_TIME ;è ïepeâoäèì ee â oáû÷íûé âèä
;---oápaáoòêa ïepeïoëíeíèÿ
ADJUST: MOV CX,0FFFFH ;ïoìeùaeì â CX ìaêcèìaëüíoe ÷ècëo
SUB CX,BX ;âû÷èòaeì ïepâoe çía÷eíèe
ADD CX,DX ;äoáaâëÿeì âòopoe çía÷eíèe
MOV DX,CX ;peçóëüòaò xpaíèì â DX
;---ïpoöeäópa ïepeâoäa âpeìeíè â oáû÷íûé ôopìaò
FIGURE_TIME: ;äeëèì ía 18.2 ceêóíäû è ò.ä.
8. Óïpaâëeíèe paáoòoé â peaëüíoì âpeìeíè.
Ïpè oïepaöèÿx â peaëüíoì âpeìeíè ïpoãpaììa âûïoëíÿeò èícòpóêöèè â
óêaçaííûé ìoìeíò âpeìeíè, a íe ïpè ïepâoé âoçìoæíocòè. Taêoão poäa
oïepaöèè oáû÷ío accoöèèpóþòcÿ c poáoòexíèêoé, ío èìeeòcÿ ìíoæecòâo
äpóãèx ïpèëoæeíèé. Èìeeòcÿ âûáop ïoäxoäa ê oïepaöèÿì â peaëüíoì
âpeìeíè. Äëÿ ïpoãpaìì, êoòopûe íe äoëæíû íè÷eão äeëaòü â ïpoìeæóòêe
ìeæäó èícòpóêöèÿìè, òpeáóþùèìè âpeìeííoé ïpèâÿçêè, ìoæío ïpocòo
ïepèoäè÷ecêè ïpoâepÿòü c÷eò÷èê âpeìeíè cóòoê, oæèäaÿ íacòóïëeíèÿ
íóæíoão ìoìeíòa. Taêoé ïoäxoä ïpaêòè÷ecêè câoäèòcÿ ê íaáopó ïócòûx
öèêëoâ, oïècaííûx â [2.1.5].
Bòopoé ïoäxoä áoëee cëoæeí. Oí ècïoëüçóeòcÿ, êoãäa ïpoãpaììa
ïocòoÿíío çaíÿòa êaêoé-ëèáo paáoòoé, ío oía äoëæía â oïpeäeëeííûe
ìoìeíòû âpeìeíè ïpepûâaòü câoè oïepaöèè äëÿ âûïoëíeíèÿ oïpeäeëeííoé
çaäa÷è. B ýòoì cëó÷ae pacøèpÿþò ïpepûâaíèe òaéìepa, êoòopoe âûïoëíÿeòcÿ
18.2 paça â ceêóíäó. Koãäa ýòo ïpepûâaíèe ïpoècxoäèò, äoïoëíèòeëüíûé
êoä ïpoâepÿeò íoâoe çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê è ecëè íacòóïèë
oïpeäeëeííûé ìoìeíò âpeìeíè, çaïócêaeò íóæíóþ ïpoöeäópó. Ýòoò ïpoöecc
ïoêaçaí ía pèc. 2-3. Ïpèâeäeííûe çäecü ïpocòûe ïpèìepû ïoêaçûâaþò, êaê
coçäaòü â câoeé ïpoãpaììe áóäèëüíèê, êoòopûé ócòaíaâëèâaeòcÿ
ïoëüçoâaòeëeì è ïoäaeò çâóêo- âoé cèãíaë, êoãäa ïoäoøëo âpeìÿ. (Áoëee
cëoæíûé ïpèìep íèçêoão ópoâíÿ â [2.2.6] ècïoëíÿeò ìóçûêó, â òo âpeìÿ
êoãäa ïpoöeccop çaíÿò äpóãèìè äeëaìè.)
Hèçêèé ópoâeíü.
BIOS coäepæèò cïeöèaëüíoe ïócòoe ïpepûâaíèe (1CH), êoòopoe íè÷eão íe
äeëaeò, ïoêa Bû íe íaïèøèòe äëÿ íeão ïpoöeäópó. Ïpè còapòe âeêòop ýòoão
ïpepûâaíèÿ óêaçûâaeò ía èícòpóêöèþ IRET (âoçâpaò èç ïpepûâaíèÿ); ïpè
eão âûçoâe ïpoècxoäèò ìoìeíòaëüíûé âoçâpaò. Ho ïpepûâaíèe 1CH èíòepecío
òeì, ÷òo oío âûçûâaeòcÿ ïpepûâaíèeì òaéìepa BIOS ïocëe òoão, êaê ýòo
ïpepûâaíèe oáíoâèëo çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê. Moæío cêaçaòü, ÷òo
ýòo aïïapaòíoe ïpepûâaíèe, ïpoècxoäÿùee aâòoìaòè÷ecêè 18.2 paça â
ceêóíäó. Bû ìoæeòe èçìeíèòü âeêòop ýòoão ïpepûâaíèÿ òaê, ÷òoáû oí
óêaçûâaë ía ïpoöeäópó â Baøeé ïpoãpaììe. Ïocëe ýòoão Baøa ïpoöeäópa
áóäeò âûçûâaòücÿ 18.2 paça â ceêóíäó.
Haïècaííaÿ Baìè ïpoöeäópa äoëæía ïpo÷èòaòü òoëüêo ÷òo ìoäèôè-
öèpoâaííoe çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê, cpaâíèòü eão c oæèäaeìûì
âpeìeíeì, è âûïoëíèòü òo ÷òo òpeáóeòcÿ, êoãäa oæèäaeìoe âpeìÿ íaêoíeö
íacòóïèò. Ecòecòâeíío, ÷òo êoãäa âpeìÿ eùe íe ïo- äoøëo, òo ïpoöeäópa
ïpocòo âoçâpaùaeò óïpaâëeíèe, íè÷eão íe äe- ëaÿ. Taêèì oápaçoì,
ïpoöeccop íe âûïoëíÿeò ëèøíeé paáoòû.
B ïpèâeäeííoì ïpèìepe ïpoöeäópa (íe ïoêaçaííaÿ çäecü) çaïpaøèâaeò ó
ïoëüçoâaòeëÿ ÷ècëo ìèíóò (äo 60), êoòopoe äoëæío ïpoéòè äo òoão, êaê
paçäacòcÿ çâoíoê áóäèëüíèêa. Ýòo ÷ècëo, çaïaceííoe â MINUTES,
óìíoæaeòcÿ ía 1092 äëÿ ïepeâoäa â ýêâèâaëeíòíoe ÷ècëo èìïóëücoâ
c÷eò÷èêa âpeìeíè cóòoê. Äëÿ ïepèoäa â ïpeäeëax oäíoão ÷aca äocòaòo÷ío
16 áèò - áoëee äëèííûe ïepèoäû òpeáóþò áoëee cëoæíûx 32-áèòoâûx
- 10 -
oïepaöèé. Ýòo ÷ècëo èìïóëücoâ äoáaâëÿeòcÿ ê ìëaäøeìó cëoâó òeêóùeão
çía÷eíèÿ c÷eò÷èêa âpeìeíè cóòoê è çaïoìèíaeòcÿ â ALARMCOUNT.
Çaòeì âeêòop ïpepûâaíèÿ 1CH èçìeíÿeòcÿ òaêèì oápaçoì, ÷òoáû oí
óêaçûâaë ía ïpoöeäópó ALARM. Ïoìíèòe, ÷òo êaê òoëüêo âeêòop áóäeò
èçìeíeí, ALARM áóäeò aâòoìaòè÷ecêè âûçûâaòücÿ 18.2 paça â ceêóíäó. Ïpè
âûçoâe ýòa ïpoöeäópa ÷èòaeò òeêóùee çía÷eíèe c÷eò÷èêa âpeìeíè cóòoê
÷epeç ïpepûâaíèe 1AH è cpaâíèâaeò c ALARMCOUNT. Ïpè coâïaäeíèè ýòèx
âeëè÷èí âûçûâaeòcÿ ïpoöeäópa BEEP (òaêæe íe ïoêa- çaííaÿ çäecü, êoòopaÿ
âûäaeò çâóêoâoé cèãíaë. B ïpoòèâíoì cëó÷ae ïpoècxoäèò âoçâpaò. Oáû÷íûé
êoä âoçâpaòa èç aïïapaòíûx ïpepûâaíèé (MOV AH,20H / OUT 20H,AL)
âêëþ÷aòü â ïpoöe- äópó íe íóæío, òaê êaê oí áóäeò â ïpepûâaíèè òaéìepa.
Áóäüòe âíèìaòeëüíû è íe çaáóäüòe coxpaíèòü èçìeíÿeìûe peãècòpû.
;---â ceãìeíòe äaííûx
MINUTES DW 0 ;xpaíèò ÷ècëo ìèíóò äo çâoíêa
ALARMCOUNT DW 0 ;xpaíèò c÷eò÷èê âpeìeíè äëÿ çâoíêa
;---ócòaíoâêa oæèäaeìoão çía÷eíèÿ c÷eò÷èêa âpeìeíè cóòoê
CALL REQUEST_MINUTES ;çaïpoc ÷ècëa ìèíóò äo çâoíêa
MOV AX,MINUTES ;ïepecûëêa â AX
MOV BX,1092 ;÷ècëo èìïóëücoâ c÷eò÷èêa â ìèíóòe
MUL BX ;óìíoæaeì - peçóëüòaò â AX
;ïoëó÷aeì òeêóùee çía÷eíèe c÷eò÷èêa
MOV AH,0 ;íoìep ôóíêöèè ÷òeíèÿ c÷eò÷èêa
INT 1AH ;÷èòaeì çía÷eíèe, ìëaäøèé áaéò â DX
;cêëaäûâaeì oáa çía÷eíèÿ
ADD AX,DX ;
MOV ALARMCOUNT,AX ;ïoëó÷aeì íóæíoe çía÷eíèe c÷eò÷èêa
;---çaìeíÿeì âeêòop ïócòoão ïpepûâaíèÿ
PUSH DS ;coxpaíÿeì ceãìeíò äaííûx
MOV AX,SEG ALARM ;áepeì ceãìeíò ïpoöeäópû ALARM
MOV DS,AX ;ïoìeùaeì eão â DS
MOV DX,OFFSET ALARM ;áepeì cìeùeíèe ïpoöeäópû
MOV AL,1CH ;íoìep èçìeíÿeìoão âeêòopa
MOV AH,25H ;ôóíêöèÿ èçìeíeíèÿ âeêòopa
INT 21H ;ìeíÿeì âeêòop
POP DS ;âoccòaíaâëèâaeì ceãìeíò äaííûx
;
;---äaëüøe ïpoäoëæaeòcÿ ïpoãpaììa
;
;---â êoíöe ïpoãpaììû âoçâpaùaeì âeêòop ïpepûâaíèÿ
MOV DX,0FF53H ;opèãèíaëüíûe çía÷eíèÿ äëÿ
MOV AX,0F000H ;ïpepûâaíèÿ 1CH
MOV DS,AX ;ïoìeùaeì ceãìeíò â DS
MOV AL,1CH ;íoìep èçìeíÿeìoão âeêòopa
MOV AH,25H ;íoìep ôóíêöèè
INT 21H ;âoccòaíaâëèâaeì âeêòop
;---ïpoöeäópa âûäa÷è çâóêoâoão cèãíaëa
ALARM PROC FAR ;coçäaeì äëèííóþ ïpoöeäópó
PUSH AX ;coxpaíÿeì èçìeíÿeìûe peãècòpû
PUSH CX ;
PUSH DX ;
;---÷èòaeì c÷eò÷èê âpeìeíè cóòoê
MOV AH,0 ;íoìep ôóíêöèè ÷òeíèÿ c÷eò÷èêa
INT 1AH ;÷èòaeì çía÷eíèe c÷eò÷èêa
;---cpaâíèâaeì c òpeáóeìûì çía÷eíèeì
MOV CX,ALARMCOUNT ;áepeì òpeáóeìoe çía÷eíèe
CMP DX,CX ;cpaâíèâaeì c òeêóùèì
- 11 -
JNE NOT_YET ;ecëè íepaâíû, òo ía âûxoä
;---âûäaeì çâóêoâoé cèãíaë, ecëè çía÷eíèÿ coâïaëè
CALL BEEP ;ýòa ïpoöeäópa íe ïoêaçaía
;---èía÷e âoçâpaùaeìcÿ èç ïpepûâaíèÿ
NOT_YET: POP DX ;âoccòaíaâëèâaeì peãècòpû
POP CX ;
POP AX ;
IRET ;âoçâpaò èç ïpepûâaíèÿ
ALARM ENDP ;êoíeö ïpoöeäópû
|