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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.