📄 main.lst
字号:
258 3 {
259 4 TR2 = FALSE;
260 4 TF2 = FALSE;
261 4 return;
262 4 }
263 3 }
264 2 TF2 = FALSE;
265 2 }
266 1 TR2 = FALSE;
267 1 }
268
269 /****************************************************************************
270
271 ****************************************************************************/
272 void isr_timer0(void) interrupt 1 using 1
273 {
274 1
275 1 EA=0;
276 1 TL0=0x21;
277 1 TH0=0xfc;
278 1 EA=1;
279 1 }
280 /*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
281 uart interrupt 4
282 receive_send
283 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
284 void receive_send() interrupt 4
285 {
286 1 unsigned char s;
287 1 unsigned char bcc=0;
288 1 ES=0;
289 1 if(RI)
290 1 {
291 2 RI=0;
292 2 s=SBUF;
293 2 if((rxhead==0)&&(s!=0x02))
294 2 {
295 3 rxhead=0;
296 3 ES=1;
C51 COMPILER V7.06 MAIN 01/03/2009 12:35:54 PAGE 6
297 3 return;
298 3 }
299 2 if(rxhead==3)
300 2 {
301 3 datalen=s;
302 3 }
303 2 receive_buf1[rxhead++]=s;
304 2 if(rxhead==(datalen+5))
305 2 {
306 3 if(s==0x03)
307 3 {
308 4 receive_flag=1;
309 4 datalen=rxhead-3;
310 4 ES=1;
311 4 rxhead=0;
312 4 }
313 3 else
314 3 {
315 4 rxhead=0;
316 4 ES=1;
317 4 return;
318 4 }
319 3 }
320 2
321 2 }
322 1 else if(TI)
323 1 {
324 2 TI=0;
325 2 if(txhead>senddatalen+2)
326 2 {
327 3 txhead=0;
328 3 ES=1;
329 3 return;
330 3 }
331 2 SBUF=send_buf1[txhead];
332 2 txhead++;
333 2 ES=1;
334 2 return;
335 2 }
336 1 ES=1;
337 1
338 1 }
339 /***************************************************************************/
340 void EM_REV (void) interrupt 0 using 1
341 {
342 1 // phone_flag=1;
343 1 // timecounter=0;
344 1 key_time=0;
345 1 callnumber++;
346 1 }
347 /***************************************************************************/
348 //;;;;;;;;;;read inter data flash(EEPROM)program ;;;;;;;;;;;;;;;;
349 //;;;;;;;;;;;;;;ext address data is form 0~29696;;;;;;;;;;;;;;;;;;;;
350 unsigned char read_eeprom(unsigned int addrdata)
351 {
352 1 unsigned int address;
353 1 unsigned char data1;
354 1 address=0x2000+addrdata;
355 1 ISP_ADDRH=(unsigned char)(address>>8);
356 1 ISP_ADDRL=(unsigned char)address;
357 1 ISP_CONTR=WAIT_TIME;
358 1 ISP_CONTR=0x80;
C51 COMPILER V7.06 MAIN 01/03/2009 12:35:54 PAGE 7
359 1 ISP_CMD=ISP_IAP_BYTE_READ;
360 1 ISP_TRIG=0x46;
361 1 ISP_TRIG=0xb9;
362 1 ;;;
363 1 data1=ISP_DATA;
364 1 return data1;
365 1 }
366 //;;;;;;;;;;write data flash(EEPROM) program;;;;;;;;;;;;;;;;;;
367 //;;;;;;;;;;;ext address 0~29696 data :;;;;;;;;;;;;;;;;;;;;
368 void write_eeprom(unsigned int addrdata,unsigned char data2)
369 {
370 1 unsigned int address;
371 1 address=0x2000+addrdata;
372 1 ISP_DATA=data2;
373 1 ISP_ADDRH=(unsigned char)(address>>8);
374 1 ISP_ADDRL=(unsigned char)address;
375 1 ISP_CONTR=WAIT_TIME;
376 1 ISP_CONTR=0x80;
377 1 ISP_CMD=ISP_IAP_BYTE_PROGRAM;
378 1 ISP_TRIG=0x46;
379 1 ISP_TRIG=0xb9;
380 1 }
381 /////////////////////////////////////////////////////////////////////////////
382 void erase_eeprom(unsigned char sectors)
383 {
384 1 unsigned int addr;
385 1 addr=0x2000+sectors*0x200; //89c51rc is 0x2000 89c54rd+ is 0x8000
386 1 ISP_ADDRH=(unsigned char)(addr>>8);
387 1 ISP_ADDRL=(unsigned char)addr;
388 1 ISP_CONTR=WAIT_TIME;
389 1 ISP_CONTR=0x80;
390 1 ISP_CMD=ISP_IAP_SECTOR_ERASE;
391 1 ISP_TRIG=0x46;
392 1 ISP_TRIG=0xb9;
393 1 }
394 ///////////////////////////////////////////////////////////////////////////
395 void command_press(void)
396 {
397 1 unsigned char ss;
398 1 receive_flag=0;
399 1 ss=receive_buf1[1];
400 1 switch(ss)
401 1 {
402 2
403 2 case 0x01: //写卡数据处理
404 2 bell1(3);
405 2 break;
406 2
407 2 break;
408 2 default:
409 2 break;
410 2 }
411 1 }
412 ////////////////////////////////////////////////////
413 uchar readsr(void)
414 {
415 1 uchar b;
416 1 WRE=1;
417 1 RDE=0;
418 1 RSE=1;
419 1 CSE=0;
420 1 _nop_();
C51 COMPILER V7.06 MAIN 01/03/2009 12:35:54 PAGE 8
421 1 _nop_();
422 1 b=P0&0x0f;
423 1 CSE=1;
424 1 return(b);
425 1 }
426
427 void writesr(uchar a)
428 {
429 1 WRE=0;
430 1 RDE=1;
431 1 RSE=1;
432 1 CSE=0;
433 1 _nop_();
434 1 _nop_();
435 1 P0=a;
436 1 _nop_();
437 1 _nop_();
438 1 CSE=1;
439 1 }
440
441 uchar readdata(void)
442 {
443 1 uchar b;
444 1 WRE=1;
445 1 RDE=0;
446 1 RSE=0;
447 1 CSE=0;
448 1 _nop_();
449 1 _nop_();
450 1 b=P0&0x0f;
451 1 CSE=1;
452 1 return(b);
453 1 }
454
455 void writedata(uchar a)
456 {
457 1 WRE=0;
458 1 RDE=1;
459 1 RSE=0;
460 1 CSE=0;
461 1 _nop_();
462 1 _nop_();
463 1 P0=a;
464 1 _nop_();
465 1 _nop_();
466 1 CSE=1;
467 1 }
468
469
470 void delayms(uint n)
471 {
472 1 uint b;
473 1 while(n>0)
474 1 {
475 2 for(b=0;b<100;b++);
476 2 n--;
477 2 }
478 1 }
479
480 void init_mt8888(void)
481 {
482 1 uchar a;
C51 COMPILER V7.06 MAIN 01/03/2009 12:35:54 PAGE 9
483 1 // P1=0;
484 1 // ONTEL=0;
485 1 delayms(100);
486 1 a=readsr();
487 1 writesr(0);
488 1 writesr(0);
489 1 writesr(8);
490 1 writesr(0);
491 1 a=readsr();
492 1
493 1 }
494
495 uchar GetDTMFdata(void) //接收一位号码
496 {
497 1 uchar i;
498 1 // control_status=0xfd; //设置:音频输出、DTMF、中断、下一次访问CRB
499 1 writesr(0xfd);
500 1 writesr(0);
501 1 i=readsr();
502 1 if(i&0x04)
503 1 {
504 2 //i=r_wDTMF;
505 2 i=readdata();
506 2 i&=0x0f; // 接收到有效号码
507 2 }
508 1 else
509 1 i=0;
510 1 return i; //没有接收到有效号码,返回0
511 1 }
512 void sendDTMFdata(uchar d) //发送一位号码
513 {
514 1 uchar i;
515 1 writedata(d);
516 1 IRQ_PIN=1;
517 1 while(IRQ_PIN);
518 1 // OUT1=!OUT1;
519 1 // OUT2=!OUT2;
520 1 delayms(800);
521 1 while(1)
522 1 {
523 2 i=readsr();
524 2 if(i&0x02)break;
525 2 }
526 1 OUT1=!OUT1;
527 1 OUT2=!OUT2;
528 1 }
529 void sendPhone(uchar *arr) //发送一个完整的电话号码,遇0停止("0"是字符数组的///////////结束标志符,而
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -