/*Apelsteuerung mit Feldvariablen und
Bedarfsgesteuerter Fußgängerampel
und Blinken im Stoerfall.
Ampel06.ccp
*/
#include
<stdio.h>
#include
<reg517.h>
void wait1ms(unsigned int time); //Prototyp Wartezeit
void blink (void); //Prototyp Blinken gelb
void waitblink(unsigned int time); //Prototyp Wartezeit Blinken gelb
int iMarker=0, ifehler=0; //
Globale Variable
void main(void) //Anfang Hauptprogramm
{
int phase[10];
int timer[10];
int i;
P5=0x01;
phase[0]=0xa4;
phase[1]=0xb4;
phase[2]=0x8c;
phase[3]=0x94;
phase[4]=0xa4;
phase[5]=0x64;
phase[6]=0x66;
phase[7]=0x61;
phase[8]=0xa1;
phase[9]=0xa2;
timer[0]=5000;
timer[1]=1000;
timer[2]=5000;
timer[3]=1500;
timer[4]=3000;
timer[5]=2000;
timer[6]=1000;
timer[7]=4000;
timer[8]=1000;
timer[9]=1500;
while(1)
{
if
(iMarker==1) //
Abfrage für Bedarfssteuerung
{
P4=0xa4; // Alle Hauptampeln rot
wait1ms(1);
P5=0x02; // Fußgängerampel grün
wait1ms(5);
P5=0x01; // Fußgängerampel rot
iMarker=0; // Zurücksetzen
Bedarfssteuerung
}
for(i=0;i<10;i++)
{
P4=phase[i]; // normaler
Ampelbetrieb
wait1ms(timer[i]);
}
}
}
/**********************************************************************/
void wait1ms(unsigned int
time) //Funktion Wartezeit
{
int k,i;
if
(P50==0) //
Abfrage ob Fußgängerampel
{ // gedrückt
iMarker=1; // 1 wenn gedrückt
}
while(P56==1) //
Abfrage auf Fehlfnktion
{
blink();
// Aufruf Funktion Fehlfunktion Blinken
} //
solange P56 auf Null
for(k=0;k<time;k++)
// Schleife Anzahl ms (Normalbetrib)
{
for(i=0;i<480;i++);
//Schleife läuft 1ms
}
}
/****************************************************************************/
void blink (void) //
Aufruf Funktion Fehlfunktion Blinken
{
P4=0x00;
P5=0x00;
waitblink(1000); //
Aufruf Funktion Blinkzeit
P4=0x12;
P5=0x01;
waitblink(1000); // Aufruf Funktion Blinkzeit
}
/****************************************************************************/
void waitblink(unsigned int time) //
Funktion Blinkzeit
{
int k,i;
for(k=0;k<time;k++) // Schleife Anzahl ms
{
for(i=0;i<4802;i++); // Schleife läuft 1ms
}
}