C51 COMPILER V6.00 BUTTON 05/24/2000 22:31:09 PAGE 1 C51 COMPILER 6.00, COMPILATION OF MODULE BUTTON OBJECT MODULE PLACED IN .\button.OBJ COMPILER INVOKED BY: d:\keileval\C51\BIN\C51.EXE .\button.c OBJECTEXTEND DEBUG stmt level source 1 2 #include "xbus.h" 3 #include 4 #include 5 char xdata *ledaddress; 6 7 8 bit En; 9 bit Done; 10 11 int Diamond; 12 13 unsigned char CameraX; //Bright Pixel Row data from Camera 14 unsigned char CameraY; //Bright Pixel Column data from Camera 15 unsigned char Status; 16 17 unsigned char NewX; //New Bright Pixel Row in Monitor pixels 18 unsigned char NewY; //New Bright Pixel Column in Monitor pixels 19 20 unsigned char OldX; //Last Bright Pixel Row in Monitor pixels 21 unsigned char OldY; //Last Bright Pixel Column in Monitor pixels 22 23 24 25 unsigned int StatusAddress; //Address of Status register in FPGA 26 unsigned int RowAddress; //Address of Row Data Register in FPGA 27 unsigned int ColumnAddress; //Address of Column Data Register in FPGA 28 29 30 //Data before sign change 31 int PreXData; 32 int PreYData; 33 34 35 36 //Data to PS/2 37 char XData; 38 char YData; 39 char Sign; 40 41 42 void init () { 43 1 44 1 Done = 1; 45 1 Sign = 0; 46 1 Diamond = 1; 47 1 En = 0; 48 1 49 1 StatusAddress = 2; //Address of Status Register in FPGA 50 1 RowAddress = 0; //Address of Row Data Register in FPGA 51 1 ColumnAddress = 1; //Address of Column Data Register in FPGA 52 1 53 1 54 1 } 55 C51 COMPILER V6.00 BUTTON 05/24/2000 22:31:09 PAGE 2 56 char FindSign ( int X, int Y ) 57 { 58 1 59 1 char tempSign; 60 1 tempSign = 0; 61 1 62 1 if (X > 0 && Y > 0 ) // X > 0 and Y > 0 //abs(X) == X && abs(Y) == Y 63 1 { 64 2 tempSign = 1; // Quadrant 1 65 2 } 66 1 67 1 else if (X < 0 && Y > 0) // Quadrant 2 68 1 { 69 2 tempSign = 2; 70 2 } 71 1 72 1 else if (X < 0 && Y < 0) // Quadrant 3 73 1 { 74 2 tempSign = 3; 75 2 } 76 1 77 1 else if (X > 0 && Y < 0) // Quadrant 4 78 1 { 79 2 tempSign = 4; 80 2 } 81 1 82 1 else // ERROR CONDITION!! 83 1 { 84 2 tempSign = 0; 85 2 } 86 1 87 1 return (tempSign); 88 1 89 1 } 90 91 //*********** FPGA ADDRESSES ************** 92 // 0 = Row Data 93 // 1 = Column Data 94 // 2 = Status 95 //***************************************** 96 97 98 99 100 void main() { 101 1 102 1 init(); 103 1 104 1 while (1) // All programs run forever 105 1 { 106 2 Status = XRead(StatusAddress); //Read data from FPGA at Address 2 107 2 //********* DEBUG *************** 108 2 109 2 // Status = 1; 110 2 111 2 if (Status == 1) //There is data for me to read from FPGA 112 2 { 113 3 CameraX = XRead(RowAddress); //Read data from the FPGA at Address 0 114 3 CameraY = XRead(ColumnAddress); //Read data from the FPGA at Address 1 115 3 116 3 //******** DEBUG *************** 117 3 // CameraX = 100; C51 COMPILER V6.00 BUTTON 05/24/2000 22:31:09 PAGE 3 118 3 // CameraY = 100; 119 3 120 3 121 3 122 3 123 3 //insert function to translate between pixels 124 3 // ********** FOR TESTING PURPOSES ********************* 125 3 // Monitor Resolution: 1280 X 1024 Camera Resolution: 256 X 256 126 3 // Ratio: 6 X 5 127 3 128 3 NewX = CameraX * 6; 129 3 NewY = CameraY * 5; 130 3 131 3 //insert function to determine relative movement 132 3 133 3 PreXData = OldX - NewX; // Relative movement 134 3 PreYData = OldY - NewY; 135 3 136 3 OldX = NewX; // Keep the current data as 'old' data 137 3 OldY = NewY; 138 3 139 3 140 3 141 3 142 3 if (Done && !En) // I can put new data in the variables to send to the PS/2 port 143 3 { 144 4 /* switch(Diamond) 145 4 { 146 4 case 1: 147 4 Done = 0; // reset done 148 4 PreXData = 150; 149 4 PreYData = 150; 150 4 Diamond = 2; 151 4 break; 152 4 case 2: 153 4 Done = 0; // reset done 154 4 PreXData = 150; 155 4 PreYData = -150; 156 4 Diamond = 3; 157 4 break; 158 4 case 3: 159 4 Done = 0; // reset done 160 4 PreXData = -150; 161 4 PreYData = -150; 162 4 Diamond = 4; 163 4 break; 164 4 case 4: 165 4 Done = 0; // reset done 166 4 PreXData = -150; 167 4 PreYData = 150; 168 4 Diamond = 1; 169 4 break; 170 4 } */ 171 4 172 4 XData = abs(PreXData); 173 4 YData = abs(PreYData); 174 4 Sign = FindSign(PreXData, PreYData); 175 4 En = 1; // Set En high to let PS/2 port know that we have data in the variables 176 4 177 4 } 178 3 179 3 } C51 COMPILER V6.00 BUTTON 05/24/2000 22:31:09 PAGE 4 180 2 } 181 1 } 182 183 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 245 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 24 ---- IDATA SIZE = ---- ---- BIT SIZE = 2 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)