📄 comm.lst
字号:
234 2 break;
235 2
236 2 default:
237 2 break;
238 2
239 2 }
240 1
241 1 }
C51 COMPILER V8.16 COMM 12/10/2009 11:19:18 PAGE 5
242 /**********************************************************************
243 **函数原型: PCS_r_reader()
244 **入口参数: none
245 **出口参数: none
246 **返 回 值: none
247 **功能说明: PC命令读基站参数
248 ***********************************************************************/
249 void PCS_r_reader()
250 {
251 1 uchar i;
252 1
253 1 READER_PCS xdata *poreader;
254 1 poreader=(READER_PCS xdata *)(combuf);
255 1
256 1
257 1 memcpy(combuf+4,MyID,sizeof(MyID));
258 1
259 1
260 1 for(i=0;i<8;i++)
261 1 {
262 2 if(power==pow[i])
263 2 {
264 3 poreader->pcs_power=i; //查功率ItemIndex值
265 3 break;
266 3 }
267 2 }
268 1
269 1
270 1
271 1 for(i=0;i<8;i++)
272 1 {
273 2 if(INACTIVITY_TIME==cardouttime[i])
274 2 {
275 3 poreader->pcs_samecardtime=i; //查相同卡号输出间隔时间ItemIndex值
276 3 break;
277 3 }
278 2 }
279 1
280 1
281 1
282 1 for(i=0;i<8;i++)
283 1 {
284 2 if(RELAY_TIME_IN ==relay_time[i]) //查继电器动作延时时间ItemIndex值
285 2 {
286 3 poreader->pcs_relaytime=i;
287 3 break;
288 3 }
289 2 }
290 1
291 1
292 1 for(i=0;i<4;i++)
293 1 {
294 2 if(wiefmt==wie[i]) //查韦根格式ItemIndex值
295 2 {
296 3 poreader->pcs_wieformat=i;
297 3 break;
298 3 }
299 2 }
300 1
301 1
302 1 for(i=0;i<32;i++)
303 1 {
C51 COMPILER V8.16 COMM 12/10/2009 11:19:18 PAGE 6
304 2 Printf_Char(combuf[i]);
305 2 }
306 1 BELL_ON;
307 1 delayms(1000);
308 1 BELL_OFF;
309 1
310 1
311 1 }
312 /**********************************************************************
313 **函数原型: tag_r_reader()
314 **入口参数: none
315 **出口参数: none
316 **返 回 值: none
317 **功能说明: tag reply
318 ***********************************************************************/
319 void tag_r_reader()
320 {
321 1 uchar i;
322 1 memcpy(combuf+2,rxdata+1,26);
323 1
324 1 for(i=0;i<32;i++)
325 1 {
326 2 Printf_Char(combuf[i]);
327 2 }
328 1 BELL_ON;
329 1 delayms(1000);
330 1 BELL_OFF;
331 1 }
332 /**********************************************************************
333 **函数原型: PCS_w_reader()
334 **入口参数: none
335 **出口参数: none
336 **返 回 值: none
337 **功能说明: PC命令写基站参数
338 ***********************************************************************/
339 void PCS_w_reader()
340 {
341 1 uchar i;
342 1 READER_PCS xdata *pcs;
343 1 pcs=(READER_PCS xdata *)(combuf);
344 1
345 1 wiefmt=wie[pcs->pcs_wieformat]; //提取RAM更改参数
346 1 power =pow[pcs->pcs_power];
347 1 INACTIVITY_TIME=cardouttime[pcs->pcs_samecardtime];
348 1 RELAY_TIME_IN =relay_time[pcs->pcs_relaytime];
349 1 RELAY_TIME_OUT =relay_time[pcs->pcs_relaytime];
350 1 memcpy(MyID,pcs->pcs_readerid,4); //赋值系统ID
351 1 pcs->pcs_crc16=cal_crc(combuf,sizeof(READER_PCS)-2); //计算CRC
352 1 memcpy(combuf,pcs,sizeof(READER_PCS)); //计算好的参数回COPY内存,结构体不能传递指针
353 1 flash_save(combuf,F_ADDR,32); //保存数据至flash;
354 1 delayms(100); //重新配置SI芯片
355 1 nres=0;
356 1 delayms(100);
357 1 nres=1;
358 1 ia442xinit();
359 1 spirevtwobyte();
360 1 spisendcommand(0x8288); //电源管理 whole receive crystal on
361 1 spisendcommand(0xca83); //FIFO COMMAND
362 1
363 1
364 1 combuf[3]= PCS_wr_OK;
365 1 for(i=0;i<32;i++)
C51 COMPILER V8.16 COMM 12/10/2009 11:19:18 PAGE 7
366 1 {
367 2 Printf_Char(combuf[i]); //基站参数配置成功
368 2 }
369 1 BELL_ON;
370 1 delayms(1000);
371 1 BELL_OFF;
372 1 }
373 /**********************************************************************
374 **函数原型: PCS_w_tag()
375 **入口参数: none
376 **出口参数: none
377 **返 回 值: none
378 **功能说明: PC命令上传或者写卡参数
379 ***********************************************************************/
380 void PCS_rw_tag(uchar cmdm)
381 {
382 1 uchar i;
383 1 ULONG idata sum;
384 1 UINT result;
385 1 CMD_TAG xdata *pct;
386 1 READER_PCS xdata *pcs;
387 1
388 1 pcs=(READER_PCS xdata *)(combuf); //pcs指针指向解析的PC命令帧
389 1 pct=(CMD_TAG xdata *)(txdata+4); //pct指针指向发送的命令帧
390 1
391 1 memcpy(txdata, SiHead, 4); //同步头
392 1 pct->data_len=sizeof(CMD_TAG)-1; //数据长度
393 1 pct->cmd=cmdm; //命令
394 1 memcpy( pct->reader_id,pcs->pcs_readerid,4); //4字节基站
395 1 memcpy(pct->tag_id, pcs->pcs_tagid, 6); //6字节卡号
396 1
397 1 pct->tag_cenfre=pcs->pcs_cenfre; //中心频率
398 1 pct->tag_power=pcs->pcs_power; //功率 有效
399 1 pct->tag_bud=pcs->pcs_bud; //波特率
400 1 pct->tag_flaginout=pcs->pcs_flaginout; //进出标记
401 1 pct->tag_tagantitime=pcs->pcs_tagantitime; //anti
402 1 pct->tag_tagchgflagtine=pcs->pcs_tagchgflagtine; //chgtime
403 1
404 1 for(i=0;i<8;i++)
405 1 {
406 2 pct->tag_buf[i]=0; //预留补0
407 2 }
408 1
409 1 pct->skey[0]=0xff; //处理密钥
410 1 pct->skey[1]=0xff;
411 1 pct->skey[2]=0xff;
412 1 pct->skey[3]=0xff;
413 1 sum = (ULONG)cksum(txdata+4,sizeof(CMD_TAG)-2-1); //从长度开始算SUM
414 1 result = (UINT)(sum + (sum >> 16));
415 1 pct->crc=result;
416 1
417 1
418 1
419 1 for(i=0;i<10;i++)
420 1 {
421 2 txregframe(sizeof(CMD_TAG));
422 2 delayms(50);
423 2 }
424 1
425 1
426 1 }
427
C51 COMPILER V8.16 COMM 12/10/2009 11:19:18 PAGE 8
428
429 /**********************************************************************
430 **函数原型: Hex2Asc
431 **入口参数: *chrDest *Hex Len
432 **出口参数: 无
433 **返 回 值: 无
434 **功能说明: 十六进制转字符
435 ***********************************************************************/
436
437 /*
438 void Hex2Asc(unsigned char *chrDest,const unsigned char *Hex,unsigned int Len)
439 {
440
441 unsigned char *ASC = chrDest ;
442 unsigned int i,n1,n2;
443 unsigned char chrTmp[] = "0123456789ABCDEF";
444
445 for (i = 0;i < Len;i++)
446 {
447 n1 = ((*(Hex+i)) >> 4) & 0x0F ;
448 *(ASC+i * 2) = *(chrTmp+n1) ;
449 n2 = (*(Hex+i)) & 0x0F ;
450 *(ASC+i * 2 + 1) = *(chrTmp+n2);
451 }
452 ASC[i * 2] = '\0';
453 return ;
454 }
455 */
456 /****************************@end@*************************************/
457
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2024 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 267 22
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 4
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -