/*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

            }

}