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


von padi (Gast)


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

von Peter D. (peda)


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

von padi (Gast)


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

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
Noch kein Account? Hier anmelden.