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....
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 **************************************/
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.