DS1232

12,79 

1 na sklade

Katalógové číslo: 712 Kategórií: , , , , ,

Popis

DS1232

 

 

čip s názvom DS1232 MicroMonitor™, ktorý je navrhnutý na monitorovanie a riadenie niekoľkých dôležitých podmienok pre mikroprocesor. Tieto podmienky zahŕňajú napájanie, vykonávanie softvéru a externé riadenie. Čip má niekoľko funkcií, vrátane monitorovania napájania, riadenia resetu pomocou tlačidla a funkcie strážneho psa. Popisuje tiež pinout čipu a jeho operačné vlastnosti, ako napríklad časovanie resetov a detekciu chýb napájania. Taktiež uvádza odporúčané a maximálne hodnoty napätia a teploty, pri ktorých môže byť čip bezpečne prevádzkovaný.

Parameter Description
Supply Voltage (VCC) 4.5V to 5.5V (recommended DC operating conditions)
Input High Level (VIH) 2.0V to VCC+0.3V (ST and PBRST input)
Input Low Level (VIL) -0.3V to +0.8V (ST and PBRST input)
Input Leakage (IIL) -1.0μA to +1.0μA
Output Current (IOH) -8mA to -10mA (output current @ 2.4V)
Output Current (IOL) +8mA to +10mA (output current @ 0.4V)
Low Level Output (VOL) 0.4V (output voltage @ -500μA)
High Level Output (VOH) VCC-0.5V to VCC-0.1V (output voltage @ -500μA)
Operating Current (ICC) 0.5mA to 2.0mA
Trip Point (TOL=GND) 4.50V to 4.74V (VCC trip point)
Trip Point (TOL=VCC) 4.25V to 4.49V (VCC trip point)
Input Capacitance (CIN) 5pF
Output Capacitance (COUT) 7pF
PBRST = VIL (tPB) 20ms (pushbutton reset)
RESET Active Time (tRST) 250ms to 1000ms (reset active time)
ST Pulse Width (tST) 20ns (strobe input)
VCC Fail Detect to RST and RST Transition (tRPD) 100μs to 175μs
VCC Slew Rate (4.75V to 4.25V) 300μs
VCC Detect to RST and RST Transition (tRPU) 250ms to 1000ms
PBRST Stable Low to RST and RST (tPDLY) 20ms

Tieto parametre poskytujú informácie o elektrických vlastnostiach čipu a časových charakteristikách jeho operácie. Uložte túto tabuľku na váš web, aby ste mali prehľad o vlastnostiach čipu DS1232 MicroMonitor™ k dispozícii.

 

 

 

Parametre produktu:

Veľkosť: 35 mm x 15 mm x 10 mm dĺžka x šírka x výška
Hlavný čip: DS1232
DS1232 je funkcia strážneho psa, ktorá má čip na monitorovanie napájania, napájanie, napájanie, prechodové napätie a pokles, keď sa pri havárii vydá resetovací impulz, je veľmi vhodný ako resetovací obvod mikrokontroléra.

FREE Shipping! ! ! DS1232 external watchdog module|module|module electronic - AliExpress,

 

https://datasheet.octopart.com/DS1232%2B-Dallas-Semiconductor-datasheet-9676143.pdf

VÝHODY POUŽITIA MICROMONITOR A JEDNODUCHÁ APLIKÁCIA DEMONŠTRUJÚCA POUŽITIE DS1232
Abstrakt: Diskutuje o tom, ako sa dá DS1232 použiť na MicroMonitor systém založený na 8051. Tento kontrolný obvod poskytuje vstupné resetovanie pri zapnutí (POR), manuálny reset (stlačenie tlačidla), časovač stráženia (časovač stroboskopu) a komparátor skorého zlyhania napájania. Prahovú toleranciu resetovania možno nastaviť tak, aby monitorovala systémy tolerancie dodávky 5 % aj 10 %. Okrem toho je k dispozícii oneskorenie časového limitu resetovania voliteľné pomocou kolíkov.Na zjednodušenie používania zariadenia je zahrnutý program na spustenie softvéru, ktorý ukazuje, ako možno použiť procesor 8051 v spojení s DS1232.

 

Úvod

Čip DS1232 MicroMonitor od Maxima je vysoko integrované riešenie, ktoré pridáva do vášho mikroprocesorového systému oneskorenie pri reštarte, tlačidlový ovládač resetovania, robustné monitorovanie výpadku napájania a funkciu časovača stráženia vášho mikroprocesorového systému. Čip tiež ponúka aktívne aj nízke resetovacie signály a selektivitu časového limitu watchdog a úrovne monitorovania napätia. Vysoká úroveň integrácie znižuje náklady na implementáciu a potrebný priestor na tabuli. Čipy sú dostupné v niekoľkých baleniach vrátane 8-pinového mSOP, SOIC a DIP.

Výhody použitia mikromonitoru Dallas Semiconductor DS1232

Oneskorenie reštartu pri zapnutí umožňuje stabilizovať zdroje dosky pred spustením vykonávania

