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
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 ...
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.