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