pins zum blinken bringen



  • Kann mir jemand sagen warum dieser quellcode nicht läuft.
    [cpp]
    #include<t89c51ac2.h>
    #include <math.h>

    void zeitverzoegerung(unsigned int zaehler);
    void zeitverzoegerung(unsigned int zaehler){

    unsigned int i;

    for(i=0;i<zaehler;i++) {
    }
    }
    void main(void)
    {
    unsigned int x;
    unsigned int y=8;
    unsigned int z=65000;
    unsigned int o=1;
    unsigned int a;
    P1=1;

    while(1){

    for(a=0;a<4;a++){
    int o=pow(2,a);

    P1=o;
    zeitverzoegerung(z);
    }

    for(x=0;x<4;x++){
    y=y*2;
    P1=y;
    zeitverzoegerung(z);

    }
    y=8;

    }

    }



  • Kannst du vielleicht erst mal sagen, was das Programm überhaupt machen soll, was genau nicht läuft und wie sich das äußert (z.B. Fehlermeldung)?



  • _matze schrieb:

    Kannst du vielleicht erst mal sagen, was das Programm überhaupt machen soll, was genau nicht läuft und wie sich das äußert (z.B. Fehlermeldung)?

    die ersten vier pins sollen ein lauflicht ergeben mit einerzeitverzögerung auf die nächsten vier pins also 4 bis 7 beim port eins eines microcontrollers



  • _matze schrieb:

    Kannst du vielleicht erst mal sagen, was das Programm überhaupt machen soll, was genau nicht läuft und wie sich das äußert (z.B. Fehlermeldung)?



  • Du koenntest damit anfangen, welchen Mikrocontroller du verwendest und welchen Compiler. Dann waere es hilfreich, wenn du deinen Code mit cpp-Tags versiehst, damit er auch schoen formatiert zu betrachten ist. Dann waere natuerlich die Fehlermeldung oder eine Fehlerbeschreibung noetig.



  • Btw, die leere for-Schleife optimiert dir doch wahrscheinlich jeder Compiler weg. Benutze da lieber nop .



  • Oder sleep/Sleep



  • Ehem... Ein hübscher Code.

    #include<t89c51ac2.h>
    #include <math.h>
    
    void zeitverzoegerung(unsigned int zaehler);  //Wozu brauchst du die Vorwärtsdeklaration wenn gleich danach die Funktionsdefinition kommt?
    void zeitverzoegerung(unsigned int zaehler){
    
    	unsigned int i;
    
    	for(i=0;i<zaehler;i++) { //du willst die Zeitverzögerung mit einer leeren Schleife simulieren? 
    	}
    }
    void main(void) //richtig: int main(/* ... */)
    {
    	unsigned int x; //zu global; deklariere es im "loop head"
    	unsigned int y=8;  //Variable völlig überflüssig.
    	unsigned int z=65000;
    	unsigned int o=1; //zu global
    	unsigned int a; //zu global
    	P1=1; //kommt diese (globale?) Variable aus dem ersten Header?
    
    	while(1){  //wie verlässt du die Schleife?
    		for(a=0;a<4;a++){
    			int o=pow(2,a); //Neudefinition (verdeckt das erste "o" in deisem Sichtbarkeitsbereich). Beabsichtigt?
    
    			P1=o;
    			zeitverzoegerung(z);
    		}
    
    		for(x=0;x<4;x++){  //ich weiß nicht was intern mit P1 passiert, aber diese Schleife kannst du evtl. mit der ersten kombinieren. Wahrscheinlich erübrigt sich dann auch die Variable z.
    			y=y*2;
    			P1=y;
    			zeitverzoegerung(z);
    		}
    
    		y=8;
    	}
    }
    

    Ehrlich gesagt erscheint mir der ganze Code ohne Zweck... einfach sinnlos. Im Moment hat das Programm nur wenig mit deinem Vorhaben zu tun.



  • einfach sinnlos

    Ich habe mal nach t89c51ac2.h gegoogelt: die Zuweisung an P1 (Port eins) setzt Werte an einem physikalischen Port, besitzt also Seiteneffekte.



  • theliquidwave schrieb:

    Oder sleep/Sleep

    Auf einem Mikrocontroller?



  • knivil schrieb:

    einfach sinnlos

    Ich habe mal nach t89c51ac2.h gegoogelt: die Zuweisung an P1 (Port eins) setzt Werte an einem physikalischen Port, besitzt also Seiteneffekte.

    Ja, das dürfte in Ordnung gehen. Ist so wie PORTA, PINA usw. bei Atmel.



  • Ich habe schon vermutet, dass P1 nicht umsonst geändert wird. Im Netz habe ich eine Doku zum "pin controlling" gefunden und verstehe jetzt, woher die ganzen Fehler kommen. Ein weiterer Copy-Paste-Fall, wo der Code der Quelle nicht viel besser aussieht.


Anmelden zum Antworten