senmeis
25.02.2011, 10:01
Hallo,
man möchte die serielle Schnittstelle ASC0 vom XC16x verwenden, und zwar mit dem Transmit Interrupt.
Die Sendefunktion sieht wie folgt aus:
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:
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:
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
man möchte die serielle Schnittstelle ASC0 vom XC16x verwenden, und zwar mit dem Transmit Interrupt.
Die Sendefunktion sieht wie folgt aus:
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:
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:
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