Forum: Mikrocontroller und Digitale Elektronik Array über Serielle Schnittstelle senden macht Probleme


von Florian (Gast)


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

von zagge (Gast)


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.

von Ralph (Gast)


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.

von zagge (Gast)


Lesenswert?

TXC Flag beim Start löschen dürfte helfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.