;===================================================================================================
;Progadap.src - Programmieradapter für AT89S8253
;===================================================================================================

;---------------
;|Programmstart|
;---------------
org          0000h

;initialisieren der SPI:
             orl   0D5h,#01110111b         ;SPCR
                                           ;Die Bedeutungen der Bits dem Datenblatt entnehm

;initialisiern des EEPROMs
             orl   96h,#00001000b          ;Lesefreigabe für EEPROM


             setb  p1.3                    ;Reset am Slave-Controller auf High setzen

;Freischalten des Programmiermodus
prog_init:   mov   a,#10101100b
             lcall spi
             mov   a,#01010011b
             lcall spi
             mov   a,#00000000b            ;vervollständigen Befehl auf 4 Byte
             lcall spi
             mov   a,#00000000b
             lcall spi

chip_erase:  mov   a,#10101100b
             lcall spi
             mov   a,#10000000b
             lcall spi
             mov   a,#00000000b
             lcall spi
             mov   a,#00000000b
             lcall spi

;übertragen der Daten aus speicher
             mov   dph,#00h                ;Anfangsadresse für Codespeicher
             mov   dpl,#00h
prog_code:   mov   a,#00100000b            ;Befehl: Code wird übertragen
             lcall spi
             mov   a,dph
             lcall spi
             mov   a,dpl
             lcall spi
             movx  a,@dptr                 ;Code aus Speicher holen
             lcall spi
             inc   dptr                    ;nächstes Codesegment auswählen

             mov   a,dph                   ;Endadresse erreicht?
             cjne  a,#07h,prog_code
             mov   a,dpl
             cjne  a,#0FFh,prog_code

;Übertragung beenden
             clr   p1.3


;Interrupt enable Interrupt alle 10ms

ende:        sjmp  ende


;---------------------------------------------------------------------------------------------------
;Unterprogramme
;---------------------------------------------------------------------------------------------------

;-----
;|SPI|
;-----
;überträgt Inhalt von a über die SPI
spi:         mov   86h,a                   ;zu sendendes Byte in SPDR schreiben
warte_spi:   mov   a,0AAh
             anl   a,#10000000b            ;fertig übertragen?
             jz    warte_spi
             mov   a,86h                   ;empfangenes Byte in a schreiben

             ret

 

