                    00001           ;TPicSim9
                    00002           ;Programm zum Test des 16F84-Simulators.
                    00003           ;Funktion: SLEEP-Befehl
                    00004           ;(c) St. Lehmann   Ersterstellung: 31.03.2016
                    00005           ;19.05.2020
                    00006           ;20.04.2021 Ergänzungen bei den Kommentaren
                    00007           ;Definition einiger Symbole
                    00008           
                    00009           list c=132          ;Zeilenlänge im LST auf 132 Zeichen setzen
                    00010           
                    00011           status   equ       03h
                    00012           rb       equ       06h
                    00013           var      equ       0ch
                    00014           liste1   equ       10h
                    00015           liste2   equ       11h
                    00016           liste3   equ       12h
                    00017           liste4   equ       13h
                    00018           
                    00019           ;Definition des Prozessors
                    00020           device    16F84
                    00021             
                    00022           ;Festlegen des Codebeginns
                    00023           org       0
                    00024           ;wenn mit eingeschaltetem Watchdog-Timer der SLEEP-Befehl aktiviert wird,
                    00025           ;dann wird das Programm nach ca. 2,3s weiter laufen.
                    00026           
                    00027           ;wenn der Watchdog-Timer ausgeschaltet ist, beendet ein RESET den SLEEP-Modus
                    00028           ;bei einem RESET am MCLR-Pin springt der Controller zur Adresse 0 /PD und /TO
                    00029           ;sind entsprechend gesetzt.
                    00030           ;bei einem Watchdog-Timeout macht der Controller beim Befehl der auf den SLEEP
                    00031           ;folgt weiter. Das gilt auch, wenn ein Interrupt den SLEEP beendet.
                    00032           
                    00033           ;Auch ein Interrupt an RB0 oder RB4 bis RB7 beendet den SLEEP-Modus, wenn GIE
                    00034           ;gesetzt ist
                    00035           
                    00036  start      
0000 018C           00037           clrf      var                 ;
0001 0E03           00038           swapf     status,w
0002 0090           00039           movwf     liste1              ;T0=1 , PD=1
0003 0063           00040           sleep                         ;warte bis Watchdogtimer anspricht
0004 0E03           00041           swapf     status,w
0005 0091           00042           movwf     liste2              ;T0=0 , PD=0 bei Watchdog-Timeout
                    00043           ;T0=1 , PD=0 bei RESET oder Interrupt
                    00044             
                    00045             
                    00046  ende     
0006 2806           00047           goto      ende         
                    00048             
