Přerušení od sériového kanálu


Jak jste se mohli dočíst na stránce o sériovém kanálu nebo na stránce o přerušovacím systému, přerušení od sériového kanálu je trošku odlišné od ostatních přerušení. To proto, že toto přerušení mohou vyvolat dva příznakové bity - RI a TI. Bit RI je nastaven při příjmutí bytu, bit TI je nastaven, když je byte odeslán.
Z toho vyplývá, že je-li přerušení vyvoláno a přešlo se do obslužného programu, musí si uživatel zjistit, zda bylo přerušení vyvoláno od příjmu (RI) nebo od vysílání (TI) a teprve potom musí příslušný příznak programově vynulovat (příznaky totiž z výše uvedené nutnosti "ručního" rozlišení nejsou obvodově nulovány).
Toto testování a následné vynulování příslušného příznak.bitu se provádí na začátku obslužného programu třeba takto:
SER_PRERUS:    JNB RI,TEST_TI        ;není-li nastaven příznak RI, testuj TI
               MOV A,SBUF            ;je-li RI nastaven, zapiš přijatý byte do A
               CLR RI                ;po skončení vynuluj RI
TEST_TI:       JNB TI,KONEC_PRERUS   ;není-li nastaven příznak TI, vrať se z obsluhy
               CLR TI                ;vynulování TI před vysláním bytu 
               MOV SBUF,#’A’         ;vyšli další znak 
KONEC_PRERUS:  RETI
Z uvedeného programu je vidět, že se testují oba příznaky a následně se nuluje odpovídající příznak (příp. příznak RI i TI, jsou-li nastaveny oba). Pokud bychom zapomněli příznakové bity vynulovat, přerušení od sériového kanálu by bylo neustále znovu a znovu vyvoláváno. Proto je při psaní programu důležité na nulování příznakových bitů RI/TI pamatovat.


Zpět na předchozí stránku

Copyright © Michal Fuksa 2002