📄 i2c.lst
字号:
145 4 }//while
146 3 }//if_1
147 2 break;
148 2 default :break;
149 2 }
150 1 I2CON = 0x44;
151 1 EI2C=1;
152 1 CPL932_ET0=1;
153 1 }
154 /*
155 */
156 void I2cSendFrame(UINT8 err )
157 {
158 1 UINT8 idata count = 0;
159 1 LWORD data i;
160 1 i2cSendOk = 0;
161 1 while(count <4 && i2cSendOk == 0 )
162 1 {
163 2 count++;
164 2 INT1 = 1;
165 2 INT1 = 0; /*pull down the INT1 to make main CPU recognise and start IIC */
166 2 for(i=0;i<20;i++); /*hold 0 for a moment */
167 2 INT1=1;
168 2 for(i=0;i<25000;i++)
169 2 {
170 3 /*kick dog*/
171 3 if(0x1 == i2cSendOk){
172 4 break;
173 4 }
174 3 }
175 2 if(0x0 == i2cSendOk){
176 3 i2cSendOk = 0;
177 3 SparkLights( LIGHT_PROBLEM );
178 3 error( err );
179 3 }
C51 COMPILER V7.07 I2C 11/25/2005 20:22:01 PAGE 4
180 2 }
181 1 }
182 void RegisterMachine(void)
183 {
184 1 memset(i2cbuf,0,13);
185 1 i2cbuf[0] = 0x2;
186 1 i2cbuf[1] = 0xaa;
187 1 i2cbuf[2] = 0x53;
188 1 I2cSendFrame(0x0c);
189 1 }
190
191 void ProcessI2cRecvFrame(void)
192 {
193 1 UINT8 cmd = 0;
194 1 bit isdot;
195 1 bit updown;
196 1 if(0x1 == i2cRecvOk){
197 2 Enter_Critical_OS();
198 2 i2cRecvOk=0x0; /* clear the singal for next packet */
199 2 Exit_Critical_OS();
200 2 cmd = i2recvbuf[1];
201 2 switch( cmd )
202 2 {
203 3 case 0x01: ClearUpLeds();RESETLEDSHOWSTR();
204 3 break;
205 3 case 0x02: ClearDownLeds();RESETLEDSHOWSTR();
206 3 break;
207 3 case 0x22: FillStruLed( i2recvbuf+2 ,2,0 );
208 3 memcpy(&scrsavebuf[8],&LedsShowStr.ledbuf[4],4);
209 3 UpateLeds( POSITION_DOWN );
210 3 RESETLEDSHOWSTR();
211 3 break;
212 3 case 0x66: FillStruLed( i2recvbuf+2 ,1,0 );
213 3 LedsShowStr.ledbuf[5]=14; /*show H0 X*/
214 3 UpateLeds( POSITION_UP );
215 3 RESETLEDSHOWSTR();
216 3 break;
217 3 case 0xbb:
218 3 if( TestBit(i2recvbuf[2],7 )) isdot= 1;
219 3 else isdot= 0;
220 3 if(TestBit(i2recvbuf[2],6 )) updown=0;
221 3 else updown = 1;
222 3 SparkLights(i2recvbuf[2]);
223 3 FillStruLed(i2recvbuf+3,i2recvbuf[0]-3,isdot );
224 3 UpateLeds(updown);
225 3 RESETLEDSHOWSTR();
226 3
227 3 break;
228 3 default : break;
229 3
230 3 }
231 2
232 2 }
233 1 }
234 /*
235
236 */
237 void FillStruLed(UINT8 *buf,UINT8 len, bit isdot )
238 {
239 1 INT8 idata i;
240 1 UINT8 idata j = LED_MAX_NUM -1;
241 1 if(len ==0){
C51 COMPILER V7.07 I2C 11/25/2005 20:22:01 PAGE 5
242 2 LedsShowStr.isdot = 0;
243 2 LedsShowStr.dotposition = LED_MAX_NUM-1;
244 2 memset(&LedsShowStr.ledbuf[0],17, LED_MAX_NUM );
245 2 return;
246 2 }
247 1 if( isdot ){
248 2 LedsShowStr.isdot = 1;
249 2 LedsShowStr.dotposition = 0x5;
250 2 }
251 1 else{
252 2 LedsShowStr.isdot = 0;
253 2 LedsShowStr.dotposition = LED_MAX_NUM-1;
254 2 }
255 1 LedsShowStr.length = len*2 ;
256 1 memset(&LedsShowStr.ledbuf[0],0, LED_MAX_NUM );
257 1 for(i= len-1;i>=0;i--)
258 1 {
259 2 LedsShowStr.ledbuf[j--] = buf[i] & 0x0f;
260 2 LedsShowStr.ledbuf[j--] = buf[i] >> 4;
261 2 }
262 1 /* add E ->EEE */
263 1 /*when error code */
264 1 if(0x1 == len){
265 2 LedsShowStr.ledbuf[5] = 12;
266 2 }
267 1
268 1
269 1
270 1 }
271 bit TestBit(UINT8 dat,UINT8 n)
272 {
273 1 UINT8 temp;
274 1 temp = dat;
275 1 temp = temp >> n;
276 1 temp = temp & 0x01;
277 1 if(temp)
278 1 return 1;
279 1 else
280 1 return 0;
281 1
282 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 833 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 10
IDATA SIZE = 27 3
BIT SIZE = ---- 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -