PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hier mal mein Quelltext, könnt ihr ma schaun vielleicht?


Bolze1984
14.03.2006, 21:01
sodele, da hab ich ma mein Quelltext, wär cool wenn ihr da mal drüber schaun könntet

/******************** C-Programm **************************************
** Programmname:Nachlaufsteuerung für Solarpanel **
** Beschreibung:Besondere Lernleistung **
** **
** _________________________________________________________________ **
** **
** Autor:Sebastian Imbery Datum: 14.03.2006 **
**********************************************************************/
#include <reg517.h>
/**** globale Konstantendeklaration **********************************/
/**** globale Variablendeklaration ***********************************/
sbit schalter=0xE2;//Einschalter P4.2
sbit motor1=0xB2; //Ansteuerung Motor1 auf P3.2 Rechtslauf
sbit motor2=0xB3; //Ansteuerung Motor2 auf P3.3
sbit motor1L=0xB4; //Ansteuerung Motor1 auf P3.4 Linkslauf
int i;
int sekundentakt=0;
char ME,MZ,SE,SZ;
/**** Funktionen *****************************************************/
isr_t0() interrupt 1 //Interrupt service Routine Timer0
{
TR0=0; //Timer0 wird ausgeschaltet
TH0=61; //Timer0 Startwert wird festgelegt
TL0=174;
TR0=1; //Timer0 wird aktiviert
while(MZ<=300) //wärend MinutenZehner kleiner wie 300 ist wird die schleife widerholt
{
if (sekundentakt==20) //wenn der sekundentakt den Wert 20 erreicht hat
{
if(SE==9) //wenn die sekundeneiner auf 9 sind
{
SE=0; //werden sie auf 0 gesetzt
}
if(SZ==5) //wenn die sekundenzehner auf 5 sind
}
SZ=0; //werden sie auf 0 gesetzt
{
if(ME==5) //wenn die minuteneiner auf 5 sind
{
ME=0; //werden sie auf 0 gesetzt
T1=1; //wird Timer1 gestartet
if(MZ<=300) //nur unter 300 Minuten wird
}
isr_T1;
} //service Routine von Timer1 gestartet
}
if(MZ==600) //wenn die zeit von 600 Minuten erreicht ist
{ //wird Minutenzehnervariable auf null gesetzt und
MZ=0;
if(MZ>=300)
{ //auf die Linkslauf Funktion verwiesen
linkslauf;
}
}
}
else
{
MZ++;
}
}
else
{
ME++;
}
}
else
{
SZ++;
}
}
else
{
SE++;
}
sekundentakt=0;
else
{
sekundentakt++;
}
}
}

isr_T1() interrupt 3 //Timer Interrupt 3
{
TR1=0; //Timerwerte werden initialisiert das genau eine sekunde läuft
TH1=61;
TL1=174;
TR1=1; //Timer1 wird gestartet
motor1=1; //Motor1 läuft an
motor2=1; //Motor2 läuft an
if (SE==9) //if anwendungen wie in Interrupt 1 nur für die zeit von 20s
{
SE=0;
}
if (SZ==2);
{
SZ=0;
motor1=0; //nach ablauf der 20s wird Motor1 gestoppt
motor2=0; //nach ablauf der 20s wird Motor2 gestoppt
T1=0;
}
else
{
SZ++;
}
else
{
SE++;
}
}

