// Lab 2 part 1 // USE LEDREG.BIT #include #include char xdata *ledaddress; bit En; bit Done; int Diamond; //Data before sign change int PreXData; int PreYData; //Data to PS/2 char XData; char YData; char Sign; void init () { Done = 1; Sign = 0; Diamond = 1; En = 0; } char FindSign ( int X, int Y ) { char tempSign; tempSign = 0; if (X > 0 && Y > 0 ) // X > 0 and Y > 0 //abs(X) == X && abs(Y) == Y { tempSign = 1; // Quadrant 1 } else if (X < 0 && Y > 0) // Quadrant 2 { tempSign = 2; } else if (X < 0 && Y < 0) // Quadrant 3 { tempSign = 3; } else if (X > 0 && Y < 0) // Quadrant 4 { tempSign = 4; } else // ERROR CONDITION!! { tempSign = 0; } return (tempSign); } void main() { init(); while (1) // All programs run forever { if (Done && !En) // I can put new data in the variables to send to the PS/2 port { switch(Diamond) { case 1: Done = 0; // reset done PreXData = 150; PreYData = 150; Diamond = 2; break; case 2: Done = 0; // reset done PreXData = 150; PreYData = -150; Diamond = 3; break; case 3: Done = 0; // reset done PreXData = -150; PreYData = -150; Diamond = 4; break; case 4: Done = 0; // reset done PreXData = -150; PreYData = 150; Diamond = 1; break; } XData = abs(PreXData); YData = abs(PreYData); Sign = FindSign(PreXData, PreYData); En = 1; // Set En high to let PS/2 port know that we have data in the variables } } }