; ************************************************ ; TestRam testet exteres RAM auf dem STK-200 board ; zählt 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 ; ************************************************ ; Erläuterungen zum RAM-Zugriff ; Der MUX-IC 74HC573 und das RAM 62256-70 müssen bestückt sein. ; Port A ist abwechselnd Adress-Bus für 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 müssen die LEDs am ; Ende alle an sein bis auf das achte. Die höchste Adresse ; ist dann bei einem 32k-SRAM 7FFF. ; 8515-Bibliothek laden .NOLIST .INCLUDE "C:\avrtools\appnotes\8515def.inc" .LIST ; Register .def mp = R16 ; Multi-Purpose .def soll = R17 ; enthält 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 Ausgänge 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 zusätzlichen 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 für Test loop: inc XL ; Erhöhe Adresszähler um 1 brne check ; Nicht Null, MSB ok inc XH ; Erhöhe MSB der Adresse breq check ; Null, MSB übergelaufen, 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 zurücksetzen, Ergebnis egal Ungleich: com XH ; XOR FF der obersten RAM-Adresse out PORTB,XH ; auf die LEDs ende: rjmp ende ; Loop für immer