linkslauf() //Die Funktion Linkslauf übernimmt die aufgabe den Motor1 im linkslauf zu starten
{
TR1=1; //Timer1 wird gestartet
motor1L=1; //Motor1 läuft an im Linkslauf
motor2=1; //Motor2 läuft an
if (SE==9) //if anwendungen wie in Interrupt 1 nur für die zeit von 20s
{
SE=0;
}
if (SZ==2);
{
SZ=0;
motor1L=0; //nach ablauf der 20s wird Motor1 gestoppt
motor2=0; //nach ablauf der 20s wird Motor2 gestoppt
T1=0;
}
else
{
SZ++;
}
else
{
SE++;
}
}
/**** Hauptprogramm **************************************************/
main()
{
ME=MZ=SE=SZ=0;
//Timer 0 wird initialisiert
TMOD=0x11; //00010001 T0&T1 auf 16 Bit Modus
TH0=15535/256; //60535=65535-5000
TL0=15535%256; //Modulo Rest-berechnung
EAL=1; //Allgemeine Interruptfreigabe
ET0=1; //Interruptfreigabe Timer0
//Timer 1 wird initialisiert
TH1=15535/256; //60535=65535-5000
TL1=15535%256; //Modulo Rest-berechnung
ET1=1; //Interruptfreigabe Timer1
TR1=0; //Timer 1 wird gestartet

while(1) // Endlosschleife => Programmabbruch mit RESET
{
while(schalter)
{
TR0=1; //Timer 1 wird gestartet
if (!schalter) //wenn der schalter nicht betätigt ist
{
SE=SZ=ME=MZ=0; //die Zeitvariablen werden auf null gesetzt
motor1=0; //motor1 wird sicherheitshalber auf 0 gesetzt
motor2=0; //motor2 wird sicherheitshalber auf 0 gesetzt
motor1L=0; //motor1L wird sicherheitshalber auf 0 gesetzt
}
//Verriegellung, wenn motor1 läuft kann der linkslauf nicht in betrieb gehen
if (motor1==1)
{
motor1L=0;
}
//Verriegelung, wenn der linkslauf läuft kann motor1 nicht in betrieb gehen
if (motor1L==1)
{
motor1=0;
}
}

} // Ende der Endlosschleife
} // END MAIN



für kritik bin ich jederzeit offen :cool:


Sgt.McBeef
14.03.2006, 21:05
kleiner tipp: post deinen source bitte nicht als zitat sondern als code das es auch formatiert is und man besser fehler findn kann und es eben einfach leserlicher ist

TekWarrior
15.03.2006, 17:23
Ja, das ist in der Tat sehr unübersichtlich. Poste den Code bitte nochmal in Code Tags mit irgendeiner Formatierung ;) Wir können natürlich jetzt auch nicht sagen ob dein Code 100% richtig ist, da dort verständlicherweise viele nicht Standard C Sachen drin stehen.

eViLiSSiMo
16.03.2006, 12:57
Ich glaube nicht das der Code compilierbar ist weil:
if(SZ==5) //wenn die sekundenzehner auf 5 sind
}
SZ=0; //werden sie auf 0 gesetzt
{

Das kann nicht wirklich stimmen.


Ich frage mich echt, ob du schon mal versucht hast das zu compilieren.


BR

Scavi
16.03.2006, 14:37
IMHO völlig schlechter Programmierstil! Zu viele IFs, doppelte While, ...

Hotshot
22.03.2006, 19:04
IMHO völlig schlechter Programmierstil! Zu viele IFs, doppelte While, ...

Leute die sich das proggen selber beibringen haben meistens einen schlechteren Stil als ausgebildete/studierte Informatiker, aber das is trotzdem ne Leistung, auch mit schlehterem Stil.

MartinF
23.03.2006, 13:27
an die C++-Programmierer :)
wenn man das Buch "The C++ Programming Language" des C++-Erfinders Bjarne Stroustrup gelesen hat, weiß man bescheid über alle wichtigen Konzepte des Programmierens. es werden ein großteil der Funktionen der STL vorgestellt, sodass man nicht mehr darauf angewiesen ist sich die grundlegenden Dinge selbst du schreiben, stattdessen kann man komfortabel und elegant die STL verwenden.

Des weiteren lernt man viel über guten Stil, wenn man Programme von anderen Programmierern ansieht. hierbei lernt man teils ganz andere Arten der Problemlösung kennen.

Ich finde es ganz normal, das zu anfang der resultierende Quelltext nicht ganz so performant ist wie der eines fortgeschrittenen Programmierers.

Neu
23.03.2006, 14:09
} // Ende der Endlosschleife
*g* seit wann hat eine Endlosschleife ein Ende? *g*;) :D