Ich möchte mit meinem AVR90S8535 eine zweite serielle Schnittstelle programmieren. Hat dies schon einmal jemand mit C programmiert??? Wenn ich das selber programmieren will, kann mir da jemand Infos geben wie ich dies programmieren muss??? Für Hilfe bin ich sehr dankbar! MfG AVRFreak
Hallo, also eine Software-UART in C programmieren wird wohl nicht gehen. Du bekommst einfach kein genaues Timing hin. In Assembler dürfte das kein Problem sein. Schau dir mal diversen Code für den 90S1200 an. Dieser hat nämlich keinen Hardware-UART. Da müsste es einigen Code für Software-UART geben. Gruß, Florian
Tss, tss, tss, wenn das die C-Freaks lesen... ;-) Gruß, Bekennender Assembler-Fan
Also ich kann mir nicht vorstellen dass man in c kein Timing zusammenbringen sollte. Von der Grundidee ist ein SW-UART recht einfach: *) TX Startbit setzen, Bitlänge warten, 1. Datenbit setzen, warten, 2. bis 8, datenbit ausgeben, Stopbit ausgeben, warten; danach mit dem nächsten byte weitermachen. Wers elegant will wartet natürlich nicht, sondern wird alle Bitlängen einen Interrupt auslösen. *) RX Rx-Leitung auf flankengetriggerten Interupteingang. Nach Auftreten eines Ints (=Beginn des Startbits) 1/2 Bitlänge warten, immer noch gleicher Pegel -> weiter machen, andernfalls wars nur eine Störung, ab dann alle Bitlängen (somit immer in der Mitte eines Bits) 8 mal sampeln, eventuell noch das Stopbit auswerten und Interrupt wieder scharfstellen. Eleganterweise auch hier das warten durch Timerinterrupt ersetzen und wers ganz genau nimmt sampelt nicht einfach sondern macht eine zwei aus drei Erkennung. grüsse leo9
"Tss, tss, tss, wenn das die C-Freaks lesen... ;-)" Genau, die stellen doch sofort mal eben ein C-Beispiel mit rein. Aber um Dir nicht den ganzen Spaß zu nehmen, ist das hier nur die Senderoutine. "Du bekommst einfach kein genaues Timing hin". Von wegen ! Peter
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.