Presné ovládanie resetovacieho kolíka mikrokontroléra je dôležité vždy počas prevádzky obvodu. Preto je nevyhnutné, aby bol resetovací kolík ovládaný ako počas normálnej prevádzky, tak aj počas doby zapnutia obvodu. Jedným z bežných problémov s mnohými mikroprocesorovými obvodmi je to, že mikrokontrolér začne vykonávať svoju činnosť skôr, ako má pamäť a I/O zdroje, ktoré má k dispozícii, stabilné napájanie. Niektoré čipy vyžadujú stovky milisekúnd, aby sa samé resetovali a boli pripravené na prevádzku. Ak mikroprocesor začne vykonávať činnosť v priebehu mikrosekúnd od resetovania, môže sa spustiť na základe neplatného vstupu zo systémových zdrojov. Dá sa to vyriešiť pridaním obvodu POR (power-on reset), ktorý udrží mikroprocesor v resete počas sekvencie zapínania po dobu 100 s po resetovaní.

Tlačidlo Reset Circuit vypne chvíľkový spínač a poskytuje trvalý resetovací impulz

Ďalším bežným problémom v mikroprocesorových obvodoch je, že menej ako dokonalý resetovací signál spôsobí, že sa mikroprocesor niekoľkokrát resetuje, prípadne niekoľkokrát vykoná nejaký fragment inicializačnej rutiny, kým sa reset konečne stabilizuje. V niektorých okruhoch je to triviálne. V iných okruhoch by to však mohlo spôsobiť veľké systémové problémy. DS1232 má vnútorné obvody, ktoré odrážajú tlačidlo a poskytujú systému čistý resetovací signál. To eliminuje potrebu mať samostatný obvod resetovania pri zapnutí a obvody tlačidiel pripojené samostatne k resetovaciemu kolíku. Navyše, DS1232 udrží resetovací kolík na nízkej úrovni najmenej 250 ms, aby sa zaručilo, že ručný reset mikroprocesor prijme vždy správne.

DS1232 poskytuje monitorovanie zlyhania napájania

Výpadky a výpadky napájania sú realitou pre väčšinu mikroprocesorových systémov. Keďže neexistuje spôsob, ako sa vyhnúť občasným cyklom napájania, robustné mikroprocesorové riešenie musí počítať s rôznymi režimami výpadku napájania. DS1232 monitoruje napájanie mikroprocesora a prinúti mikroprocesor do stavu resetovania, ak dôjde k výpadku prúdu alebo ak dôjde k úplnému výpadku napájania. To zaručuje, že sa systém nebude pokúšať fungovať pri nepravidelných podmienkach napájacieho napätia a môže zabrániť mikroprocesoru vykonať kód, keď by mal skutočne čakať na návrat napájacieho napätia do platného stavu.

Interný časovač Watchdog MÔŽE resetovať mikroprocesor, ale externý Watchdog ho resetuje

Watchdog časovače sa používajú na zabezpečenie toho, že ak sa kód pracujúci na mikroprocesore dostane do neočakávaného stavu, procesor sa po uplynutí určitého minimálneho času resetuje. Mnohé mikroprocesory majú interný strážny časovač, ktorý túto funkciu zvláda bez externého komponentu. Interný strážny časovač však môže byť deaktivovaný pseudonáhodným kódom, ktorý sa vykonáva na mikroprocesore. Externý strážny časovač na DS1232 nemožno deaktivovať. To vám dáva pokoj s vedomím, že ak MicroMonitor nebliká, mikrokontrolér sa resetuje. Ďalšou príjemnou vlastnosťou DS1232 je, že periódu stroboskopu možno meniť na jednu z troch rôznych hodnôt. Zariadenie teda funguje dobre s rýchlejšími a pomalšími mikroprocesormi, pretože časovač watchdog môžete naprogramovať na vhodnú rýchlosť pre akýkoľvek mikrokontrolér. Ďalšou výhodou externého strážneho časovača je, že stroboskopický signál je viditeľný pre vonkajší svet, pretože je na I/O pine. To umožňuje jednoduchšie ladenie problémov súvisiacich s watchdogom.

Hardvér potrebný na použitie DS1232 s mikrokontrolérom

Najväčšou výhodou DS1232 je, že všetky vyššie uvedené funkcie sú implementované v jednom balíku. Táto funkcia nevyžaduje zložitý čipset. Schéma nižšie ukazuje, ako sa DS1232 používa s mikrokontrolérom Dallas Semiconductor DS87C520. Pretože väčšina systémov obsahuje tlačidlový reset, jediné pridané veci sú DS1232, pull-up rezistor pre aktívny nízky výstup a oddeľovací kondenzátor na zníženie možnosti šumu na napájacom zdroji spôsobujúceho reset. Pull-up rezistor je tu pridaný, pretože sa používa na generovanie grafov osciloskopu zobrazených na nasledujúcich stranách. Aktívny-nízky výstup RST DS1232 nie je potrebný pre DS87C520. LED diódy na diagrame sa používajú na signalizáciu, kedy sa vykonáva servis ISR (Interrupt Service Request).

