2051er Serial Terminal

Gast #338462
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 ...
Gast #338463
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

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