µC Atmel 89C51 + Riegel Reads51

Gast #851314
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
#851386
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
Gast #851408
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.