Obrázok 1. Obvod kompatibilný s 8051 používajúci DS1232 ako ovládač resetovania.

Použitie DS1232 s mikrokontrolérom

Po nakonfigurovaní hardvéru začne DS1232 ovládať resetovacie signály pre zapnutie, reset tlačidla, reset pri výpadku napájania a reset časovača strážneho psa. Aktívne vysoké (RST) a aktívne nízke (aktívne-nízke RST) resety pri zapnutí (POR) sú zobrazené na obrázkoch 2 a 3, v tomto poradí. Aktívny signál vysokého resetovania stúpa s V CC a zostáva vysoký medzi 250 ms a 1 sekundou. Aktívny nízky reset zostáva 0 V, kým neuplynie oneskorenie a potom je ťahaný odporom vytiahnutý vysoko. Pull-up rezistor je potrebný, pretože aktívny-nízky RST je výstup s otvoreným kolektorom. V nižšie uvedených príkladoch RST aj aktívny-nízky RST vyžadujú približne 450 ms, aby sa stali neaktívnymi.

 

Obrázok 2. Typický signál RST počas sekvencie zapínania: 1) VCC 2) RST.Obrázok 3. Typický aktívny-nízky RST signál počas sekvencie zapínania: 1) VCC 2) aktívny-nízky RST.

Obrázok 3. Typický aktívny-nízky RST signál počas sekvencie zapínania: 1) V CC 2) aktívny-nízky RST.

Potom, čo sa resetovací signál stane neaktívnym, mikrokontrolér musí pred uplynutím časovača stráženia aktivovať nízky signál ST. Časovač watchdog DS1232 sa nedá deaktivovať, takže k tomu musí dôjsť v rámci nms resetovacích signálov sa stane neaktívnym, alebo sa mikroprocesor resetuje. Hodnoty časového limitu strážneho psa pre DS1232 sú programovateľné a špecifikované s trochu širokými rozsahmi. Najlepšie je však aktivovať kolík ST rýchlejšie, ako je špecifikácia minimálneho časového limitu stráženia, pretože to eliminuje možnosť, že rýchly strážny pes spôsobí chybné resetovanie systému. Časový limit watchdog je možné nastaviť na jednu z troch hodnôt úpravou hodnoty kolíka TD podľa tabuľky 1.

Tabuľka 1. Hodnoty časového limitu pre každý stav kolíka TD

Stav PIN TD Minimálny časový limit Typický časový limit Maximálny časový limit
Ground 62,5 ms 150 ms 250 ms
Plávajúce 250 ms 600 ms 1000 ms
CC 500 ms 1200 ms 2000 ms

Obrázok 1 zobrazuje kolík TD uzemnený, a preto musí ST vidieť zápornú hranu každých 62,5 ms, aby sa zaručilo, že mikroprocesor nebude resetovaný. Ak bude blikať typickou rýchlosťou 150 ms, existuje šanca, že bude fungovať s jedným MicroMonitorom, ale nie s iným. Zahrnutie minimálnych, typických a maximálnych hodnôt informuje koncového užívateľa o správaní sa strážneho psa. Naprogramujte TD tak, aby mikroprocesor mohol aktivovať kolík ST predtým, ako dosiahne minimálny časový limit, a plánujte, že resetovanie mikrokontroléra bude trvať tak dlho, ako je maximálny časový limit. Typická hodnota neplatí pre žiadny špecifický MicroMonitor; jednoducho ukazuje, že kritický čas je medzi minimálnou a maximálnou hodnotou časového limitu. Typická hodnota pre akýkoľvek daný MicroMonitor sa teda môže pohybovať kdekoľvek medzi minimálnymi a maximálnymi hodnotami časového limitu.

Obrázok 4 (nižšie) zobrazuje stroboskopický signál, ktorý bol použitý pre rovnaké nastavenie hardvéru. Stopa # 1 ukazuje V CC a # 2 ukazuje ST. Keďže rovnaký hardvér bol použitý s resetovacími signálmi znázornenými na obrázkoch 2 a 3, reset bol zrušený pri ~460 ms. Prvá záporná hrana zábleskového signálu nastane po 496 ms alebo 36 ms po tom, čo sa reset stane neaktívnym. Toto je dostatočne skoro na to, aby sa zaručilo, že watchdog neresetuje systém, pokiaľ mikrokontrolér neprejde do neočakávaného stavu.

Obrázok 4. Zábleskový signál Watchdog (ST) na začiatku vykonávania: 1)VCC 2) ST.
Obrázok 4. Zábleskový signál Watchdog (ST) na začiatku vykonávania: 1)V CC 2) ST.

Ako môžete vidieť na obrázku 5(nižšie), signál ST prijíma zápornú hranu približne každých 20 ms. S rýchlejším mikroprocesorom nie je dôvod neblikať častejšie, ako je potrebné. Na tomto grafe je tiež ľahké vidieť, že záblesky sa začnú objavovať po 496 ms po privedení napätia.

Obrázok 5. Zoom zobrazujúci frekvenciu signálu ST: 1)VCC 2) ST.
Obrázok 5. Zoom zobrazujúci frekvenciu signálu ST: 1)V CC 2) ST.

