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
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
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.
"Welchen 8051"
Wuerde man bei der Angabe "des 8051" nicht ausgehen von P8051, P80C51,
P8751 oder einer anderen damit pin- und ausstattungskompatiblen
Variante?
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
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.