www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC Atmel 89C51 + Riegel Reads51


Autor: padi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle, ich hab hier n kleines Problem:

ich hab erste C-Versuche gestartet und wollte mal ein Programm 
schreiben.

Programmablauf:
Port 0 dient als Eingang
Port 1 als Ausgang
Je nachdem was am Eingang anliegt soll am Ausgang ein Bitmuster 
ausgegeben werden.

Programm:
// ------------- READS51 generated header --------------
// module  : C:\Programme\Rigel\Reads51\Work\Roboter\Roboter.c
// created : 08:51:11, Thursday, April 24, 2008
// -----------------------------------------------------

#include <sfr51.h>
#define P0 Sensoren
#define P1 Motortreiber


int P0, P1;

int main()
{

    while(1)

    {

        if (Sensoren == 0x00)
        {
            Motortreiber = 0xE4;
        }

        if (Sensoren == 0x20)
        {
            Motortreiber = 0xE7;
        }

        if (Sensoren == 0x40)
        {
            Motortreiber = 0xD4;
        }

        if (Sensoren == 0x60)
        {
            Motortreiber = 0xFA;
        }

        if (Sensoren == 0x80)
        {
            Motortreiber = 0xFC;
        }

        if (Sensoren == 0xA0)
        {
            Motortreiber = 0xD4;
        }

        if (Sensoren == 0xC0)
        {
            Motortreiber = 0xD7;
        }

        if (Sensoren == 0xE0)
        {
            Motortreiber = 0xD4;
        }

    }

    return 0;
}

wenn ich das Programm erfolgreich kompiliert habe tut sich in der 
Simulation und der Hardware nichts...

µC: Atmel 89C51
Compiler: Reads51

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
padi wrote:

> #include <sfr51.h>
> #define P0 Sensoren
> #define P1 Motortreiber
>
>
> int P0, P1;
...
> wenn ich das Programm erfolgreich kompiliert habe tut sich in der
> Simulation und der Hardware nichts...

Das ist völlig korrekt.
Du legst 2 Variablen im SRAM an und spielst mit denen, d.h. es erfolgen 
keinerlei IO-Zugriffe.

Daß diese Variablen P0 und P1 heißen, sollte eigentlich ne Warnung des 
Compilers bringen, da ja in dem sfr51.h die Symbole P0 und P1 bereits 
definiert sind.

Auch ist es äußerst unklug, einen 8Bitter unnötig zu 16Bit-Rechnungen zu 
zwingen.
D.h. wenn möglich, sollten Variablen vom Typ "unsigned char" sein.

"int" für 8Bit-Zahlen ist immer eine Verschwendung von SRAM und 
CPU-Zeit.


Peter

Autor: padi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter

danke für die Hilfe hab den Fehler gefunden:

es muss so aussehen:
die 8Bit ports als 16 bit zu deklarieren war natürlich schwachsinn :-)

#include <sfr51.h>
#define Sensoren P0
#define Motortreiber P1


int main()
{

    while(1)
...

gruß padi

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.