Hallo,
man möchte die serielle Schnittstelle ASC0 vom XC16x verwenden, und zwar mit dem Transmit Interrupt.
Die Sendefunktion sieht wie folgt aus:
Diese soll nur das erste Byte senden. Danach wird die folgende ISR automatisch aufgerufen:Code:void ASC0_vSendData_LCD(unsigned char *lcd_data, unsigned char lcd_number) { ASC0_vSendData(lcd_data[0]); rest_number = lcd_number - 1; }
Das Problem ist, das erste Byte ist immer falsch, ab dem zweiten ist alles OK.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; } }
Beispiel:
Aus der seriellen Schnittstelle wird folgendes abgelesen: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);
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







					
					
					
						
Zitieren

Lesezeichen