das erste Byte der seriellen Schnittstelle ist stets falsch
Hallo,
man möchte die serielle Schnittstelle ASC0 vom XC16x verwenden, und zwar mit dem Transmit Interrupt.
Die Sendefunktion sieht wie folgt aus:
Code:
void ASC0_vSendData_LCD(unsigned char *lcd_data, unsigned char lcd_number)
{
ASC0_vSendData(lcd_data[0]);
rest_number = lcd_number - 1;
}
Diese soll nur das erste Byte senden. Danach wird die folgende ISR automatisch aufgerufen:
Code:
void ASC0_viTx(void) interrupt ASC0_TINT using RB_LEVEL15
{
static unsigned char i = 1;
if (i <= rest_number)
{
ASC0_TBUF = lcd_data[i];
i++;
}
else
{
i = 1;
}
}
Das Problem ist, das erste Byte ist immer falsch, ab dem zweiten ist alles OK.
Beispiel:
Code:
static unsigned char lcd_text1[] = {0xAA, 0x55, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xA2, 0xB6, 0xAF, 0xBB, 0xFA, 0xD7, 0xAA, 0xCB, 0xD9, 0xA3, 0xBA, 0xCC, 0x33, 0xC3, 0x3C};
unsigned char *lcd_data = &lcd_text1[0];
ASC0_vSendData_LCD(lcd_data, 22);
Aus der seriellen Schnittstelle wird folgendes abgelesen:
0x54, 0x55, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xA2, 0xB6, 0xAF, 0xBB, 0xFA, 0xD7, 0xAA, 0xCB, 0xD9, 0xA3, 0xBA, 0xCC, 0x33, 0xC3, 0x3C
Woran liegt das?
Cu
Senmeis