C167 Interrupt

Gast #174994
Lesenswert?

Hallo

Ich versuche gerade für meine Diplomarbeit einen C167 in Betrieb zu
nehmen. Die UART wird dabei auch benötigt. Sie scheint mir auch zu
funktionieren.
Aber ich bekomme nicht den von mir erwarteten Hex Code, sonder bloss FF
ins Terminal geschrieben.
Also stimmt Baudrate, Stopbit und Reloadreg. Aber was hab ich falsch
gemacht das nicht meine Zeichenkette heraus kommt? Könnte es mit den
Interrupt zusammenhangen?

Danke für eure Tips
Angehängte Dateien:
Gast #174996
Lesenswert?

void LEER_BUFF(void)
{
  while(S0TIR == 1)
  {
  }
}

Meines Wissens wird dieser Interrupt-Request (Bit 7 im S0TIC)
GESETZT wenn du neue Zeichen eintragen kannst, danach sollte er
gelöscht werden (du verwendest ja keinen Interrupt, welcher dies ja
automatisch machen würde). Fakt ist dadurch das du den S0TBUF ständig
neu belegst kommt dann chrott raus.

besser wäre vielleicht:

void LEER_BUFF(void)
{
  while(S0TIR == 0); // Warten bis übergang von 0 -> 1
  S0TIR = 0;         // IR löschen
}

Außerdem solltest du in main ganz am Ende eine Endlosschleife machen

for(;;);

da sonst unvorhergesehene Dinge passieren (Stack zerschossen,
Programmcode ausgeführt der nicht erwünscht etc.)

Dann noch ein paar Anmerkungen:

Wenn das Programm auch noch etwas anderes machen soll, ist es ratsam
das Senden (und Empfangen) in Interrupts zu machen, da du selbst wenn
du mit 115200Baud arbeitest ca. 86us Sekunden in der Schleife hängt bis
er neue Dinge tun kann (das sind ungefähr 400 MC-Befehle wo er was
sinnvolles tun kann.

Gruss
Gast #174997
Lesenswert?

Danke für die Tips

Habe jetzt eine Routine die über die Interrupts gesteurt wird. Im Keil
Simulator wird dann auch der ganze String ausgegeben.
Sobald ich das ganze auf den Prozessor lade und im Terminal dann
anschaue, bekomme ich nur FF FF FF FF FF FF FF u.s.w. er will garnicht
mehr aufhören. Was kann das sein?
Angehängte Dateien:
Gast #174998
Lesenswert?

S0TINT(0x2A) / S0TBINT(0x47) sind richtig per #define definiert ?

Ich tippe mal das er in den Wald springt (und dann irgendwann mal
wieder bei 0 anfängt)

Du solltest in deiner START167.a66 nachschauen ob
CLR_MEMORY = 1 oder 0 und INIT_VARS = 1 ( wenn hier eine 0 steht dann
werden Variablen die du initialisierst nicht vorbelegt).

Für einen Test kannst du auch "const char cSenden[] = { 0x11 ... };"
Die Angabe "const" führt dazu das die Variable im ROM verbleibt und
von dort auch gelesen wird.

! Wie sieht die Hardware aus, gibts da ein RAM und wenn ja ist
BUSCON1/ADRSEL1 richtig definiert !

Generell: Max232 zwischen PC und C167 ?

mehr fällt mir nicht ein...

Gruss

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren