Každý konstruktér s mikroprocesorem už někdy stál před
problémem nedostatku vodičů. Mně se tohle stalo v aplikaci, kde si zákazník po 3
měsících vzpomněl, že „nutně potřebuje“ startovat nějakou událost pulsem z
mikropočítače. Přišel jsem tedy ke svému programu, o kterém jsem již zapomněl, co se
dalo, a zjistil jsem, že jsem klasicky spotřeboval absolutně všechny vývody, kterými 89c52
disponovala.
Zbývaly dvě možnosti :
|
Nakonec jsem použil vývod PSEN :
V x51 je tento vodič použit na selekci vnější EPROM, pracujete-li v aplikaci s vnější
pamětí programu. Pokud však používáte pouze vnitřní programovou paměť, je tento
vývod nevyužít.
Jak vidno z časového diagramu PSEN, x51 generuje impulsy při použití instrukce MOVC a MOVX.
Použít MOVX nelze, protože při čtení se porty X51 nastaví do log. 1, a tím pádem
přijdete o data na výstupu. Lze ale použít instrukci MOVC.
Pro vygenerování pulsu na pinu PSEN je tedy potřeba udělat následující :
- Přečtěte P0 a P2 pomocí přímého přístupu a zapište jej do registru
- Vymaskujte oba tyto registry tak, aby tam, kde používáte pin jako vstupní, figurovala log. 1 (tím zajistíte, že i při změně stavu výstupu po dobu generování pulsu na PSEN nepůjdou proti sobě dva výstupy – viz. zapojení výstupů x51).
- Uložte registry do DPTR a proveďte instrukci MOVC.
Provedením instrukce MOVC vygenerujete na pinu PSEN sekvenci čtyř po sobě jdoucích impulsů.
Jejich zpracování je na vás – já jsem použil obvod 4518 – 2x 4-bitový
desítkový BCD čítač, nulovaný přímo z RESETu pro procesor. Výstup Q3 lze
použít rovnou pro zapínání i vypínání jakéhokoli spotřebiče.
Po prvním zpracování instrukce MOVC spotřebič zapne, po dalším
zpracování vypne.
Závěr :
Netradiční způsob, jak si pomoci v nejvyšší nouzi. Vzhledem k celkem velkému
omezení ovládání pinu PSEN díky nutnosti zachování stavu
portů v předešlém stavu je však tento postup použitelný asi opravdu pouze v nouzi
největší...