www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EKG Projekt bzw eig programmier problem :D (8051)


Autor: Magdalena Gruber (magi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);
  }
}

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.