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

📄 testboard.lst

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

   183: /************************************************************

   184: 总线空闲等待函数waitfree()

   185:   作用:等待总线空闲

   186:   入口:无

   187:   出口:无

   188: ************************************************************/

   189:         void waitfree(void)

   190:         {

   191:          TMR1ON=0;

   192:          TMR1IF=0;

   193:          TMR1L=0x65;

   194:          TMR1H=0xf0;

   195:          TMR1ON=1;      //运行T1

   196:          while(!TMR1IF)

   197:                 {

   198:                  if(RA1)

   199:                         {

   200:                          TMR1L=0x65;

   201:                          TMR1H=0xf0;

   202:                          TMR1ON=1;      //运行T1

   203:                         }

   204:                 }

   205:         }

   206: /************************************************************

   207: 延时函数D7uS()

   208:   作用:延时7uS

   209: ************************************************************/

   210:         void D7uS(void)

   211:         {

   212:          asm("nop");

   213:          asm("nop");

   214:         }

   215: /************************************************************

   216: 总线空闲等待函数send_cdcdata()

   217:   作用:等待总线空闲

   218:   入口:无

   219:   出口:无

   220: ************************************************************/

   221:         void send_cdcdata(void)

   222:         {

   223:          unsigned char buffer[4];

   224:          unsigned char cnt1,cnt2,temp;

   225:          if(softpsw&0x02)

   226:                 {

   227:                  buffer[0]=(nowtrackH<<4)|nowtrackL;

   228:                  buffer[1]=(nowminH<<4)|nowminL;

   229:                  buffer[2]=(nowsecH<<4)|nowsecL;

   230:                  buffer[3]=nowdisc;

   231:                 //发送数据

   232:                  cdc_dat=0;

   233:                  cdc_dat_T=0;   //发送握手信号

   234:                  while(cdc_clk);

   235:                  GIE=0;

   236:                  while(!cdc_clk);

   237:                  cdc_clk=1;

   238:                  cdc_clk_T=0;   //时钟为高

   239:                  for(cnt1=0;cnt1<4;cnt1++)

   240:                         {

   241:                          temp=buffer[cnt1];

   242:                          for(cnt2=8;cnt2>0;cnt2--)

   243:                                 {

   244:                                  D7uS();D7uS();D7uS();

   245:                                  if(temp&0x80)

   246:                                         {cdc_dat=1;}

   247:                                  else

   248:                                         {cdc_dat=0;}

   249:                                  cdc_clk=0;

   250:                                  D7uS();

   251:                                  temp<<=1;

   252:                                  cdc_clk=1;

   253:                                 }

   254:                         }

   255:                  cdc_dat_T=1;cdc_clk_T=1;softpsw&=0xFD;

   256:                  waitfree();asm("movf _PORTA,w");RAIF=0;

   257:                  GIE=1;

   258:                 }

   259:         }

   260: /******************************************

   261: 主循环程序main()

   262: 入口:无

   263: 出口:无

   264: *******************************************/

   265:         main()

   266:         {

   267:          unsigned char count;

   268:          sfr_setup();

   269:          waitfree();

   270:          asm("movf _PORTA,w");RAIF=0;RAIE=1;IOCA1=1;

   271:          GIE=1;

   272:          while(1)

   273:                 {

   274:                  send_cdcdata();

   275:                 }

   276:         }

   277: /************************************************************

   278: 延时函数d7uS()

   279:   作用:延时7uS

   280: ************************************************************/

   281:         void d7uS(void)

   282:         {

   283:          asm("nop");

   284:          asm("nop");

   285:         }

   286: //CDC状态数据移位

   287:         void shiftdata(void)

   288:         {

   289:          unsigned char temp;

   290:          temp=STATUS;

   291:          #asm

   292:                 bcf     _STATUS,6

   293:                 bsf             _STATUS,5

   294:                 rlf     _discpsw0,f

   295:                 rlf     _discpsw1,f

   296:                 rlf     _discpsw2,f

   297:                 rlf     _discpsw3,f

   298:                 rlf     _discpsw4,f

   299:                 rlf     _discpsw5,f

   300:                 rlf     _discpsw6,f

   301:                 rlf     _discpsw7,f

   302:          #endasm

   303:          STATUS=temp;

   304:         }

   305: //数据清除

   306:         void dataclear(void)

   307:         {

   308:          discpsw0=0;discpsw1=0;discpsw2=0;

   309:          discpsw3=0;discpsw4=0;discpsw5=0;

   310:          discpsw6=0;discpsw7=0;

   311:         }

   312: /******************************************

   313: 中断处理函数inthandle()

   314:   作用:

   315:   入口:无;

   316:   出口:无;

   317: *******************************************/

   318:         void interrupt inthandle(void)

   319:         {

   320:          if(RAIE&&RAIF)

   321:                 {

   322:                  if(RA1)

   323:                         {

   324:                          TMR1IE=0;TMR1ON=0;TMR1IF=0;    //停止1

   325:                          TMR1L=0;TMR1H=0;                       //T1初值

   326:                          TMR1ON=1;      //运行T1

   327:                         }

   328:                  else

   329:                         {

   330:                          TMR1ON=0;

   331:                          shiftdata();                   //调整数据队列

   332:                          if(TMR1H<0x04)

   333:                                 {discpsw0&=0xfe;}

   334:                          else

   335:                                 {discpsw0|=0x01;}

   336:                          TMR1IF=0;TMR1L=0x65;TMR1H=0xf0;                        //T1初值

   337:                          TMR1ON=1;TMR1IE=1;     //运行T1                 

   338:                         }

   339:                  asm("movf _PORTA,w");RAIF=0;

   340:                 }

   341:          if(TMR1IE&&TMR1IF)

   342:                 {

   343:                  TMR1IE=0;TMR1ON=0;TMR1IF=0;    //停止1

   344:                  softpsw&=0xFE;                 //关数据读取标志

   345:                  if(discpsw7==0x99)

   346:                         {

   347:                          nowtrackH=discpsw6&0x0f;

   348:                          nowtrackL=discpsw5>>4; //Track

   349:                          nowminH=discpsw4&0x0f; 

   350:                          nowminL=discpsw3>>4;   //Min

   351:                          nowsecH=discpsw3&0x0f;

   352:                          nowsecL=discpsw2>>4;   //sec

   353:                          softpsw|=0x02;                         

   354:                         }

   355:                  else if(discpsw5==0x9b)

   356:                         {nowdisc=discpsw4&0x0f;softpsw|=0x02;} 

   357:                  dataclear();

   358:                  asm("movf _PORTA,w");RAIF=0;

   359:                 }

   360:         }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -