📄 testboard_rec.lst
字号:
459: }
460: /******************************************
461: 主循环程序main()
462: 入口:无
463: 出口:无
464: *******************************************/
465: main()
466: {
467: // unsigned char count;
468: sfr_setup();
469: /* buzz=1;
470: lcd_init();
471: disp_loge(welcome_words,20,0);
472: disp_loge(type_words,20,1);
473: d10mS();
474: buzz=0;
475: for(count=255;count>0;count--)
476: {d10mS();}
477: writ_com(0x01);
478: d4mS();
479: disp_loge(playpar,12,0);
480: disp_loge(playstate,13,1);
481: */
482: TRISC5=1;
483: waitfree();
484: asm("movf _PORTA,w");RAIF=0;RAIE=1;IOCA1=1;
485: GIE=1;
486: while(1)
487: {
488: d4mS();
489: /* if(softpsw&0x02)
490: {
491: disp_onedata(data_tab(nowdisc),3);
492: disp_onedata(data_tab(nowminH),9);
493: writ_data(data_tab(nowminL));
494: disp_onedata(data_tab(nowsecH),12);
495: writ_data(data_tab(nowsecL));
496: disp_onedata(data_tab(nowtrackH),17);
497: writ_data(data_tab(nowtrackL));
498: if(playpsw&0x01)
499: {disp_onedata('S',36);writ_data('c');writ_data('a');writ_data('n');}
500: else
501: {disp_onedata(' ',36);writ_data(' ');writ_data(' ');writ_data(' ');}
502: if(playpsw&0x08)
503: {disp_onedata('R',36);writ_data('e');writ_data('p');
504: writ_data('A');}
505: else if(playpsw&0x04)
506: {disp_onedata('R',36);writ_data('e');writ_data('p');
507: writ_data('1');}
508: softpsw&=0xfd;
509: }
510: */
511: }
512: }
513:
514:
515:
516:
517: /*********************************************************************************
518:
519: 双机通讯管理
520:
521: *********************************************************************************/
522:
523: /************************************************************
524: 数据发送函数data_send()
525: 作用:发送1字节数据
526: 入口:待发送的数据
527: 出口:无
528: ************************************************************/
529: void data_send(unsigned char data)
530: {
531: unsigned char cnt;
532: GIE=0; //关闭总中断
533: SCB=0;
534: SCB_T=0; //获得总线控制权
535: d100uS(); //起始信号(低电平1mS)
536: for(cnt=8;cnt>0;cnt--)
537: {
538: SCB=1; //同步头信号
539: d7uS();
540: if(data&0x80)
541: SCB=1; //输出数据1
542: else
543: SCB=0; //输出数据0
544: d17uS();data<<=1;
545: SCB=0; //位结束信号
546: d7uS();
547: }
548: SCB=1;
549: SCB_T=1; //放弃总线控制权
550: INTF=0;
551: GIE=1; //开总中断
552: }
553: /************************************************************
554: 数据接收函数data_rec()
555: 作用:接收1字节数据
556: 入口:待发送的数据
557: 出口:接收到的一字节数据
558: ************************************************************/
559: unsigned char data_rec(void)
560: {
561: unsigned char cnt,temp;
562: temp=0;
563: SCB_T=1;
564: for(cnt=8;cnt>0;cnt--)
565: {
566: while(SCB); //等待低电平
567: while(!SCB); //等待同步信号头
568: temp<<=1;
569: d17uS(); //延时到数据区
570: if(SCB) //读取数据
571: temp|=0x01;
572: else
573: temp&=0xfe;
574: }
575: return(temp);
576: }
577: //CDC状态数据移位
578: void shiftdata(void)
579: {
580: unsigned char temp;
581: temp=STATUS;
582: #asm
583: bcf _STATUS,6
584: bsf _STATUS,5
585: rlf _discpsw0,f
586: rlf _discpsw1,f
587: rlf _discpsw2,f
588: rlf _discpsw3,f
589: rlf _discpsw4,f
590: rlf _discpsw5,f
591: rlf _discpsw6,f
592: rlf _discpsw7,f
593: #endasm
594: STATUS=temp;
595: }
596: //数据清除
597: void dataclear(void)
598: {
599: discpsw0=0;discpsw1=0;discpsw2=0;
600: discpsw3=0;discpsw4=0;discpsw5=0;
601: discpsw6=0;discpsw7=0;
602: }
603: /******************************************
604: 中断处理函数inthandle()
605: 作用:
606: 入口:无;
607: 出口:无;
608: *******************************************/
609: void interrupt inthandle(void)
610: {
611: if(INTE&&INTF)
612: {
613: unsigned char temp;
614: temp=data_rec();
615: switch(temp)
616: {
617: case 0xf0: //数位1
618: data_send(nowdisc);break;
619: case 0xf1: //数位2
620: data_send(nowtrackH);break;
621: case 0xf2: //数位3
622: data_send(nowtrackL);break;
623: case 0xf3: //数位4
624: data_send(nowminH);break;
625: case 0xf4: //数位5
626: data_send(nowminL);break;
627: case 0xf5: //数位6
628: data_send(nowsecH);break;
629: case 0xf6: //数位7
630: data_send(nowsecL);INTE=0;break;
631: default: ;
632: }
633: //************复位INT中断
634: INTF=0;ready=0;
635: }
636:
637: if(RAIE&&RAIF)
638: {
639: buzz=1;
640: if(RA1)
641: {
642: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
643: TMR1L=0;TMR1H=0; //T1初值
644: TMR1ON=1; //运行T1
645: }
646: else
647: {
648: TMR1ON=0;
649: shiftdata(); //调整数据队列
650: if(TMR1H<0x04)
651: {discpsw0&=0xfe;}
652: else
653: {discpsw0|=0x01;}
654: TMR1IF=0;TMR1L=0x65;TMR1H=0xf0; //T1初值
655: TMR1ON=1;TMR1IE=1; //运行T1
656: }
657: asm("movf _PORTA,w");RAIF=0;
658: }
659: if(TMR1IE&&TMR1IF)
660: {
661: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
662: softpsw&=0xFE; //关数据读取标志
663: if(discpsw7==0x99)
664: {
665: nowtrackH=discpsw6&0x0f;
666: nowtrackL=discpsw5>>4; //Track
667: nowminH=discpsw4&0x0f;
668: nowminL=discpsw3>>4; //Min
669: nowsecH=discpsw3&0x0f;
670: nowsecL=discpsw2>>4; //sec
671: playpsw&=0xf3;
672: playpsw|=discpsw2&0x0c; //REP状态
673: if(discpsw1&0x80) //SCAN状态
674: {playpsw|=0x01;}
675: else
676: {playpsw&=0xfe;}
677: ready=1;INTE=1;
678: }
679: else if(discpsw5==0x9b)
680: {nowdisc=discpsw4&0x0f;ready=1;INTE=1;}
681: dataclear();//waitfree();
682: asm("movf _PORTA,w");RAIF=0;buzz=0;
683: }
684: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -