;TPicSim12
;Programm zum Test des 16F84-Simulators.
;Funktion: Beschreiben und Lesen des EEPROMs
;(c) St. Lehmann   Ersterstellung: 11.05.2011
;Definition einiger Symbole


indirect equ       0
status   equ       03h
fsr      equ       04h
ra       equ       05h
rb       equ       06h
count    equ       0ch
eedata   equ       08h
eeaddr   equ       09h
eecon1   equ       08h                 ;auf Bank 1
eecon2   equ       09h                 ;auf Bank 1

;Definition des Prozessors
    device    16F84

;Festlegen des Codebeginns
    org       0
start
    movlw     0                   ;der EEPROM-Speicher von 0 bis 3FH (63) gef?llt
    movwf     count
schreiben
    movf      count,w
    movwf     eeaddr              ;diese Adresse soll beschrieben werden
    xorlw     255                 ;Adresse invertieren
    movwf     eedata              ;dieser Wert an obige Adresse schreiben

    bsf       status,5            ;auf Bank 1
    bcf       eecon1,4            ;EEIF zur?cksetzen, wird ?berwacht
    bsf       eecon1,2            ;WREN-Bit setzen, sonst kein schreiben m?glich
    bsf       eecon1,1            ;WR-Bit setzen

    movlw     55h                 ;State-Machine anwerfen
    movwf     eecon2
    movlw     0AAh
    movwf     eecon2              ;Schreibvorgang beginnt jetzt

warte
    btfss     eecon1,4            ;warte bis EEIF auf 1 ist
    goto      warte

    bcf       eecon1,2            ;WREN auf 0

    bcf       status,5            ;zur?ck auf Bank 0

    incf      count
    movf      count,w             ;ist der Wert 40H erreicht
    sublw     40h
    btfss     status,2            ;wenn 0, dann fertig
    goto      schreiben


    clrf      count               ;jetzt gesamten Speicher lesen
lesen:
    movf      count,w
    movwf     eeaddr

    bsf       status,5            ;auf Bank 1
    bsf       eecon1,0            ;RD-Bit auf 1, wird vom PIC wieder auf 0 gesetzt
    bcf       status,5            ;zur?ck auf Bank 0

    movf      eedata,w            ;Wert ins W-Register

    incf      count
    movf      count,w             ;ist der Wert 40H erreicht
    sublw     40h
    btfss     status,2            ;wenn 0, dann fertig
    goto      lesen

ende
    goto      ende
