Forum: Mikrocontroller und Digitale Elektronik SAB 80C517a - Interrupts & Keil-Monitor


von H. H. (rasclaat)


Lesenswert?

Hallo,

habe folgendes Problem und hoffe, dass ich hier kompetente Tipps 
bekomme:
Ich habe ein neues 80C517A-Entwicklungsboard mit 32kB externem RAM und 
dem Keil-Monitor 10FF0 auf einem EPROM. Das Ding muss ich laut 
Beschreibung im Lieferzustand in Harvard-Architektur betreiben (nach 
Durchtrennen einer Leiterbahn und Einlöten eines Jumpers sowie eines 2. 
ROM-Bausteins ließe es sich auch auf v.-Neumann-Adressierung 
umstellen...).

Die Adressierung des externen Speichers ist dabei laut Datenblatt 
folgende:
  ROM0 (Monitor-EPROM/Code): 0x0000-0x7FFF
  RAM1 (XData): 0x8000-0xFFFF

Speicheraufteilung im Keil-Compiler:
  Code:
  Start 0x8000, Size 0x2000
  XData:
  Start 0xA000, Size 0x8000

Das RAM dient als Speicher für Code & XData, d.h. der Keil-Monitor lädt 
das Programm aus der Entwicklungsumgebung komplett ins RAM, so dass ein 
Debuggen über serielle Schnittstelle am PC möglich ist.

Das ist ja alles ganz schön, funktioniert auch soweit (serielle 
Schnittstellen, I/O-Ports etc.) - bis auf die Interrupts! Deren Vektoren 
liegen nämlich im Speicherbereich, der vom EPROM belegt ist, der 
beschreibbare Code-Bereich geht aber erst ab 0x8000 los. Eine andere 
Speicherkonfiguration funktioniert nicht!
Beim kompilieren einer fehlerfreien! Serviceroutine (hier für Interrupt 
2) erscheint nun:
*** WARNING L5: CODE SPACE MEMORY OVERLAP
    FROM:    000BH
    TO:      7FFFH
Beim Übertragen des entsprechenden Programms meldet der Keil-Monitor:
MONITOR ERROR 22: NO CODE MEMORY AT ADDRESS 000DH

Meine Frage an die Experten ist nun: gibt es eine Möglichkeit, wie ich 
auch ohne zusätzliche Hardware wie nichtflüchtigen Speicher auf die 
Interrupt-Requestadressen zugreifen könnte (ich programmiere in C mit 
Keil µVision3) oder habe ich die bloss die Speichereinstellungen in 
µVisions "Options for Target" versemmelt?

Hoffe, das war einigermassen verständlich...
1000 Dank für eure Bemühungen, bin für jeden Tipp dankbar!

von Peter D. (peda)


Lesenswert?

Du mußt dem Compiler nur sagen, daß die Interruptvektoren umgeleitet 
sind:

c51 INTVECTOR(0x8000) ...


Aber mal im Ernst, wer benutzt denn noch solche Dinosaurier-Boards aus 
den 8051-Urzeiten ?

Das wurde damals in den 80-ern entwickelt, d.h. "neu" kann man dazu 
nicht mehr sagen.


Heutzutage gibts doch reichlich Flash-8051-er mit Bootloader, also alles 
in einem Chip.

Ich hab jedenfalls keine Lust mehr, meine Layoutzeit damit zu 
verschwenden, bei jedem neuen Projekt externes Latch+Flash+SRAM 
ranzupappen, ganz abgesehen von den damit verlorenen 18 IO-Ports.

Nen MAX202 ranpappen und gut is.


Peter

von H. H. (rasclaat)


Lesenswert?

Super, das war's! Danke für die schnelle Hilfe!

<quote>Aber mal im Ernst, wer benutzt denn noch solche 
Dinosaurier-Boards aus
den 8051-Urzeiten ?</quote>

g ich... Zum Experimentieren & Erlernen der Grundlagen (bin kein 
Profi) reicht das völlig aus. Außerdem war's billig und fertig 
aufgebaut!

von Peter D. (peda)


Lesenswert?

Ja, zum lernen ist es o.k.

Bloß zum Bau von eigenen Geräten sollte man was einfacheres, moderneres 
nehmen.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.