DS1232 tiež vypne chvíľkové prepnutie bez dodatočného hardvéru, čo uľahčuje pridanie resetovania tlačidla na prekonanie systému. Tlačidlo je znázornené na obrázku 1 a signály RST a aktívne a nízke RST, ktoré spôsobuje, sú znázornené na obrázkoch 6 a 7. Všimnite si, že tlačidlo po pripojení k DS1232 neposkakuje a že reset je podržaný približne rovnakú dobu ako reset počas zapínania (typicky 610 ms). Tiež si všimnite, že pre tlačidlo nie je potrebný pull-up rezistor, pretože interný pull-up rezistor je k dispozícii v rámci DS1232.

Obrázok 6. Tlačidlo spôsobujúce reset bez skákania: 1) aktívny-nízky PBRST 2) RST.
Obrázok 6. Tlačidlo spôsobujúce reset bez skákania: 1) aktívny-nízky PBRST 2) RST.

Obrázok 7. Tlačidlo spôsobujúce reset bez poskakovania: 1) aktívny-nízky PBRST 2) aktívny-nízky RST.
Obrázok 7. Tlačidlo spôsobujúce reset bez poskakovania: 1) aktívny-nízky PBRST 2) aktívny-nízky RST.

DS1232 obsahuje aj monitor výpadku napájania. DS1232 neustále monitoruje V CC a resetuje mikrokontrolér, ak napätie klesne pod V CCTP ( vypínací bod V CC ). V CCTPmožno naprogramovať na 5 % alebo 10 % pod V CC a MicroMonitor udrží signály resetovania aktívne 250 ms až 1 sekundu po tom, ako sa V CC obnoví a vráti sa nad V CCTP . V CCTP sa programuje pomocou kolíka TOL. Ak je kolík TOL uzemnený, zvolí sa tolerancia 5 %; ak je viazaný na V CC , potom sa zvolí tolerancia 10 %. To umožňuje dizajnérom vybrať toleranciu, ktorá najlepšie vyhovuje ich systémom, čo umožňuje maximálnu flexibilitu dizajnu. 5% tolerancia vynúti reset niekde medzi 4,50V a 4,74V a 10% tolerancia vynúti aktiváciu resetovacích kolíkov medzi 4,25V a 4,49V.

Pre referenčný dizajn znázornený na obrázku 1 bola zvolená tolerancia 5 %. Pri pohľade na graf osciloskopu vobrázok 8 , možno určiť V CCTP pre tento špecifický MicroMonitor. X2 na pozemku je zarovnaný s okrajom RST a krížový bod Y2 je pri 4,6V.

Obrázok 8. Správanie kolíka RST, keď VCC klesne pod VCCTP: 1) VCC 2) RST.
Obrázok 8. Správanie kolíka RST, keď V CC klesne pod V CCTP : 1) V CC 2) RST.

Rýchlosť zošikmenia V CC pri páde je ~500 mv/10 ms alebo ~50 V/s. Špecifikácia údajového listu DS1232 vyžaduje, aby čas pádu medzi 4,75 V až 4,25 V bol väčší alebo rovný 300 ms, čo dáva maximálnu rýchlosť 1,667 kV/s. Ako vidíte, tento systém napájania to ľahko spĺňa.

Ďalší graf osciloskopu ukazuje postupnosť zapínania, keď V CC opúšťa stav “hnednutia”. V CCbol statický pri 4,3 V a vráti sa na 5,0 V. DS1232 podrží reset aktívny počas aktívneho času resetovania 250 ms až 1 sekundy po tom, čo dôjde k prechodu na V CC . V nižšie uvedenom prípade udržal MicroMonitor reset aktívny približne 460 ms.

Obrázok 9. Napätie sa obnoví z 4,3 V „Brownout“: 1) VCC 2) RST.
Obrázok 9. Napätie sa obnoví z 4,3 V “Brownout”: 1) V CC 2) RST.

Softvér mikrokontroléra 8051 na používanie mikromonitorového čipu DS1232

Softvér navrhnutý na prácu s hardvérom na obrázku 1 je uvedený v prílohe A. Softvér funguje s mikromonitorom DS1232 a mikrokontrolérom kompatibilným s Dallas Semiconductor DS87C520 8051. Poskytuje robustný systém monitorovania napájania a kódu s redundantným monitorovaním napájania a kódu. Softvér dokáže rozlíšiť medzi tým, kedy MicroMonitor resetuje ovládač a kedy interný POR mikrokontroléra alebo časovač watchdog spôsobí reset.

Tento kód je 100% riadený udalosťou, a preto je hlavný program jednoducho nekonečnou slučkou. Softvér využíva schému priority prerušenia Maxima a umožňuje hardvéru prerušenia najprv obslúžiť interné prerušenie výpadku napájania (nezamaskovateľné), potom interné prerušenie watchdog a nakoniec prerušenie časovača 0, ktoré sa používa na zapnutie externého watchdogu. DS1232. Redundancia poskytovaná použitím interného aj externého napájania a monitorovania kódu zaisťuje, že tieto kritické funkcie sa vykonávajú bezchybne.

