                    00001           ;TPicSim12
                    00002           ;Programm zum Test des 16F84-Simulators.
                    00003           ;Funktion: Beschreiben und Lesen des EEPROMs
                    00004           ;(c) St. Lehmann   Ersterstellung: 11.05.2011
                    00005           ;Definition einiger Symbole
                    00006           ;19.05.2020 Korrektur WR-Bit (muss nach Ablauf der State Machine stehen)
                    00007           ;18.10.2018 mod. für HSO
                    00008           
                    00009           list c=132          ;Zeilenlänge im LST auf 132 Zeichen setzen
                    00010           
                    00011           indirect equ       0
                    00012           status   equ       03h
                    00013           fsr      equ       04h
                    00014           ra       equ       05h
                    00015           rb       equ       06h
                    00016           count    equ       0ch
                    00017           eedata   equ       08h
                    00018           eeaddr   equ       09h
                    00019           eecon1   equ       08h                 ;auf Bank 1
                    00020           eecon2   equ       09h                 ;auf Bank 1
                    00021             
                    00022           ;Definition des Prozessors
                    00023           device    16F84
                    00024             
                    00025           ;Festlegen des Codebeginns
                    00026           org       0
                    00027  start      
0000 3000           00028           movlw     0                   ;der EEPROM-Speicher von 0 bis 3FH (63) gefüllt          
0001 008C           00029           movwf     count
                    00030  schreiben 
0002 080C           00031           movf      count,w
0003 0089           00032           movwf     eeaddr              ;diese Adresse soll beschrieben werden
0004 3AFF           00033           xorlw     255                 ;Adresse invertieren
0005 0088           00034           movwf     eedata              ;dieser Wert an obige Adresse schreiben
                    00035             
0006 1683           00036           bsf       status,5            ;auf Bank 1
0007 1208           00037           bcf       eecon1,4            ;EEIF zurücksetzen, wird überwacht
0008 1508           00038           bsf       eecon1,2            ;WREN-Bit setzen, sonst kein schreiben möglich
                    00039             
0009 3055           00040           movlw     55h                 ;State-Machine anwerfen
000A 0089           00041           movwf     eecon2
000B 30AA           00042           movlw     0AAh
000C 0089           00043           movwf     eecon2              ;wenn State-Maschine ok und WR-Bit gesetzt wird, 
                    00044           				  ;dann beginnt der Schreibvorgang 
000D 1488           00045           bsf       eecon1,1            ;jetzt WR-Bit setzen, Schreibvorgang startet jetzt!
                    00046             
                    00047  warte    
000E 1E08           00048           btfss     eecon1,4            ;warte bis EEIF auf 1 ist         
000F 280E           00049           goto      warte
                    00050             
0010 1108           00051           bcf       eecon1,2            ;WREN auf 0
                    00052             
0011 1283           00053           bcf       status,5            ;zurück auf Bank 0
                    00054             
0012 0A8C           00055           incf      count
0013 080C           00056           movf      count,w             ;ist der Wert 40H erreicht
0014 3C40           00057           sublw     40h       
0015 1D03           00058           btfss     status,2            ;wenn 0, dann fertig
0016 2802           00059           goto      schreiben
                    00060             
                    00061             
0017 018C           00062           clrf      count               ;jetzt gesamten Speicher lesen
                    00063  lesen:     
0018 080C           00064           movf      count,w
0019 0089           00065           movwf     eeaddr
                    00066             
001A 1683           00067           bsf       status,5            ;auf Bank 1
001B 1408           00068           bsf       eecon1,0            ;RD-Bit auf 1, wird vom PIC wieder auf 0 gesetzt
001C 1283           00069           bcf       status,5            ;zurück auf Bank 0
                    00070             
001D 0808           00071           movf      eedata,w            ;Wert ins W-Register
                    00072             
001E 0A8C           00073           incf      count
001F 080C           00074           movf      count,w             ;ist der Wert 40H erreicht
0020 3C40           00075           sublw     40h       
0021 1D03           00076           btfss     status,2            ;wenn 0, dann fertig
0022 2818           00077           goto      lesen
                    00078             
                    00079  ende     
0023 2823           00080           goto      ende         
                    00081             
