-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: problem beim quelltext

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    119

    problem beim quelltext

    Hallo

    (win98 borland 5.0)
    kann mir jemand bei meinen quelltext helfen ich kann mir nicht erklären warum er nicht funktioniert (meine leds leuchten nicht)
    es ist eine einfache ampelsteuerung die leds über den lpt ansteuert

    grüne led
    gelbe led
    rote led
    gelbe und rote led
    enlosschleife

    ich habe den quelltext aus einen Buch rausgeschrieben
    bei dem Buch ist auch eine fertige exe bei die funktioniert

    Code:
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <time.h>
    #include <conio.h>
    #define Par_Ss 0x378
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //==============================================
    void warten(int);
    //==============================================
    void outp (unsigned int portadr, unsigned char value)
    {
     _asm mov edx,portadr
     _asm mov al, value
     _asm out dx,al
    }
    
    unsigned char inportb(unsigned int portadr)
    {
     unsigned char value;
     _asm mov edx,portadr
     _asm mov al,value
     _asm out dx,al
    }
    //==============================================
     void main (void)
      {
     while (!kbhit())
      {
       outp(Par_Ss,1);
       warten(1000);
    
       outp(Par_Ss,2);
       warten(1000);
    
       outp(Par_Ss,4);
       warten(1000);
    
       outp(Par_Ss,6);
       warten(1000);
       }
    }
    //==============================================
    void warten(int zeit)
    {
     int a;
     a = clock() ;
     while(clock() - a < zeit);
    }
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    mfg flo

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.02.2004
    Ort
    Starnberg
    Alter
    39
    Beiträge
    170
    Hallo,

    gibts vom Compiler keine Fehlermeldungen?
    Liegt dein Parallelport wirklich auf 0x378?

    Im Code selbst konnte ich auf die schnelle keinen Fehler finden.
    (Zu dem Assemblerzeug kann ich leider nichts sagen)

    Grüsse, Martin

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    119
    Hallo

    es kommen zwei fehler

    [C++ Warnung] Unit1.cpp(22): W 8002 Compilierung mit Assembler-Sprachfähigkeiten neu gestartet

    [C++ Warnung] Unit1.cpp(33): W 8070 Funktion sollte einen Wert zurückgebe

    aber das program wird ausgefürt
    ob mein parallelport wirklich auf 0x378 liegt kann ich nicht genau sagen
    aber ein program hat mir diese adresse ausgegeben

    gruß flo

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    31.05.2004
    Beiträge
    79
    Schau mal hier :http://www.hut.fi/Misc/Electronics/c...el_output.html

    da ist alle ganz gut erklärt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2004
    Ort
    Konstanz
    Alter
    34
    Beiträge
    18
    falls du das Buch "messen, steuern und regeln über die parallelschnittstelle" von wolfgang link meinst, dann hast du beim abtippen wohl einen fehler gemacht. die funktion outp stimmt soweit. die funktion inportb soll einen unsigned char zurückgeben, am funktionsende steht aber kein return. das ist mit der 2. fehlermeldung gemeint. das erste ist eine warnung, die der compiler (borland) ausgibt wenn assembler verwendet wird. ist dir aufgefallen dass in inportb das gleiche steht wie in outp?
    wenn nicht: auf seite 38 unten in oben genanntem Buch steht

    unsigned char inportb(unsigned int portadr)
    {
    unsigned char value;
    _asm mov edx,portadr // heißt soviel wie portadresse wird in register edx kopiert
    _asm in al,dx // register (eingang?) dx in al kopiert
    _asm mov value,al // al in variable geschrieben
    return(value); // eingelesener wert wird zurückgegeben
    }

    wenn du nichts zurückgeben willst musst du im funktionskopf (da wo der name der funktion steht) void als rückgabewert angeben - wie bei outp.
    du könntest zb die variable value global definieren, ist aber nicht sinnvoll und eine potenzielle fehlerquelle.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    119
    hallo seven, und danke

    Ja das Buch meine ich

    die funktion inportb
    ist falsch aber die brauche ich doch eigendlich nicht
    denn rest habe ich überprüft es sind keine tipp fehler zu finden.
    kann das sein das ich die fahlschen pins ansteuere?

    ford deine seite hat mir nicht wirklich weiter geholfen trotzdem danke

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2004
    Ort
    Konstanz
    Alter
    34
    Beiträge
    18
    mit der funktion outp kannst du nur 8 pins des parallelports beschreiben (ich denke du hast einen plan über die pinbelegungen). um die pinbelegung rauszufinden musst du einfach zb 2^0 = 1 (dezimal) ins ausgaberegister schreiben (mit outp). wenn alles stimmt müsste pin 0 logisch 1 führen (um die 5V, min 2,4V soviel ich weiss). um pin 1 anzusteuern musst du 2^1 = 2 ausgeben usw (bis 7). also immer 2 hoch pin nummer. die spannungswerte misst du dann mit einem multimeter oder bastelst dir einen logiktester (zwei leds (mit vorwiderstand) in reihe zwischen 0 und 5V schalten und "messdraht" zwischen den leds anschließen, je nach pegel leuchtet dann die eine oder andere led - gibts bestimmt irgendwo schaltpläne dazu). falls der port keine reaktion zeigt schreibts du - wie martin schon bemerkt hat - vielleicht auf die falsche adresse. kannst ja mal folgende adressen ausprobieren: 0x278, 0x378, 0x3BC (bei der dritten bin ich mir nicht ganz sicher). will grade meinen rechner nicht neustarten aber das wird glaube ich auch ganz am anfang beim booten auf dem bildschirm ausgegeben (?).
    was mir gerade auffällt: du willst pin 1, 2, 4 und 6 ansteuern?
    du kannst den parport nicht pinweise beschreiben (soviel ich weiss - lasse mich immer gern eines besseren belehren ) - du gibst immer einen wert zwischen 0 und 255 (dezimal) aus. wenn du diesen wert dann ins dualsystem umrechnest und die einzelnen stellen der dualzahl auf die pins des parport umlegst (stelle 0 - 7 zu pin 0 - 7) erhälts du die pegel auf den pins. ich nehme an du meinst mit pin 1 den pin D0, mit pin 2 D1 usw...
    wenn du D3 ansteuern willst (pin 4) musst du dezimal 8 ausgeben (weil 2 hoch 3 = . d8 = b'00001000'. deshalb beginnt man auch bei 0 an zu zählen und nicht bei 1. wenn du bei deinem windows taschenrechner die ansicht auf wissenschaftlich umstellst kannst du zahlen zwischen vielen zahlenformaten umrechnen. du möchtest zb D0, D3, D4 und D6 anschalten. stelle deinen rechner auf binär und gib 01011001 ein und drücke auf dezimal - der rechner zeigt dir welche zahl du auf den port ausgeben musst.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    119
    Hallo
    wie ich das sehe steuere ich die richtigen pins an
    und die adresse stimmt anscheind auch

    kann mir nicht jemand einen leicht verständlichen geben quelltext wo man einen pin ansteuert

    mfg Flo

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    42
    Beiträge
    1.517
    hallo flo,

    vielleicht hilft das

    http://www.geekhideout.com/iodll.shtml

    einfachen Quell code habe ich nicht da ich unter Win200 schreiben und da draf man nicht so auf die Ports zu greifen. Vielleicht ist das auch bei dir das porblem das win dir den zu grif auf die ports verbitet.

    Einzeln Pins ist doch ganz einfach:

    7 6 5 4 3 2 1 0 Leitung
    0 1 0 1 0 0 0 0 Zustand

    ergibt: 0*1+0*2+0*4+0*8+1*16+0*32+1*64+0*128 = 80
    Also auf den Port den wert 80 schreiben dann sollten die leds richtig leuchten
    Home
    P: Meine Tochter (06.11.07) und Link
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2004
    Beiträge
    119
    hallo
    ich habe mir die seite angesehen aber es hat mir nicht wirklich weiter geholfen. kann auch an meinen miesen englisch kenntnissen liegen
    trotzdem danke für deine hilfe
    kennst du vielleicht eine deutsche seite

    ansonsten glaube ich das ich die richtigen adressen ansteuere

    mfg

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •