Forum: Mikrocontroller und Digitale Elektronik 2051er Serial Terminal


von Jankey (Gast)


Lesenswert?

also hab ein Terminalprogramm für den 2051er, Quarz: 11,0592Mhz

Init Code:
void Init_Serial()
{
EA = 0;

TI = 0;        /* clear transmit interrupt */
TR1 = 0;         /* stop timer 1 */
ET1 = 0;         /* disable timer 1 interrupt */
//  PCON |= 0x80;    /* 0x80=SMOD: set serial baudrate TMOD &= ~0xF0; 
/*
clear timer 1 mode bits */
TMOD |= 0x20;    /* put timer 1 into MODE 2 */
TH1 = 0xFD;      // FD°

TR1 = 1;         /* start timer 1 */
EA = 1;           /* Enable Interrupts */

SM0 = 0;
SM1 = 1;          /* serial port MODE 1 */
SM2 = 0;
REN = 1;         /* enable serial receiver*/

TI = 0;        /* clear transmit interrupt */
RI = 0;        /* clear receiver interrupt */

ES = 1;        /* enable serial interrupts */
EA = 1;           /* Enable Interrupts */
}

void Send_Serial(unsigned char value)
{
SBUF = value;
SCON &= 0xFD;    // Byte Zurück Senden
}


void Comm_Serial() interrupt 4
{
if (TI != 0)    /* Received data interrupt */
{
TI = 0;
return;
}

if (RI != 0)    /* Received data interrupt */
{
RI = 0;
Send_Serial( SBUF );
}

SCON &= 0xFC;          // Clear S0 of IRF
}


So kann mir jedmand erklären warum das ding nicht Sauber das
zurückschickt was es empfängt???

0xFD sollte doch für 11,059 passen ...

von peter dannegger (Gast)


Lesenswert?

"0xFD sollte doch für 11,059 passen ..."

Weiß ich nicht, warum läßt Du das nicht den Compiler ausrechnen ?

TH1 = -(unsigned char)(XTAL  BAUD  12 / 16 + 0.5);


Das SCON hat in den Interrupts nichts zu suchen, das wird nur einmal
beim Init gesetzt und dann in Ruhe gelassen.

Ich nehme mal an, die UART spielt verrückt, wenn man ihr mitten im
Senden oder Empfangen die Modi durcheinander bringt.


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.