Forum: Mikrocontroller und Digitale Elektronik 8051 serielle schnittstelle


von killerkakerlake (Gast)


Lesenswert?

vermutlich gibt es hier soetwas schon einmal, aber ic nicht viel zeit 
hab, versuch ich es so.

folgendes Problem:
der adc des 8051 soll die spannung einer schaltung ~60-200 mV messen und 
über die serielle schnittsttelle an den Computer schicken.
der Computer soll diesen wert daraufhin mit einem anderen vergleichen 
und wenn die messung zu hohe werte ausgibt, soll vom computer aus über 
die serielle schnittstelle etwas zurückgeschickt werden, damit die 
messung beendet wird.
das C-Programm mit dem Computer bekomm ich hin, aber bei Serieller 
schnittstellenprogrammierung via 8051 steh ich komplett an.

Frage: Hat jemand vllt ein paar referenzfiles oder so etwas ähnliches 
sogar schon geschrieben und wil mir seine erfahrungswerte von euch zu 
gute kommen lassen, ist ziemlich dringend??

mfg killerkakerlake

von Ralf (Gast)


Lesenswert?

Da wir wissen, welchen 8051 du verwendest, wird dir sicherlich 
irgendwann jemand seinen Code geben...
Für unwahrscheinlichen Fall, dass doch niemand weiss, welche MCU du 
verwendest, sind folgende Schritte für einen Standard-8051 nötig:

- Timer 1 einstellen, 8-Bit mit Autoreload, passende Reloadwerte 
berechnen, Timer starten (-> vorzugsweise Baudratenquarz verwenden)
- UART konfigurieren (8/9-Bit Übertragung, etc.)
- Bei Interrupt-Betrieb ES setzen (und IE nicht vergessen)

Natürlich die entsprechenden Routinen für Senden/Empfangen bzw. falls 
gewünscht Ringbuffer, etc. nicht vergessen...

Hoffe, ich hab nix vergessen...

Ralf

von killerkakerlake (Gast)


Lesenswert?

infineon SAF-C517A-LN

mfg

von killerkakerlake (Gast)


Lesenswert?

das ist ein Atmega8 xD

von Tobias P. (hubertus)


Lesenswert?

Der C517A hat einen Baudratengenerator.
Beachte das BD-Bit, das musst du setzen um den verwenden zu können.
Mit dem Standard-12 MHz Quarz war der Baudraten-Wert 9Dh, wenn ich mich 
recht erinnere (jedenfalls  etwas mit 9 und D), damit kommst du auf 9600 
Baud.
Aktiviere den Baudratengenerator, setze die Baudrate, und schon kannst 
du senden & empfangen.
Senden ist denkbar einfach mit

clr ti0
mov S0BUF,#irgend ein datenbyte
jnb ti0,$

und empfangen kannst du mit

clr ri0
jnb ri0,$
mov a,S0BUF

schau mal im Handbuch nach, der BRG ist da sehr gut erklärt.



PS: deine Shift-Taste klemmt.

von faustian (Gast)


Lesenswert?

"Welchen 8051"

Wuerde man bei der Angabe "des 8051" nicht ausgehen von P8051, P80C51, 
P8751 oder einer anderen damit pin- und ausstattungskompatiblen 
Variante?

von killerkakerlake (Gast)


Lesenswert?

es ist ein Infineon SAF-C517A-LN ATmega 8 eingebettet in einem 8 Bit 
mikrocomtroller-Board, entwicklungsumgebung ist Keil µ-Vision 2 und am 
liebsten wäre mir ein C-Code

danke im vorraus

von R. W. (quakeman)


Lesenswert?

killerkakerlake schrieb:
> es ist ein Infineon SAF-C517A-LN ATmega 8 eingebettet in einem 8 Bit
> mikrocomtroller-Board, entwicklungsumgebung ist Keil µ-Vision 2 und am
> liebsten wäre mir ein C-Code

Also ist es nun ein C517A oder ein Atmega8 ?
Das sind zwei völlig verschiedene Controller. ;)
Aber da du Keil benutzt, wird es wohl der C517A sein, da Keil AVR nicht 
unterstützt.

Hier ein paar C-Code Schnipsel für Polling Betrieb mit dem C517A:

  // Initialisierung der seriellen Schnittstelle
  S0CON = 80;         // Ser0: Mode=1 REN0=1
  PCON = PCON | 128;  // SMOD = 1
  S0RELL = 0xD9;      // 9615Bps bei 12MHz
  S0RELH = 0x03;
  BD = 1;             // Baudratengenerator benutzen


  // Byte senden per RS232
  S0BUF = 0xFF;       // 0xFF per RS232 senden
  while (!TI0);       // warten bis Byte gesendet
  TI0 = 0;            // TX Flag löschen


  // Warten auf ein Byte per RS232
  while (!RI0);       // Warten bis ein Byte empfangen wurde
  temp = S0BUF;       // Empfangenes Byte auslesen
  RI0 = 0;            // RX-Flag löschen

Schöner geht das Ganze natürlich noch im IRQ Betrieb, aber du solltest 
es lieber damit probieren, da IRQ Betrieb schon etwas Verständnis des 
Controllers vorraussetzt.

von killerkakerlake (Gast)


Lesenswert?

omg, wie peinlich, ja, es ist der C517A, aber der Atmega8 liegt auch 
daneben^^

@fox mulder
Genau danach hab ich gesucht, danke Vielmals :)

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.