Rutiny prerušenia interagujú tak, ako je znázornené na obrázku 10 nižšie.

Obrázok 10. Interakcia s prerušením / vývojový diagram programu.
Obrázok 10. Interakcia s prerušením / vývojový diagram programu.

Časovač 0 je prerušenie s najnižšou prioritou. Môže byť teda prerušený buď Watchdog Interrupt (vysoká priorita) alebo Power-Fail Interrupt (najvyššia priorita). Ak časovač 0 nie je prerušený, prepne stroboskop (ST) na DS1232 každých 10 ms a prepne LED srdcového tepu každých 50 prepnutí cez ISR (500 ms). Na konci svojho vykonávania vráti riadenie hlavnému programu.

Ak je časovač ISR (Interrupt Service Rutine) prerušený watchdogom a/alebo prerušením výpadku napájania, potom sa riadenie okamžite prenesie na čakajúce prerušenie s najvyššou prioritou. Ak uplynie časovač watchdog, potom sa funkcie watchdog (uvedené na diagrame) vykonajú až do konca a potom sa riadenie prenesie buď na prerušenie výpadku napájania, alebo späť na prerušenie časovača 0, v závislosti od toho, či došlo k výpadku napájania. prijaté počas vykonávania funkcií strážneho psa. Ak nebolo prijaté žiadne prerušenie výpadkom napájania, potom sa prerušenie časovača 0 pokúsi ukončiť. Ak časovač 0 ISR nebude ďalej obťažovaný výpadkom napájania, dokončí sa a vráti sa do hlavného programu. Ak je časovač 0 prerušený prerušením výpadku napájania, umožní to najskôr prerušenie výpadku napájania.

Ak dôjde k prerušeniu výpadku napájania, riadenie sa prenesie naň a ISR sa vykonáva až do úrovne napätia V CCsa vráti nad úroveň varovania pred skorým výpadkom napätia DS87C520s. Keďže toto ISR má najvyššiu prioritu, nemôže byť prerušené prerušením watchdog alebo prerušením časovača 0. To znamená, že ISR pri výpadku napájania musí aktivovať interné aj externé strážne jednotky, inak strážne jednotky resetujú súčiastku, keď napätie klesne. V skutočnosti sa to s najväčšou pravdepodobnosťou nestane, pretože DS1232 je nastavená na prísnejšiu toleranciu ako interný monitor napätia na mikrokontroléri, a preto by DS1232 resetoval mikrokontrolér skôr, ako by sa dosiahla úroveň varovania pred skorým výpadkom napätia mikrokontroléra. Inak povedané, interné monitorovanie napätia DS87C520 sa pravdepodobne nikdy nepoužije a je v tomto systéme nadbytočnou funkciou. K prerušeniu dôjde iba v prípade, že DS1232 zlyhá.

Keď sa prerušenie pri výpadku napájania dokončí, vykoná sa servis ďalšieho najvyššieho čakajúceho ISR. Ak teda k prerušeniu dohliadacieho zariadenia došlo počas obsluhy prerušenia pri výpadku napájania, potom by bolo obsluhované ako prvé. Po dokončení sa časovač 0 ISR pokúsi dokončiť.

Každé prerušenie bliká samostatnou LED diódou, ktorá indikuje, ktorý ISR ​​je momentálne rutinne obsluhovaný.

Ak pre konkrétnu aplikáciu nie je potrebná redundancia, je možné odstrániť ISR pri výpadku napájania a strážení. Ich odstránenie bude tiež vyžadovať zmenu tabuľky vektorových skokov na začiatku programu. Odporúča sa umiestniť začiatok na miesto všetkých nepoužívaných vektorových adries. Kód, ktorý inicializuje a povoľuje výpadok napájania a prerušenie strážneho psa v MainInitje tiež potrebné odstrániť rutinu. Zostane vám tak iba časovač 0 ISR, rutina detekcie resetovania, prázdny hlavný program a podporné funkcie pre sériový port. Dobrý začiatok pre akúkoľvek aplikáciu 8051!

 

 

