; ************************************************ ; TestRam testet exteres RAM auf dem STK-200 board ; zaehlt RAM-Positionen durch Schreiben von AA und ; 55 in die einzelnen Positionen, verifiziert den ; Inhalt und gibt bei erfolgreichem Test das MSB ; der obersten RAM-Adresse auf den LEDs aus ; ************************************************ ; Erlaeuterungen zum RAM-Zugriff ; Der MUX-IC 74HC573 und das RAM 62256-70 muessen bestueckt sein. ; Port A ist abwechselnd Adress-Bus fuer das LSB der RAM-Adresse ; und den Datenbus (Multiplex) ; Port C ist der obere Adress-Bus ; Port D Bit 6 ist /RD (Read) am SRAM ; Bit 7 ist /WR (Write) am SRAM ; Die Leitung ALE (Adress Latch Enable) wird verwendet, Pin 30 ; Wenn das gesamte externe RAM ok ist, dann muessen die LEDs am ; Ende alle an sein bis auf das achte. Die hoechste Adresse ; ist dann bei einem 32k-SRAM 7FFF. ; 8515-Bibliothek laden .NOLIST .INCLUDE "8515def.inc" .LIST ; Register .def mp = R16 ; Multi-Purpose .def soll = R17 ; enthaelt abwechselnd AA und 55 ; Reset-/Interrupt-Vektor rjmp main ; Unterprogramme ; Hauptprogramm main: ldi mp,LOW(RAMEND) ;Initiate Stackpointer out SPL,mp ; wegen verwendeten Unterprogrammen ldi mp,HIGH(RAMEND) out SPH,mp ; Port B steuert die LEDs an ldi mp,0xFF ; Alles Ausgaenge out DDRB,mp ; an Datenrichtungsregister Port B ; Geht wieder nicht complilieren: ; SBI MCUCR,SRE ; Setze das SRAM-Bit im MCU-Register ; Ersatz: in mp,MCUCR ; Lese MCU-Control-Register ori mp,0x80 ; Setze Bit 7 out MCUCR,mp ; Wenn das verwendete SRAM langsamer als 70 ns ist und deshalb ; einen zusaetzlichen WAIT-state haben muss, dann muss ; auch das Bit 6 im Port MCUCR gesetzt sein, d.h. der ORI-Befehl ; lautet dann: ORI mp,0xC0 ; Setze Bit 7 und Bit 6 ldi XL,LOW(RAMEND) ; Register XL ist R26, LSB RAM-Adresse ldi XH,HIGH(RAMEND) ; Register XH ist R27, MSB RAM-Adresse ldi soll,0b10101010 ; Bitmuster fuer Test loop: inc XL ; Erhoehe Adresszaehler um 1 brne check ; Nicht Null, MSB ok inc XH ; Erhoehe MSB der Adresse breq check ; Null, MSB uebergelaufen, raus check: st X,soll ; schreibe Bitmuster in SRAM ld mp,X ; Lese die gleiche SRAM-Adresse cp mp,soll ; Vergleiche gelesen mit geschrieben brne Zurueck ; Nicht gleich, raus com soll ; Drehe alle Bits im Bitmuster um (XOR FF) st X,soll ; Noch mal mit 0101.0101 ld mp,X ; Auslesen cp mp,soll ; Vergleichen brne Zurueck ; Nicht gleich, raus com soll ; wieder umdrehen rjmp loop ; Weitermachen Zurueck: ld mp,-X ; Pointer X um eins zuruecksetzen, Ergebnis egal Ungleich: com XH ; XOR FF der obersten RAM-Adresse out PORTB,XH ; auf die LEDs ende: rjmp ende ; Loop fuer immer