Hi,
um Dir helfen zu können wäre noch interessant
- wie die Funktion ASC0_vSendData() aussieht
- warum Du das erste Byte nicht auch im Interrupt überträgst
Gruß,
askazo
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
Hi,
um Dir helfen zu können wäre noch interessant
- wie die Funktion ASC0_vSendData() aussieht
- warum Du das erste Byte nicht auch im Interrupt überträgst
Gruß,
askazo
ist in dem lcd_data [0] auch immer das drinn was du erwartest ? beschreibst du es irgendwo mit AA ? oder nimmt der µC immer was im Speicher steht an der stelle lcd_data[0] ?
[X] <-- Nail here for new Monitor
Sorry, ich habe vergessen, die Methode "ASC0_vSendData()" hier zu posten:
Ist es möglich, das erste Byte aus dem Interrupt zu senden? Eigentlich wird die Methode "ASC0_vSendData()" eingesetzt, um weitere Senden zu triggern. Die Methode wird aus dem Tool "Dave" generiert mit der Beschreibung:Code:void ASC0_vSendData(uword uwData) { ASC0_TBUF = uwData; // load transmit buffer register }
This function writes a send data initialization word into the transmit buffer register.
Ich interessiere mich sehr für das erste Senden aus dem Interrupt.
Cu
Senmeis
okay ihc hab da jetzt nur etwas gesehen dass mich verwirrt, aber ich weis nicht obs hilft, aber beistartest du den lcd index mit 1 obwohl arrays bei 0 anfangen, kanns sein dass das erste byte nur zufällig mit irgendwas initialisiert ist und du vergisst das erste byte zu adressieren?Code:static unsigned char i = 1; if (i <= rest_number) { ASC0_TBUF = lcd_data[i];
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Lesezeichen