;*********************************************************************
;* DS87C520 APPS DEVELOMENT SYSTEM *
;* *
;* Application: *
;* *
;* This program was created to demonstrate using a DS1232 for its *
;* power on reset, system power monitoring, pushbutton reset *
;* controller, and watchdog timer. A DS1077 running at 22.2MHz *
;* clocks the system, the and serial port is used to relay status *
;* messages for testing. *
;*********************************************************************
;* Software Revision History *
;* *
;* 1.0 03/21/01 - power management with a DS1232. *
;* *
;* Hardware Description *
;* *
;* P1.0 - LED1 P0.0 - SN74F373N *
;* P1.1 - LED2 P0.1 - " *
;* P1.2 - RXD1 to PC P0.2 - " *
;* P1.3 - TXD1 to PC P0.3 - " *
;* P1.4 - P0.4 - " *
;* P1.5 - P0.5 - " *
;* P1.6 - P0.6 - " *
;* P1.7 - P0.7 - " *
;* *
;* P3.0 - RXD0, Not used P2.0 - Upper *
;* P3.1 - TXD0, Not used P2.1 - Address *
;* P3.2 - P2.2 - Byte *
;* P3.3 - P2.3 - " *
;* P3.4 - ST DS1232 P2.4 - " *
;* P3.5 - LED P2.5 - " *
;* P3.6 - WR\ P2.6 - " *
;* P3.7 - RD\ P2.7 - " *
;* *
;* R0 - Used for HeartBeat in timer0 interrupt. Do Not Destroy! *
;* R5-R7 - Used for wt routine in non-interrupt functions *
;* Do not DESTROY! *
;* *
;* Window 0 = Main Program Execution *
;* Window 3 = Interrupt Execution *
;*********************************************************************
$include (c:\firmware\reg520.inc) ; SFR register defs for compiler
;************* Variable Declarations *************
;** General Variables **
stack equ 02Fh ; bottom of stack
; stack starts at 30h

;************* SFR Declarations *************
;** General SFR Names **
smod_1 equ 0DFh ; buad rate doubler bit declared

;** Port 1 Signal Names **
LED1 equ 90h ; P1.0 is LED1
LED2 equ 91h ; P1.1 is LED2
RX1 equ 92h ; P1.2 is Serial Port 1 RX
TX1 equ 93h ; P1.3 is Serial Port 1 TX

;** Port 3 Signal Names **
ST equ 0B4h ; P3.4 is Watchdog Strobe
LED equ 0B5h ; P3.5 is LED Indicator
;*********************************************************************
;* Hardware Interrupt Vectors (Table on page 95 of DS databook) *
;*********************************************************************

	org 0000h ; Power up and Reset, main program
	ljmp start
	org 0003h ; External Interrupt 0
	ljmp start
	org 000Bh ; Timer 0 Interrupt
	ljmp tmr0_interrupt
	org 0013h ; External Interrupt 1
	ljmp start
	org 001Bh ; Timer 1 Interrupt
	ljmp start
	org 0023h ; Serial Port 0 Interrupt
	ljmp start
	org 002Bh ; Timer 2 Interrupt
	ljmp start
	org 0033h ; PowerFail Interrupt (DS Priority 1)
	ljmp pf_interrupt
	org 003Bh ; Serial Port 1 Interrupt (DALLAS)
	ljmp start
	org 0043h ; External Interrupt 2 (DALLAS)
	ljmp start
	org 004Bh ; External Interrupt 3 (DALLAS)
	ljmp start
	org 0053h ; External Interrupt 4 (DALLAS)
	ljmp start
	org 005Bh ; External Interrupt 5 (DALLAS)
	ljmp start
	org 0063h ; Watchdog Interrupt (DALLAS)
	ljmp wd_interrupt
	org 006Bh ; Real-Time Clock (DALLAS)
	ljmp start
;*********************************************************************
;**** Main Program ****
;**** This program detects the cause of the last reset, then ****
;**** blinks LED while the DS87C520(8051) strobes both the ****
;**** internal and external watchdog timers to keep the watch- ****
;**** dogs from resetting the part. ****
;*********************************************************************
	org 0080h;
start:
	;Code Between start and ASMMain executes after reset only
	
	clr EA ; Disable Interrupts
	lcall MainInit ; Initialize Main Program
	
	;Place Application Specific Startup Code Here!!!
ASMMain:
	; Insert Your Application Here! Note: Timing in this interrupt
	; environment will be interrupted every 10ms by timer 0, and every
	; 2^17 clock cycles by the watchdog interrupt. Thus, application
	; timing may not be like expected. If timing requirements
	; are critical, the timer 0 interrupt can be modified to allow
	; simple events to occur on multiples 10ms, but even those events
	; will occasionally be briefly interrupted by the WD interrupt.
	
	sjmp ASMMain ; Infinite Loop Main Program Does Nothing
				; But Wait For Events to Trigger Interrupts
;*********************************************************************
;**** Main Initialization Routine ****
;**** Initializes Serial Port 1, Timer 1 and 0, Enables the ****
;**** Power Fail Interrupt, Enables Timer 0 Interrupt, ****
;**** Turns on Global Interrupt Enable, Detects Last Rest ****
;**** Cause, Displays Welcome Message on POR ****
;*********************************************************************
;* requires outstr routine *
;* destroys registers A, DPL, DPH, R5, R6, and R7 *
;*********************************************************************
MainInit:
	lcall initSP1 ; Initialize Ser Port 1 & Timer 1/0
	mov R2, #0 ; clear R2 for heartbeat
	setb EPFI ; Enable Power Fail Interrupt
	mov IE, #02h ; Enable Timer 0 Interrupt.
	mov TA, #0AAh ; Timed Access Write
	mov TA, #55h ; " "
	setb EWT ; Enable Watchdog Reset
	setb PWDI ; Give Watchdog Priority Over Timer 0
	setb EWDI ; Enable Watchdog Interrupt
	setb EA ; Turn On Global Interrupt Enable
	
	lcall reset_detect ; Determines Reset Cause
	cjne A, #0, Main_Init_End ; If POR, Display Welcome Message
	lcall intro ; Welcome Message, Serial Port 1
