hallo liebe community! Ich habe folgendes Problem: Ich soll ein EKG gerät nachbauen(schaltung habe ich bereits) von dieser schaltung übertrage ich mein signal über den adc (tl549) auf den MC (8051) und von diesem soll ich es über die RS232 auf den PC schicken und dort mit einem programm (hab ich schon in VB6 gemacht..) empfangen und die Daten in eine csv datei schreiben und diese dann in excel öffnen(diagramm ect) (in csv schreiben hab ich auch schon..).. das ganze 8051 gebilde hab ich schon fertig auf nem board mit display und 2 seriellen .. jetzt brauch ich aber die eine serielle zur programmübertragung auf den MC und die zweite sollte ich mit dem UART protokoll ansteuern.. ja und da hörts jetzt bei mir auf mim verständniss ehrlich gesagt(und ja ich hab mich schon versucht einzulesen usw .. wär nett wenn mir da wer weiter helfen könnte.. ich schreib mal einen auszug aus dem was ich schon hab (programmiert wird in KEIL) .. #include<absacc.h> #include<reg51F.h> #include <intrins.h> #include<lcdlib.h> #include<stdio.h> sbit clk = P1^0; sbit input = P1^1; sbit cs = P1^2; char send_wert[5]; // array für den zu übertragenden wert int einer,ZS,HS,miau; // variablen definition für wert ins array schreiben int i ; // Zählervariable void delay_ms(unsigned char ms) { unsigned long us = 500*ms; while (us--) { _nop_(); } } int adc_read() { int i; int wert = 0; cs = 0; delay_ms(1); for(i=0;i<8;i++) { wert = wert<<1; wert |= input; clk = 1; clk = 0; } cs = 1; return wert; /*wert in array schreiben */ // muss noch 30 hex dazu addieren für ascii HS=wert/100; send_wert[1]=HS; // hunderterstelle miau=wert%100; ZS=miau/10; send_wert[2]=ZS; einer=miau%10; send_wert[3]=einer; } //für jeden array wert einmal die sende routine aufrufen/jedes zeichen einzeln senden /*void senden(char *send_wert){ for(i=0;send_wert[i]!='';i++){ acc=send_wert[i]; SBUF=send_wert[i]; // evtl anderes register nicht mehr sbuf TB8=P; while(!T1); T1=0; } }*/ void sendfirst() { ACC=send_wert[0]; SBUF=send_wert[0]; TB8=P; } void senden (void) interrupt 4 { if (TI) { if( send_wert[i]=='\0') { IE =0; } for (i=1;send_wert[i]!='\0';i++) { ACC=send_wert[i]; SBUF=send_wert[i]; TB8=P; TI=0; } } } void main() { send_wert[0]='$'; // $ als startzeichen definieren send_wert[4]= '\13'; // carriage return als letztes zeichen senden// line feed = '\10' adc_read(); sendfirst(); senden(); LCD_init(); while(1) { char buffer[10]; int wert = adc_read(); // umrechnung auf 5V reg_write(0x01); reg_write(0x02); sprintf(buffer,"%d V",wert); stringxy(buffer,0,1); // ausgabe auff das lcd des strings delay_ms(10); } }
Und wo hakt es jetzt genau? Was funktioniert und was nicht? Es ist nicht gerade leicht, sich in das Programm reinzudenken. Und man merkt, dass schon viel darin "gewütet" wurde. Oft hilft es, mal in einfachen Worten (oder anhand eines Diagramms) sich selbst und den Beteiligten / Befragten klarzumachen, was genau man will. Versuchs mal. Noch ein paar Verbesserungsvorschläge: 1. #include<reg51F.h> #include <intrins.h> #include<lcdlib.h> bitte entweder immer Leerzeichen oder nie. 2. send_wert[0]='$'; // $ als startzeichen definieren send_wert[4]= '\13'; // carriage return als letztes zeichen senden// ebenso 3. Ein bisschen Struktur würde die Lesbarkeit enorm steigern. (Klammern gleicher Ebene immer in die selbe Spalte...) Viel Glück und Erfolg!
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.