zeitschleife mir microkontroler
-
hallo zusammen
ich will eine zeit schleife machen in C sprache die jede sekunde einen wert abgibt, insgesamt sind 12 werte,
ich hab diesen programm geschrieben und in assembler gabs auch keine probleme mit syntax und so aber es hat nicht funktioniert.
vieleicht ist was in der logik
kann mich jemand helfen ???
hier ist das programm was ich geschrieben hab (also musst ihr nur event. fehler finden in der logik oder so)
danke im voraus#include <reg515.h>
#define t0_int 1
#define W_ZEIT 10
int i= 12;
char data ZEIT;
void TON(i)
{
//int i;
int TON[12];if (i==12){TON[0]=0x33;}
if (i==11){TON[1]=0x37;}
if (i==10){TON[2]=0x3A;}
if (i==9){TON[3]=0x40;}
if (i==8){TON[4]=0x46;}
if (i==7){TON[5]=0x4A;}
if (i==6){TON[6]=0x51;}
if (i==5){TON[7]=0x59;}
if (i==4){TON[8]=0x63;}
if (i==3){TON[9]=0x68;}
if (i==2){TON[10]=0x73;}
if (i==1){TON[11]=0x7E;}P4 = TON[i];
}
void main()
{
//i--;
//TON(i);
SP = 0x7F;
P4 = 0xFF;
while(1);
}void timer(void)
{
TR0 = 0;
TF0 = 0;
TMOD = 1;
TL0 = 0XAF;
TH0 = 0X3C;
ET0 = 1;
ZEIT =1;
ZEIT--;
if(ZEIT==0)
{
ZEIT = W_ZEIT;
i--;
TON(i);
}
}
-
So wirklich schlau werde ich aus deinem Programm nicht.
- Es heißt int main
- while(1); <-- daran könnte es schon liegen, dass ist ne endlosschleife, die gar nix macht
- Schöne timer() Funktion, aber du rufst sie nicht auf.
- Dass der Code in TON(i) ziemlich sinnfrei ist, lass ich jetzt mal raus.
-
der name deines uC ist wohl geheim und der deines compilers ebenso?
-
DarthZiu schrieb:
- Es heißt int main
Sagt wer?
DarthZiu schrieb:
- while(1); <-- daran könnte es schon liegen, dass ist ne endlosschleife, die gar nix macht
Macht Sinn wenn er mit Interrupts arbeitet, was bei Timern wiederum Sinn macht.
DarthZiu schrieb:
- Schöne timer() Funktion, aber du rufst sie nicht auf.
Ich nehme an, dass timer() eben die ISR ist (siehe oben).
Edit: Allerdings kann ich nicht wirklich erkennen wo Interrupts initialisiert werden.
-
TactX schrieb:
DarthZiu schrieb:
- Es heißt int main
Sagt wer?
Ihr. In diversen Posts. Oder gilt das bei MC nicht?
TactX schrieb:
DarthZiu schrieb:
- while(1); <-- daran könnte es schon liegen, dass ist ne endlosschleife, die gar nix macht
Macht Sinn wenn er mit Interrupts arbeitet, was bei Timern wiederum Sinn macht.
Sicher, aber wo werden die installiert (oder initialisiert)?
TactX schrieb:
DarthZiu schrieb:
- Schöne timer() Funktion, aber du rufst sie nicht auf.
Ich nehme an, dass timer() eben die ISR ist (siehe oben).
Edit: Allerdings kann ich nicht wirklich erkennen wo Interrupts initialisiert werden.
Sag ich ja. Wahrscheinlic liegt genau da das Problem. Unser Freund hier scheint nicht wirklich viel Ahnung von (C-)Programmierung zu haben (siehe TON(i)).
-
DarthZiu schrieb:
TactX schrieb:
DarthZiu schrieb:
- Es heißt int main
Sagt wer?
Ihr. In diversen Posts. Oder gilt das bei MC nicht?
Wenn kein BS da ist, der soll sich dann um eine Rückgabe kümmern
?
Lerne: es gibt immer eine Ausnahme.
-
Wenn ich mich recht an einen Post der vergangenen Woche entsinne, hat dort jemand den C-Standard zitiert und daran gezeigt, dass main() einen int als Rückgabewert haben muss.
Ich denke, da ist es egal, ob ich C auf Windows, Unix, Microcontrollern oder meinetwegen Mac programmiere. Deswegen ist es ein Standard und kein Ansi-C-aber-nur-wen-ein-Betriebssystem-dahinter-läuft-Standard.
-
DarthZiu schrieb:
TactX schrieb:
DarthZiu schrieb:
- Es heißt int main
Sagt wer?
Ihr. In diversen Posts. Oder gilt das bei MC nicht?
Das gilt nicht unbedingt für "freestanding environments". Da kann das heissen wie der (Compiler-) Hersteller will. Und void main(void) ist absolut üblich weil logisch.
Bei "hosted environments" sieht das schon so aus, dass es int main(void) oder int main(int a, char **b) (oder equivalent) heissen muss.
5.1.2.1 Freestanding environment
1 In a freestanding environment (in which C program execution may take place without any
benefit of an operating system), the name and type of the function called at program
startup are implementation-defined. Any library facilities available to a freestanding
program, other than the minimal set required by clause 4, are implementation-defined.
2 The effect of program termination in a freestanding environment is implementationdefined.
-
DarthZiu schrieb:
Wenn ich mich recht an einen Post der vergangenen Woche entsinne, hat dort jemand den C-Standard zitiert und daran gezeigt, dass main() einen int als Rückgabewert haben muss.
Das passiert wenn man unvollständig zitiert
-
Okay, ihr habt recht. Wie immer.
-
Könnte es villeicht ein 8051 compatible µc sein?
-
FireFlow schrieb:
Könnte es villeicht ein 8051 compatible µc sein?
sieht so aus, ne?
da könnt' er ja mal fragen: http://www.c51.de/