Forum: Mikrocontroller und Digitale Elektronik C167 Interrupt


von Toni (Gast)


Angehängte Dateien:

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

von Johannes (Gast)


Lesenswert?

hmm, hast du den microcontrollen direkt an den com port angeschlossen?!
in der regel bracht man da noch n chip zwischen der die signale
verstaerkt.
zb MAX3232 von maxim ...

von T.Stütz (Gast)


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

von Toni (Gast)


Angehängte Dateien:

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?

von T.Stütz (Gast)


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

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.