Bekomme DS89C430 nicht richtig zum Laufen.

Gast #1937960
Lesenswert?

Hi Leute,

ich habe hier einen DS89C430 DIP auf meinem Steckbrett mit Max232 und 
versuche nun den Controller zu Programmieren. Das Testprogramm, habe ich 
mit der Keil Demoversion geschrieben, hier der Code:
1
#include <ds89c4xx.h>
2
#include <stdio.h>
3

4

5
void serialInit() {
6
  TMOD = 0x21; // Timer 1: 8-bit autoreload from TH1
7
  TH1 = 0xf5; // 9600 baud rate at 20mhz
8
  CKMOD = 0x38; // Use system clock for timer inputs
9
  T2CON = 0x00; // Serial 0 runs off timer 1 overflow
10
  TCON = 0x50; // Enable timers 0 and 1
11
  SCON0 = 0x50; // Enable serial port 0
12
  SBUF0 = ' ';
13
}
14

15
void main() {
16
  serialInit(); // Initialize serial port 0
17
  printf("\rHello from the Keil C51 compiler\r");
18
  while (1) {
19
    ; // Endless loop
20
  }
21
}
Der Controller läuft bei 20Mhz, die Baudrateneinstellung müsste so 
stimmen.
Ein anderes Testprogramm, welches einfach nur eine LED am Port 1.0 ein / 
ausschalten sollte, funktionierte ebenso nicht.

Im Datenblatt steht, man muss zuerst den PSEN Pin floaten lassen, dann 
Reset. Ich ziehe also das Kabel vom PSEN und danach vom Reset, tut sich 
aber nichts. Auch wenn ich dann versuche einen Reset auszuführen indem 
ich die Resetleitung auf Plus lege und wieder wegnehme, tut sich auch 
nichts...

Flashen lässt sich der Chip ohne Probleme über das MTK von Dallas/Maxim.

Der Hardwareaufbau:
20mhz Quarz, Max232<->RS232 vom Controller,
zum Flashen: RST = 1, PSEN = 0, EA = 0

Ich hoffe, jemand von euch kann mir weiterhelen...
Gast #1937997
Lesenswert?

Ja natürlich, wie gesagt, er lässt sich ja auch Flashen...
1
DS89C430 LOADER VERSION 2.1  COPYRIGHT (C) 2002 DALLAS SEMICONDUCTOR
2
> Loading File D:\Dokumente und Einstellungen\bazi\Desktop\89c430test\test.hex
3

4
Erasing Flash   ==> Completed
5

6
Loading Hex file... 
7

8
.......
9

10
Load complete.
11

12
>
Gast #1938188
Lesenswert?

Hmmmm jetzt scheints zu funktionieren. In der letztendlichen Schaltung 
wollte ich einen 7404 statt dem 74125 wie im Datenblatt verwenden, habs 
mal ausprobiert aufm Steckbrett und funzt :)

siehe Anhang
Angehängte Dateien:
#1938201
Lesenswert?

Na gut.
Lädt MTK das Programm in den Programmbereich des Prozessors?
Ist der EA-Pin auf '1', wenn zB. das (Blink)Programm nach dem 
Ladevorgang starten soll?
Im Datenblatt des Controllers ist zu sehen, dass Dallas einen 74X125 zur 
Steuerung des Bootloaders einsetzt; er ist mit den entsprechenden 
Portpins des Controllers verbunden und wird vom DTR-Signal des 
Programmierrechners aktiviert (diese Funktion im MTK anwählen). Falls 
dieser Baustein nicht zur Verfügung steht, bietet es sich an, die 
Port-Pins des Controllers mit Einzeltransistoren in 
Open-Collector-Konfiguration (oder hochohmigen Kollektorwiderständen) zu 
beschalten, Ansteuerung der Transistoren wie oben.
Zuletzt muß natürlich sichergestellt seim, das der Linker der 
Keil-Entwicklungsumgebung zumindest den Start-Up-Code des 
Anwendungsprogramms an Adresse 0x0000 im Programmspeicher des 
Controllers ablegt.
#1938479
Lesenswert?

Kunststück, ich bastele gerade an einem autonomen Rasenmäher, dessen 
Hirn ein DS89C450@40MHz ist.
Glückwunsch!
Vielleicht noch eine Anmerkung zum '125 bzw zur von mir vorgeschlagenen 
Beschaltung. Beide haben gemeinsam, dass sie im inaktiven Zustand 
'schwache' Pegel an die Pins des Controllers legen. Damit besteht die 
Möglichkeit, diese während des Programmlaufs durch 'harte' Signale aus 
anderen Schaltungsteilen zu überschreiben und den Programmablauf zu 
beeinflussen. Vorteil der Anordnung ist, dass ohne 
Hardwareänderung(Jumper umstecken, Stecker abziehen usw.) vom 
Programmieren direkt in den Betrieb und zurück gewechselt werden kann.

Nun zur Frage, die ich allerdings nur bedingt und relativ allgemein 
beantworten kann, da ich nicht mit der Keil-Umgebung und nicht unter 
Windows mit 8051-Prozessoren arbeite(im Fall des Dallas-Prozessors habe 
ich mir ein etwas rustikales MTK für DOS geschrieben, so dass ich meinen 
alten DOS-Compiler, der selbstverständlich auf einem lupenreinen 
DOS-Rechner läuft, verwenden kann).

Die Linkereinstellung, besser Linker-Locater-Einstellungen, brauchen 
fürs erste nicht geändert werden. Der Programmcode wird nach Adresse 
0x0000 gelinkt. Den Konstanten- und Variablensegmenten(IDATA, DATA, 
XDATA), mit denen der Compiler arbeitet, in dieser Phase schon 
Startadressen zuzuweisen, scheint mir nicht sinnvoll zu sein, da der 
Compiler den Überblick hat. Außerdem bietet das MTK ähnliche 
Möglichkeiten.

Die Abbildung der Grundeinstellungen in besagter AppNote zeigt die 
verschiedenen Möglichkeiten auf, das Speichermodell für eine spezielle 
Anwendung zu wählen. Für den von Dir verwendeten Prozessor, ohne 
externen Daten- oder Programmspeicher kommt nur ein kleines 
Speichermodell in Frage, also SMALL oä, bei dem der interne Ram(IDATA?) 
und der interne Flash(CODE) verwendet werden. Der auf dem Chip vorhanden 
Ram(XDATA) kann sowieso erst zur Laufzeit aktiviert werden und dann ist 
hoffentlich klar, was mit dem Speicherzuwachs getan werden soll. Die 
Option 'double DPTR' kann aktiviert werden(wenn's nichts nützt, so 
schad's doch nichts).
mfg
#1962813
Lesenswert?

>   SCON0 = 0x50; // Enable serial port 0

>  printf("\rHello from the Keil C51 compiler\r");

Zumindest beim Raisonance-Compiler erwartet printf() bzw. putch() ein 
gesetztes TI-Flag. Putch() prüft vor dem Versenden, ob die Schnittstelle 
frei ist und wartet daher bei Dir ewig. Setzte SCON0 mal auf 0x52...

tschuessle
Bernhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren