⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testboard_rec.lst

📁 PIC MCU开发用的一个小工具,用于对某些外设芯片子程序的调试,有2个按键2x20的字符LCD,3个I/O,1个UART,非常好用,包含SCHPCB 以及初始化C代码.
💻 LST
📖 第 1 页 / 共 3 页
字号:
   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 + -