Forum: Mikrocontroller und Digitale Elektronik Einstellung der MIDI Baudrate für einen 80c537


von theo (Gast)


Lesenswert?

Guten Tag,

ich baue zur Zeit eine Midi Controllerbox. Ich benutze als MC ein
Infineon 80C537 Entwicklungsboard von Elektor. Hab bis jetzt alles
geschafft (analoge Digitale Ein und Ausgänge etc).
Nur die Einstellung der Baudrate auf 31250 Baud bereitet mir Probleme.
Der Controller hat 2 Serielle Ausgänge, von denen einer laut Datenblatt
eine eigene Baudratenerzeugung hat. Habe das aber leider nicht
hinbekommen.
Der Controller kann per Jumper zwischen 16 und 12 MHZ umgeschaltet
werden (leider keine Ahnung ob statt der 12MHZ ein 11.059 MHZ Quarz
eingebaut ist).

im Momet benutze ich diesen code zur initialisierung des uart:

SCON = 0x50; /* Setup serial port control register */
             /* Mode 1: 8-bit uart var. baud rate */

TMOD = 0x20; /* Set M1 for 8-bit autoreload timer */
TH1 = 0xFE; /* Set autoreload value for timer 1 */
            /* 9600 baud with 11.0592 MHz xtal */
TR1 = 1; /* Start timer 1 */


eine Änderung in TH1 macht sich aber leider nicht bemerkbar (bin über
ein Hyperterminal verbunden).

Hoffe ihr könnt mir helfen. Ich überlege jetzt schon viele Nächte aber
es geht nicht vorran.


Vielen Dank im vorraus....

von tex (Gast)


Lesenswert?

mein 80537 hatt nch keinen int. Quarz aber wenn im Datenblatt 12MHZ
steht, werden es auch 12 sein. Ich bin mir nicht sicher dass das
klappt, was Du da in der Initialisierung machst.

/******************* serial_port
****************************************/
/******************* putch erfassen *******************************/
void putch(char ch)
{

while(!(TRANSMIT));

S1CON=S1CON&0xfd; /* Löschen des TI-Bit */

BUFFER=ch;

} /* putch */

/******************* getch erfassen *******************************/
char getch()
{

while(!(RECIEVE));

S1CON=S1CON&0xfe; /* Löschen des RI-Bit */

return(BUFFER);

}

/******************* printstring erfassen
*******************************/
void printstring(char *str)

{
 char i=0;
 while(str[i]!=0) {
  putch(str[i]);
  i=i+1;
 } /*WHILE*/
} /* printstring */


/******************* initser1 erfassen
*******************************/
void initser1()
{
S1RELL=0xDC;
S1RELH=0x03;
S1CON=0xb2;
}

/******************* Ausgabe erfassen *******************************/
void Ausgabe(char *str)
{
 PCON = fast;
 Watchdog();
 initser1();
 printstring(str);
 putch(0x0d);
 putch(0x0a);
}
/******************* serial end **************************************/

von theo (Gast)


Lesenswert?

Super vielen Dank, dass hilft sehr.
Was ist das für ein compiler, dass RECEIVE und TRANSMIT definiert sind.
Ich denke S1CON ist nicht bit-addressierbar.......


Gruss

Theo

von tex (Gast)


Lesenswert?

S1CON=0xb2 schreibt ja auch ein ganzes Byte ins Register.  RECEIVE und
TRANSMIT sind wohl eigene Defines.
#define TRANSMIT S1CON&0x02
#define BUFFER S1BUF
#define RECIEVE S1CON&0x01
der Compiler ist ein http://www.raisonance.com/ Compiler gewesen,
inzwischen 12 Jahre alt und damals schon deutlich besser als das Zeug
das man heute bekommt.

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.