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

📄 text.lst

📁 MSC1210的ADC采集以及RS232通讯读写CPLD的例子程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 200   3                    case 'F':
 201   3                      if(Serial0_Receive.pre_char=='F'){
 202   4                              Serial0_Receive.buf[Serial0_Receive.buf_present_pos++]=c;
 203   4                              Serial0_Receive.pre_char=c;
 204   4                              Serial0_Receive.cmd_finish=FALSE;
 205   4                              }
 206   3                              else 
 207   3                              {Serial0_Receive.buf[Serial0_Receive.buf_present_pos++]=c;
 208   4                              Serial0_Receive.pre_char=c;
 209   4                      }
 210   3                              break;
 211   3              
 212   3                    case 'E':
 213   3                      if(Serial0_Receive.pre_char=='E'){
 214   4                              Serial0_Receive.buf[Serial0_Receive.buf_present_pos++]=c;
 215   4                              Serial0_Receive.pre_char=c;
 216   4                              Serial0_Receive.cmd_finish=TRUE;
 217   4                              isr_send_signal (INCEPTBUF0);   //唤醒串口1数据处理任务
 218   4                              }
 219   3                      else {
 220   4                              Serial0_Receive.buf[Serial0_Receive.buf_present_pos++]=c;
 221   4                              Serial0_Receive.pre_char=c;
 222   4                              }
 223   3                              break;
 224   3              
 225   3                    default:                       /* read all other characters into inbuf  */                         
             -            
 226   3                      if (Serial0_Receive.cmd_finish==FALSE){
 227   4                              Serial0_Receive.buf[Serial0_Receive.buf_present_pos++]=c;
 228   4                          Serial0_Receive.pre_char=c;
 229   4                              }
 230   3                      break;
 231   3                  };
 232   2         }
 233   1      
 234   1      }
 235          
 236                 /*辅助中断服务程序*/
 237          assistant_proc() interrupt 6 using 3
 238          {
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:17:31 PAGE 5   

 239   1              signed long int xdata result;
 240   1              switch(PAI&0x0f)
 241   1              {
 242   2                      case 0x06://adc滤波中断
 243   2                      {
 244   3                              if (ccnun--)    result=unipolar();                              // Dummy read to clear ADCIRQ
 245   3                              else
 246   3                              {                       
 247   4                                      result=unipolar();                                                      // read to clear ADCIRQ
 248   4                                      adcsum.buf[adcsum.ps]=result>>8;                        // read to clear ADCIRQ
 249   4                                      switch ((chanl_n++)&0x01)
 250   4                                      {
 251   5                                              case 0:
 252   5                                              {
 253   6                                                      ADMUX=((chanl_n+1)<<3)|0x08;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
             -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 254   6                                                      adcsum.ps=(chanl_n+1)>>1;
 255   6                                              }break;
 256   5                                              case 1:
 257   5                                              {
 258   6                                                      ADMUX=0x08;
 259   6                                                      adcsum.ps=0;
 260   6                                              }break;
 261   5                                      }
 262   4                                      chanl_n= (chanl_n<8)? chanl_n : 0 ;
 263   4                                      ccnun=4;        
 264   4                              }
 265   3                      }break;
 266   2      
 267   2              }
 268   1              AI=CLEAR;
 269   1      }
 270          
 271           /******************************************************************************/
 272          /*        Task 0 'init': Initialize                                           */
 273          /******************************************************************************/
 274          void init (void) _task_ INIT  /* program execution starts here        */
 275          {      
 276   1          init_spi();
 277   1          serial0_init();
 278   1          init_adc();
 279   1          PDCON |= PDWDT;                                             /* turn oFF WatchDog  */
 280   1              WDTCON |= EWDT;                                 /* set ewbt            */
 281   1              WDTCON &= ~EWDT;                                /* clear ewbt set timeout=8,900ms    */
 282   1          PDCON &= ~(PDSPI|PDAD);                     /* turn on SPI and ADC device */ 
 283   1          h_cmd.in_p = CLEAR;
 284   1          h_cmd.exe_p = CLEAR;
 285   1          h_cmd.cont = CLEAR;
 286   1              Serial0_Receive.buf_present_pos = 0;           /*Now location of buffer,initial value is buf_start*/
 287   1              Serial0_Receive.pre_char = 0;                  /*Prechar of present position,initial value is 0*/
 288   1              Serial0_Receive.cmd_finish = 0;                /*This is 1 command end has been accepted ,initial value i
             -s 0*/
 289   1              TI_0=0; 
 290   1              TI_1=0; 
 291   1          DAC8532 =1;
 292   1          os_create_task (LOGIC_JUDGE);
 293   1          os_create_task (COMMAND);
 294   1          os_create_task (INCEPTBUF0); 
 295   1              os_delete_task (INIT);              /* stop init task (no longer needed)    */
 296   1      }
 297          
 298          /*--------------------------------------------------------------------------
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:17:31 PAGE 6   

 299                                读写CPLD
 300          ---------------------------------------------------------------------------*/
 301          
 302          void logic_judge (void) _task_ LOGIC_JUDGE  
 303          {       
 304   1          int data i=0;
 305   1              while(1)
 306   1              {
 307   2                      os_wait (K_TMO, 50,0);
 308   2                  for(i=0;i<5;i++)
 309   2              {
 310   3                  *(W_ADDRESS+i)= adcsum.buf[i]>>1; 
 311   3                      data_buf[i]=adcsum.buf[i]>>1; 
 312   3              }
 313   2                      Uart0Send(card_addr,cmdf_read,0,data_buf,0,7);
 314   2              //      for(i=0;i<10;i++)
 315   2              //      {
 316   2              //              DA[i]=*(W_ADDRESS+64+i);
 317   2              //      }
 318   2              //      printf("\n%d,%d,%d,%d,%d,%d,%d,%d,%d,%d mmm\n",DA[0],DA[1],DA[2],DA[3],DA[4],DA[5],DA[6],DA[7],DA[8],D
             -A[9]);
 319   2                      //daval=DA[0];
 320   2             // write_8532(daval,2);
 321   2              //      Uart0Send(card_addr,cmdf_read,0,DA,0,10); 
 322   2              }
 323   1      }
 324          /******************************************************************************/
 325          /*                                串口0数据处理任务                          */
 326          /******************************************************************************/
 327          void inceptbuf0 (void) _task_ INCEPTBUF0 
 328          {
 329   1              while(1)
 330   1              {
 331   2                      os_wait (K_SIG, 0, 0);
 332   2                      if(h_cmd.in_p<4)
 333   2                      {               
 334   3                              read_cmd(h_cmd.in_p, Serial0_Receive.buf);
 335   3                              h_cmd.in_p++;
 336   3                              h_cmd.in_p=h_cmd.in_p&3;
 337   3                              h_cmd.cont++;
 338   3                      }
 339   2                      os_clear_signal(INCEPTBUF0);
 340   2              }
 341   1      }
 342          
 343          /******************************************************************************/
 344          /*                              命令处理任务                                 */
 345          /******************************************************************************/
 346          void command (void) _task_ COMMAND       
 347          {
 348   1              uint valtemp=0,i;
 349   1              while(1)
 350   1              {
 351   2                      os_wait (K_TMO, 20,0);  
 352   2              if(h_cmd.cont>0)    //h_cmd.cont命令数大于0
 353   2              {
 354   3                              if(h_cmd.buf[h_cmd.exe_p].n==ADDRESS)  //如果站地址等于'z'
 355   3                      {
 356   4                                      if(h_cmd.buf[h_cmd.exe_p].a==card_addr)  //功能地址为板地址
 357   4                                      {
 358   5                                              if(h_cmd.buf[h_cmd.exe_p].f==cmdf_read)
 359   5                                              {
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:17:31 PAGE 7   

 360   6                                                      if(h_cmd.buf[h_cmd.exe_p].da[0]==0)
 361   6                                                      {
 362   7                                              Uart0Send(card_addr,cmdf_read,0,data_buf,0,7);
 363   7                                                  }
 364   6                                              }
 365   5                                              else if(h_cmd.buf[h_cmd.exe_p].f==cmdf_write)
 366   5                                              {
 367   6                                                      if(h_cmd.buf[h_cmd.exe_p].da[0]==1)
 368   6                                                      {
 369   7                                                              valtemp=h_cmd.buf[h_cmd.exe_p].da[1];
 370   7                                                              data_buf[5]=valtemp;
 371   7                                                              write_8532(valtemp,1); 
 372   7                                                              valtemp=0;
 373   7                                                      }
 374   6                                                      else if(h_cmd.buf[h_cmd.exe_p].da[0]==2)
 375   6                                                      {
 376   7                                                              valtemp=h_cmd.buf[h_cmd.exe_p].da[1];
 377   7                                                              data_buf[6]=valtemp;
 378   7                                                              write_8532(valtemp,2); 
 379   7                                                              valtemp=0;
 380   7                                                      }
 381   6                                              }
 382   5                                      }           
 383   4                      }
 384   3                              h_cmd.cont--;
 385   3                              h_cmd.exe_p++;
 386   3                              h_cmd.exe_p=h_cmd.exe_p&3;
 387   3                      }
 388   2              }
 389   1      }
*** WARNING C280 IN LINE 348 OF TEXT.C: 'i': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1863    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =    279      35
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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