Shunth
03.12.2009, 16:37
Hallo,
hier mal ein Listing eines Lauflichtes:
// Lauflicht, Taktfrequenz 4MHz
#include <C:\cc5X\16F84.h> // Prozessor-Typ definieren
#pragma config |= 0b.1111.1111.0010 // Konfigurations-Wort
void pause(uns16 ms) // Unterprogramm zum Abwarten einer
{ // angegebenen Anzahl von Millisekunden
while(ms) // Schleife verlassen, wenn ms=0 ist
{
OPTION = 2; // Vorteiler auf 8 einstellen
TMR0 = 131; // 125 * 8 = 1000 (= 1 ms)
while (TMR0); // Abwarten einer Millisekunde
ms--; // "ms" mit jeder Millisekunde erniedrigen
}
}
void main(void) // Hier beginnt das Hauptprogramm
{
char i;
TRISB = 0b.0000.0000; // PortB als Ausgang definieren
PORTB = 0;
Sprungmarke:
PORTB.0 = 1 ; // Bit 0 von PortB setzen
pause(500); // LED 0 halbe Sekunde leuchten lassen
for (i=0 ;i<7 ;i++) // folgende Befehle 8-mal wiederholen
{
PORTB = PORTB << 1 ; // 1 kommt ins nächste Bit links
pause(500); // jede LED halbe Sekunde leuchten lassen
}
PORTB = 0; // Alle LEDs löschen
PORTB.7 = 1 ;
pause(500);
for (i=0 ;i<7 ;i++)
{
PORTB = PORTB >>1 ;
pause(500);
}
PORTB = 0;
pause(500);
goto Sprungmarke;
}
Ich möchte jetzt mit jeden einmaligen Durchlauf die Zeit verkürzen. Jetzt könnte man die pause(xxx) immer kleiner machen. Das muß doch auch intelligenter gehen. Weiterhin würde ich festlegen wollen wie lange der Rechts/Linkslauf des Lichtes gehen soll bis sich die Zeit verkürzt. Hat wer ne Idee???
Gruß Shunth
hier mal ein Listing eines Lauflichtes:
// Lauflicht, Taktfrequenz 4MHz
#include <C:\cc5X\16F84.h> // Prozessor-Typ definieren
#pragma config |= 0b.1111.1111.0010 // Konfigurations-Wort
void pause(uns16 ms) // Unterprogramm zum Abwarten einer
{ // angegebenen Anzahl von Millisekunden
while(ms) // Schleife verlassen, wenn ms=0 ist
{
OPTION = 2; // Vorteiler auf 8 einstellen
TMR0 = 131; // 125 * 8 = 1000 (= 1 ms)
while (TMR0); // Abwarten einer Millisekunde
ms--; // "ms" mit jeder Millisekunde erniedrigen
}
}
void main(void) // Hier beginnt das Hauptprogramm
{
char i;
TRISB = 0b.0000.0000; // PortB als Ausgang definieren
PORTB = 0;
Sprungmarke:
PORTB.0 = 1 ; // Bit 0 von PortB setzen
pause(500); // LED 0 halbe Sekunde leuchten lassen
for (i=0 ;i<7 ;i++) // folgende Befehle 8-mal wiederholen
{
PORTB = PORTB << 1 ; // 1 kommt ins nächste Bit links
pause(500); // jede LED halbe Sekunde leuchten lassen
}
PORTB = 0; // Alle LEDs löschen
PORTB.7 = 1 ;
pause(500);
for (i=0 ;i<7 ;i++)
{
PORTB = PORTB >>1 ;
pause(500);
}
PORTB = 0;
pause(500);
goto Sprungmarke;
}
Ich möchte jetzt mit jeden einmaligen Durchlauf die Zeit verkürzen. Jetzt könnte man die pause(xxx) immer kleiner machen. Das muß doch auch intelligenter gehen. Weiterhin würde ich festlegen wollen wie lange der Rechts/Linkslauf des Lichtes gehen soll bis sich die Zeit verkürzt. Hat wer ne Idee???
Gruß Shunth