Array über Serielle Schnittstelle senden macht Probleme

Gast #2586476
Lesenswert?
• ▲
▼
Hallo Zusammen,

Ich habe ein kleines Problem mit folgendem C-Code. Das Problem tritt 
sowohl bei einem PIC18F2550 (den ich hier bei mir habe) aber auch bei 
einem ATMEGA32 auf.

Problem:
Das ganze funktioniert so halb. Wenn ich den µC starte sendet er alles 
ganz normal nacheinander. Wenn ich ihn aber mit einem Reset irgendwo 
zwischen drin stoppe, z.B. bei der Zahl 14, und ich den Reset Knopf 
wieder los lasse beginnt er nicht bei der Zahl 0 sonder bei der Zahl 15. 
Danach sendet er genau 7 Stellen, also 15,...,21 und daraufhin folgt 
dann wieder 150,0,1,...,31

Die Routine "RS_232_Data" wird aus einem anderen Programmteil immer 
wieder aufgerufen.
 - Baud = 9600
 - Interner Oszillator ist mit 8 Mhz getaktet

Hat das schon mal jemand von euch gehabt oder eine Erklärung dafür?
1
void RS_232_Data (void)
2
{
3
unsigned char x;
4
unsigned char i;
5
unsigned char Signal [31] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
6
x = 31;        //Anzahl der zu senden Bytes
7
i = 0;
8
  while (PIR1bits.TXIF == 0);  //Bereit zum senden eines neuen Bytes?
9
  TXREG = 150;        //sende Startbyte
10
  while (x>0)
11
  {
12
  while (PIR1bits.TXIF == 0);//Bereit zum senden eines neuen Bytes?
13
  TXREG = Signal[i];    //alle Bytes der reihe nach Senden
14
  x=x-1;
15
  i++;
16
  }
17
}

Ich hoffe mir kann jemand weiterhelfen :)

Gruß Florian
Gast #2586501
Lesenswert?
• ▲
▼
ohne jetzt genauer ins Datenblatt geschaut zu haben:
ich vermute mal, dass beim Reset der Transmit Buffer nicht gelöscht 
wird, da also noch 7 Bytes auf Ausgabe warten und dann auch brav 
ausgegeben werden.
Gast #2586503
Lesenswert?
• ▲
▼
Da wird noch nach dem RESET irgendetwas nicht sauber initialisiert.
Nach Power On stimmt es, nach Reset nicht, ==> also hast du irgendwo 
eine Initialisierung im Code vergessen.

Würde mal drauf tippen das der Ram nach dem Reset nicht so sauer ist wie 
du es erwartest.
Insbesondere den Stack solltest du dir mal ansehen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.