Our team of students have tried to write this code but have had no success with a successful build from mplab v8.33. Could someone please take a look at our code and tell us what it is that is or is not vibing write. We are getting Build Failed Syntax Error right from the jump. Any input or suggestions would be appreciated.
Code:
#include <p18c452.h>
#use delay(clock=10000000)
#fuses HS,WDT
#byte PORTD = 0x08 /* output port D definition */
#bit EW_RED_LITE = PORTD.5 /* definitions to actual outputs */
#bit EW_YEL_LITE = PORTD.6 /* used to control the lights */
#bit EW_GRN_LITE = PORTD.7
#bit NS_RED_LITE = PORTD.1
#bit NS_YEL_LITE = PORTD.2
#bit NS_GRN_LITE = PORTD.3
#byte PINB = 0x06 /* input port B definition */
#bit PED_XING_EW = PINB.0 /* pedestrian crossing push button */
#bit PED_XING_NS = PINB.1 /* pedestrian crossing push button */
#bit FOUR_WAY_STOP = PINB.3 /* switch input for 4-Way Stop */
char time_left; // time in seconds spent in each state
int current_state; // current state of the lights
char flash_toggle; // toggle used for FLASHER state
// This enumeration creates a simple way to add states to the machine // by name. Enumerations generate an integer value for each name
// automatically, making the code easier to maintain.
enum { EW_MOVING , EW_WARNING , NS_MOVING , NS_WARNING , FLASHER };
// The actual state machine is here..
void Do_States(void)
{
switch(current_state)
{
case EW_MOVING: // east-west has the green!!
EW_GRN_LITE = 0;
NS_GRN_LITE = 1;
NS_RED_LITE = 0; // north-south has the red!!
EW_RED_LITE = 1;
EW_YEL_LITE = 1;
NS_YEL_LITE = 1;
if(PED_XING_EW || FOUR_WAY_STOP)
{ // pedestrian wishes to cross, or
// a 4-way stop is required
if(time_left > 10)
time_left = 10; // shorten the time
}
if(time_left != 0) // count down the time
{
--time_left;
return; // return to main
} // time expired, so..
time_left = 5; // give 5 seconds to WARNING
current_state = EW_WARNING;
// time expired, move
break; // to the next state
case EW_WARNING:
EW_GRN_LITE = 1;
NS_GRN_LITE = 1;
NS_RED_LITE = 0; // north-south has the red..
EW_RED_LITE = 1;
EW_YEL_LITE = 0; // and east-west has the yellow
NS_YEL_LITE = 1;
if(time_left != 0) // count down the time
{
--time_left;
return; // return to main
} // time expired, so..
if(FOUR_WAY_STOP) // if 4-way requested then start
current_state = FLASHER; // the flasher
else
{ // otherwise..
time_left = 30; // give 30 seconds to MOVING
current_state = NS_MOVING;
} // time expired, move
break; // to the next state
case NS_MOVING:
EW_GRN_LITE = 1;
NS_GRN_LITE = 0;
NS_RED_LITE = 1; // north-south has the green!!
EW_RED_LITE = 0; // east-west has the red!!
EW_YEL_LITE = 1;
NS_YEL_LITE = 1;
if(PED_XING_NS || FOUR_WAY_STOP)
{ // if a pedestrian wishes to cross, or
// a 4-way stop is required..
if(time_left > 10)
time_left = 10; // shorten the time
}
if(time_left != 0) // count down the time
{
--time_left;
return; // return to main
} // time expired, so..
time_left = 5; // give 5 seconds to WARNING
current_state = NS_WARNING; // time expired, move
break; // to the next state
case NS_WARNING:
EW_GRN_LITE = 1;
NS_GRN_LITE = 1;
NS_RED_LITE = 1; // north-south has the yellow..
EW_RED_LITE = 0;
EW_YEL_LITE = 1; // and east-west has the red..
NS_YEL_LITE = 0;
if(time_left != 0) // count down the time
{
--time_left;
return; // return to main
} // time expired, so..
if(FOUR_WAY_STOP) // if 4-way requested then start
current_state = FLASHER; // the flasher
else
{ // otherwise..
time_left = 30; // give 30 seconds to MOVING
current_state = EW_MOVING;
} // time expired, move
break; // to the next state
case FLASHER:
EW_GRN_LITE = 1; // all yellow and
NS_GRN_LITE = 1; // green lites off
EW_YEL_LITE = 1;
NS_YEL_LITE = 1;
flash_toggle ^= 1; // toggle LSB..
if(flash_toggle & 1)
{
NS_RED_LITE = 0; // blink red lights
EW_RED_LITE = 1;
}
else
{
NS_RED_LITE = 1; // alternately
EW_RED_LITE = 0;
}
if(!FOUR_WAY_STOP) // if no longer a 4-way stop
current_state = EW_WARNING;
break; // then return to normal
default:
current_state = NS_WARNING;
break; // set any unknown state to a good one!!
}
}
void main(void)
{
port_b_pullups(TRUE);
set_tris_b(0xFF); // port B is all input
set_tris_d(0x00); // port D is all output
current_state = NS_WARNING; // initialize to a good starting
// state (as safe as possible)
while(1)
{
delay_ms(250); // 1 second delay.. this time could
delay_ms(250);
delay_ms(250);
delay_ms(250);
// be used for other needed processes
Do_States(); // call the state machine, it knows
// where it is and what to do next
}
}