Main_Init_End:
	ret
;*********************************************************************
;**** Timer 0 Interrupt ****
;**** Selects Reg Window 3, Reset Timer 0 High Register to ****
;**** B8h (forces interrupt to occur every 9.96ms), beats ****
;**** LED every 50 interrupt occurrences, toggles ST every ****
;**** occurrence ****
;*********************************************************************
;* requires no routines, R0 Window 3 is heartbeat counter *
;*********************************************************************
tmr0_interrupt:
	orl PSW, #18h ; select register window 3
	mov TH0, #0B8h ; force overflow every 10ms
	inc R0 ; inc. heartbeat (hb) counter
	cjne R0, #50, tmro_interrupt_end ; if hb counter = 50 then beat
	cpl LED ; beat code, P3.5 = hb LED
	mov R0, #0 ; reset hb counter
tmro_interrupt_end:
	cpl ST ; Complement Strobe Pin (ST)
				; Done each tmr0 interrupt pass
				; Neg Edge every 20 ms

	anl PSW, #0E7h ; reselect register window 0
	reti ; Interrupt Return
	
;*********************************************************************
;**** Watchdog Timer Interrupt ****
;**** Called when watchdog timer elapses every 2^17cc. Resets ****
;**** the timer by a timed access write to RWT ****
;*********************************************************************
;* requires no routines or registers. *
;*********************************************************************
wd_interrupt:
	clr EA ; Turns Off Global Interrupt Enable,
				; Disables Nested Interrupts, prohibits PF
				; interrupt from stopping internal WD strobe.
	mov TA, #0AAh ; Timed Access Write
	mov TA, #55h ;
	setb RWT ; Reset Watchdog Timer
	mov TA, #0AAh ; Timed Access Write
	mov TA, #55h ;
	clr WDIF ; Clear Watchdog Interrupt Flag
	cpl LED2 ; Complement P1.2 every time interrupt is
				; serviced.
	setb EA ; Turns On Global Interrupt Enable
	reti
;*********************************************************************
;**** Power Fail Interrupt ****
;**** Writes informative message, waits 500ms, attempts to ****
;**** return to normal operation if power not reset. ****
;*********************************************************************
;* requires outstr routine *
;* destroys registers A, R5, R6, and R7 *
;*********************************************************************
pf_interrupt:
	orl PSW, #18h ; selects register window 3
	mov TA, #0AAh ; timed access write
	mov TA, #55h ; " "
	setb RWT ; Reset Internal Watchdog Timer
	cpl ST ; Complement ST, strobe every other
	
	; time the instruction is hit.
	; provide system specific code required incase a brownout or
	; or total power failure!
	
wait_powerup:
	clr PFI ; clear pf interrupt status flag
	mov R5, #128 ; set regs for wait function
	mov R6, #1 ; to provide 1.7 ms delay
	mov R7, #1 ; " "
	lcall wt ; call delay function
	mov TA, #0AAh ; timed access write
	mov TA, #55h ; " "
	setb RWT ; Reset Watchdog Timer
	cpl ST ; Complement ST, strobe every other
				; time the instruction is hit.
	inc R0 ; Increment reset counter
	cjne R0, #0, wait_powerup ; complement LED1 Every 256 resets
	cpl LED1 ; complement P1.0
	jb PFI, wait_powerup ; If pf interrupt flag still set
				; remain in interrupt.

	ANL PSW, #0E7h ; reselect register window 0
	reti ; into the pf interrupt
	
;*********************************************************************
;**** reset_detect ****
;**** Checks reset status flags to determine what the cause ****
;**** of the latest reset was. Can execute reset type ****
;**** specific code if desired. Does not check for WD rst. ****
;*********************************************************************
;* requires outstr routine *
;* destroys registers DTRP, A, R5, R6, and R7 *
;*********************************************************************
reset_detect:
	jb POR, reset_por ; if por reset detected, elseif
	jb WDRF, reset_wd ; wd reset detected, else
	
	mov DPTR, #mess_DS1232_reset ; point to DS1232 reset message
	lcall outstr ; send reset message
	mov A, #1 ; set reset type flag
	
	; insert code for non internal WD/POR reset here
	
	sjmp end_reset_detect ; Goto end of routine, clear
				; POR and WD reset flags.
reset_wd:
	mov DPTR, #mess_wd ; point to wd reset message
	lcall outstr ; send reset message
	mov A, #1 ; set reset type flag
	
	; insert code for internal watchdog reset
	
	sjmp end_reset_detect ; Goto end of routine, clear
				; POR and WD reset flags.
reset_por:
	mov DPTR, #mess_por ; point to por reset message
	lcall outstr ; send reset message
	mov A, #0 ; set reset type flag
	
	; insert POR reset specific code here
end_reset_detect:
	mov TA, #0AAh ; Timed Access Write
	mov TA, #55h ; " "
	clr WDRF ; Clear WD reset flag
	mov TA, #0AAh ; Timed Access Write
	mov TA, #55h ; " "
	clr POR ; Clear POR reset flag
	ret
	
;*********************************************************************
;**** Initialize Serial Port 1 for PC interface ****
;**** Set up serial port 1 for use with a 22.1 MHz crystal ****
;**** Uses timer 1 for 19200 baud, Mode 1 ****
;*********************************************************************
;* Uses no other routines or registers *
;*********************************************************************
initSP1:
	setb smod_1 ;enable baud rate doubler
	mov SCON1, #50h ;Serial Port 0 asynch, 10 bits
	mov TMOD,#21H ;MSB-T1 on and in 8bit auto-load-mode
				;LSB-T0 on and in 16-bit count mode
				; T0 is free running 2^16cc
				; overflow rate (35.59ms)
	mov TCON, #50H ;t1/0 enabled, not using ext int
				; edge/level select and detect
				; flag/reg
	mov TH1, #0FAH ;set t1 reset val / baud rate=19200
	ret
;*********************************************************************
;**** Intro Display Message Routine ****
;**** Sends out a greeting message ****
;*********************************************************************
;* Uses outstr function *
;* Destroys DPTR *
;*********************************************************************
intro: mov DPTR, #mess_welcome ;send welcome message
	lcall outstr
	mov DPTR, #mess_ret ;send (2) CR and (2) LF
	lcall outstr
	mov dptr, #mess_app ;send application specific message
	lcall outstr
	mov DPTR, #mess_ret ;send (2) CR and (2) LF
	lcall outstr
	ret
;*********************************************************************
;**** Outstring Routine - Serial Port 1 ****
;**** writes a null terminated string to PC via Ser. Port 1 ****
;*********************************************************************
;* Uses outchar routine *
;* Destroys dptr and A *
;*********************************************************************
outstr: clr A ; clear A to get data
	movc A,@A+DPTR ; get data from string at data pointer
	jz exitstr ; if data zero, eos
	lcall outchar ; else send character
	inc dptr ; increment data pointer
	sjmp outstr ; continue, zero condition will terminate
exitstr:
	ret
;*********************************************************************
;**** Outchar routine - Serial Port 1 ****
;**** writes character in Acc to the PC via serial port 1 ****
;*********************************************************************
;* Uses no routines or registers *
;*********************************************************************
outchar:
	mov SBUF1,A ; place A into Serial Port 1 Buffer
waitchar:
	jnb SCON1.1, waitchar ; wait buffer empty flag is set
	clr SCON1.1 ; clear buffer empty flag
	ret
;*********************************************************************
;**** General Wait Function ****
;**** Can wait anywhere between 14.42us to 221 sec. ****
;**** Waits R7 * 867.6 ms if R5 = R6 = 255 ****
;**** Waits R6 * 3.4 ms if R5 = 255 and R7 = 1 ****
;**** Waits R5 * 13.34us if R6 = R7 = 1 ****
;*********************************************************************
;* requires WriteBits3 routine *
;* destroys R2 and A registers *
;*********************************************************************
wt:
	lcall wait16us ; 12.8us of waits
	lcall wait16us
	lcall wait16us
	lcall wait16us
	lcall wait16us
	lcall wait16us
	lcall wait16us
	lcall wait16us
	djnz R5, wt ;3.4ms if R5=255, R6 = R7 = 1
	djnz R6, wt ;867.6ms if R5=255 and R7=1
	djnz R7, wt ;R7*867.6ms if R5 = R6 = 255
	ret
;*********************************************************************
;**** Wait 1.6 us Function ****
;**** Wastes 1.6us of processor time with call, nop and return ****
;*********************************************************************
;* Requires no other routines or registers *
;*********************************************************************
wait16us:
	nop ; 1 nops @4cc each + lcall @16cc + ret @16cc
				; produces approximately 1.6us of delay with a
				; 22.22MHz clock
	ret
;*********************************************************************
;**** MESSAGES ****
;*********************************************************************
mess_welcome:
	db ' Jason''s Proto-board, Rev. 0.2',0Dh,0Ah
	db ' Now uses DS1077 for a clock, DS1267 for a 3-Wire Demo,'
	db 0Dh,0Ah
	db ' and a DS1803 for a 2-Wire Demo., and a DS1232 for',0Dh,0Ah
	db ' power management.',0
	
mess_ret:
	db 0Dh,0Ah,0DH,0AH,0
	
mess_app:
	db ' This program demonstrates using a DS1232 MicroMonitor and'
	db 0Dh, 0Ah
	db ' interrupts to provide robust power management, and event'
	db 0Dh, 0Ah
	db ' event handling',0

mess_wd:
	db 'Internal Watchdog Reset',0Dh,0Ah,0
	
mess_por:
	db 'POR reset', 0Dh, 0Ah, 0
	
mess_DS1232_reset:
	db 'DS1232 Reset (PushButton/Power Failure/External Watchdog)'
	db 0Dh,0Ah,0
	
END ;End of program

Ďalšie informácie

Hmotnosť 4 g
Rozmery 45 × 20 × 10 mm