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

📄 lpc935.lst

📁 PHILIPS LPC935 MCU 利用其8路AD转换器,对监测对象进行数据采集,然后通过UART将采集到的数据发送到PC上位机
💻 LST
📖 第 1 页 / 共 3 页
字号:
 313   6                                                              case 5:
 314   6                                                                      LED7=On;
 315   6                                                              break;
 316   6                                                              case 6:
 317   6                                                                      LED8=On;
 318   6                                                              break;
 319   6                                                              case 7:
 320   6                                                                      LED9=On;
 321   6                                                              break;
 322   6                                                      }
 323   5                                              }
 324   4                                              else
 325   4                                              {
 326   5                                                      switch(CMD.Param1)
 327   5                                                      {
 328   6                                                              case 5:
 329   6                                                                      LED7=Off;
 330   6                                                              break;
 331   6                                                              case 6:
 332   6                                                                      LED8=Off;
 333   6                                                              break;
 334   6                                                              case 7:
 335   6                                                                      LED9=Off;
 336   6                                                              break;
 337   6                                                      }
 338   5                                              }
 339   4                                      break;
 340   4                                      case PWM_COMMAND:
 341   4                                              //LED7=Off;LED8=Off;LED9=On;
 342   4                                      break;
 343   4                                      case ADSMPL_COMMAND:
 344   4                                              AD_Channel=CMD.Param1;
 345   4                                              Send_Ms_Cnt=CMD.Param2;
 346   4                                              Flag_AD=true;   
 347   4                                      break;
 348   4                                      case SOFT_RESET:
 349   4                                              if(CMD.Param1==0x00A5&&CMD.Param2==0x00A5)
 350   4                                                      AUXR1|=0x08;
 351   4                                      break;
 352   4                                      case GET_COUNT:
 353   4                                              if(CMD.Param2==1)Flag_GetCounter=true;
 354   4                                              else if(CMD.Param2==0) Flag_GetCounter=false;
 355   4                                      break;
 356   4                                      default:
 357   4                                      /*      Second_Cnt=0;
 358   4                                              RELAX1=High;
 359   4                                              RELAX2=High;
 360   4                                              RELAX3=High;
 361   4                                              RELAX4=High;
 362   4                                              LED7=On;
 363   4                                              LED8=On;
 364   4                                              LED9=On;
 365   4                                              while(Second_Cnt<1);
C51 COMPILER V7.09   LPC935                                                                03/14/2006 04:35:09 PAGE 7   

 366   4                                              Second_Cnt=0;
 367   4                                              RELAX1=Low;
 368   4                                              RELAX2=Low;
 369   4                                              RELAX3=Low;
 370   4                                              RELAX4=Low;
 371   4                                              LED7=Off;
 372   4                                              LED8=Off;
 373   4                                              LED9=Off;
 374   4                                              while(Second_Cnt<1);/**/
 375   4                                      break;          
 376   4                              }
 377   3                      }
 378   2                      //}
 379   2              }
 380   1      }       // end main()
 381          
 382          
 383          //**************************************************
 384          
 385          
 386          
 387          void Init_IO(void)
 388          {
 389   1      
 390   1              P2M1=0x00;
 391   1              P2M2=0x00;
 392   1              P3M1=0x00;
 393   1              P3M2=0x00;
 394   1              P1M1=0x80;
 395   1              P1M2=0x00;
 396   1              //P0M1=0x1F;
 397   1              P0M1=0x00;
 398   1              P0M2=0x00;
 399   1      //      AUXR1&=~0x08;// Disable the software reset
 400   1      //      AUXR1|=1;
 401   1              DIVM=0; 
 402   1      }
 403          
 404          //**************************************************
 405          //串口 9600BAUDRATE N 8 1
 406          void UART_init()
 407          {
 408   1              // configure UART
 409   1        // clear SMOD0
 410   1              PCON &= ~0x40;
 411   1              SCON = 0x50;
 412   1        // set or clear SMOD1
 413   1              PCON &= 0x7f;
 414   1              PCON |= (0 << 8);
 415   1              SSTAT = 0x00;
 416   1      
 417   1        // configure baud rate generator
 418   1              BRGCON = 0x00;
 419   1              BRGR0 = 0xF0;           //7.373M  baudrate=9600   (BRGR1,BTGR0)=7.373M/9600-16
 420   1              BRGR1 = 0x02;
 421   1              BRGCON = 0x03;
 422   1      
 423   1          ESR=1;              //ESR=Enable Serial Recieve
 424   1      }
 425          
 426          void Rcv_ISR() interrupt 4
 427          { 
C51 COMPILER V7.09   LPC935                                                                03/14/2006 04:35:09 PAGE 8   

 428   1              byte temp;
 429   1              EA=0;
 430   1              //LED7=On;
 431   1              if(RI)
 432   1              {
 433   2                      RI=0;
 434   2                      temp=SBUF;
 435   2                      //SIO_Out_Byte(temp);LED7=Off;
 436   2                      switch(Rec_Idx)
 437   2                      {
 438   3                              case 0:
 439   3                                      if(temp<0xA0||temp>0xA6)
 440   3                                      {
 441   4                                              Rec_Idx=0;return;
 442   4                                      }
 443   3                                      tempCMD.Command=temp;
 444   3                                      //SIO_Out_Byte(temp);
 445   3                                      Rec_Idx++;
 446   3                              break;
 447   3                              case 1:
 448   3                                      tempCMD.Param1=temp;
 449   3                                      tempCMD.Param1<<=8;
 450   3                                      //SIO_Out_Byte(temp);
 451   3                                      Rec_Idx++;
 452   3                              break;
 453   3                              case 2:
 454   3                                      tempCMD.Param1+=temp;
 455   3                                      //SIO_Out_Byte(temp);
 456   3                                      Rec_Idx++;
 457   3                              break;
 458   3                              case 3:
 459   3                                      tempCMD.Param2=temp;
 460   3                                      tempCMD.Param2<<=8;
 461   3                                      //SIO_Out_Byte(temp);
 462   3                                      Rec_Idx++;
 463   3                              break;
 464   3                              case 4:
 465   3                                      tempCMD.Param2+=temp;
 466   3                                      CMD.Command=tempCMD.Command;
 467   3                                      CMD.Param1=tempCMD.Param1;
 468   3                                      CMD.Param2=tempCMD.Param2;
 469   3                                      //SIO_Out_Byte(temp);
 470   3                                      Flag_COM_Rec=true;Rec_Idx=0;
 471   3                              break;
 472   3                              default:
 473   3                                      Rec_Idx=0;
 474   3                              break;
 475   3                      }
 476   2              }
 477   1              EA=1;
 478   1      }
 479          
 480          //------------------------- //功能发送中断 //-------------------------
 481          void Send_ISR() interrupt 13
 482          {
 483   1              EA=0;
 484   1              EA=1;
 485   1      } //--------------------------
 486          
 487          
 488          //**************************************************
 489          //10ms 中断函数
C51 COMPILER V7.09   LPC935                                                                03/14/2006 04:35:09 PAGE 9   

 490          void timer0_int(void) interrupt 1
 491          {
 492   1              EA=0;
 493   1              TH0=TH0_DATA;
 494   1              TL0=TL0_DATA;
 495   1              Cnt_100us++;
 496   1              if(Cnt_100us>=10)
 497   1              {
 498   2                      Cnt_MS++;
 499   2                      Snd_Time_Cnt++;
 500   2                      Cnt_100us=0;
 501   2              }       
 502   1              if (Cnt_MS>=1000) 
 503   1              {
 504   2                      Cnt_MS=0;
 505   2                      //Flag_Second=true;
 506   2                      Second_Cnt++;   
 507   2              }
 508   1              //if(Snd_Time_Cnt>=Send_Ms_Cnt&&Flag_AD) Send_AD_Result();      
 509   1              EA=1;
 510   1      }
 511          
 512          void timer0_init(void)
 513          {
 514   1        // configure timer 0
 515   1         TMOD = 0x01;
 516   1      
 517   1        // timer values
 518   1         TH0 = TH0_DATA;
 519   1         TL0 = TL0_DATA;
 520   1      
 521   1         // enable timer 0 interrupt
 522   1        ET0 = 1;
 523   1        // start timer 0
 524   1        TR0 = 1;
 525   1      } // timers_init
 526          
 527          void ADC_init(void)
 528          {
 529   1      
 530   1        ADINS=0x31;           //0011 0001, 选择 AD11,AD10,AD00 3 channels
 531   1        ADMODA=0x11;          //0001 0001, 选择转换工作模式:自动扫描,单次转换模式
 532   1        //ADMODA=0x44;                //0001 0001, 选择转换工作模式:自动扫描,连续转换模式
 533   1        ADMODB=0x00;          //500Khz < ADC CLK < 3.3Mhz,,
 534   1        // disable adc interrupt
 535   1        EAD = 0;
 536   1      }
 537          
 538          void delayms(word ms)
 539          {
 540   1              byte i;
 541   1              while (ms>0) { 
 542   2                      for (i=0;i<200;i++);
 543   2                      ms--;
 544   2              }
 545   1      }
 546          
 547          void SIO_Out_Hex(byte b)
 548          {
 549   1              SBUF='0';
 550   1              while (!TI);
 551   1              TI=0;
C51 COMPILER V7.09   LPC935                                                                03/14/2006 04:35:09 PAGE 10  

 552   1              SBUF='x';
 553   1              while (!TI);
 554   1              TI=0;
 555   1              if ((b>>4)<0x0a)
 556   1                      SBUF=0x30+(b>>4);
 557   1              else
 558   1                      SBUF=0x37+(b>>4);
 559   1              while (!TI);
 560   1              TI=0;
 561   1      
 562   1              if ((b&0x0f)<0x0a)
 563   1                      SBUF=0x30+(b&0x0f);
 564   1              else
 565   1                      SBUF=0x37+(b&0x0f);
 566   1              while (!TI);
 567   1              TI=0;
 568   1      
 569   1              SBUF='H';
 570   1              while (!TI);
 571   1              TI=0;
 572   1      
 573   1      }
 574          
 575          void SIO_Out_Dec(byte b)
 576          {
 577   1              byte temp;
 578   1              temp=b/10;
 579   1              SBUF=0x30+(temp);
 580   1              while (!TI);
 581   1              TI=0;
 582   1      
 583   1              SBUF=0x30+(b-temp*10);
 584   1              while (!TI);
 585   1              TI=0;
 586   1      }
 587          
 588          void SIO_Out_Byte(byte b)
 589          {
 590   1              SBUF=b;
 591   1              while (!TI);
 592   1              TI=0;
 593   1      }
 594          
 595          void SIO_Out_Str (byte *pstr)
 596          {
 597   1              while (*pstr!=0x00)
 598   1              {
 599   2                      SBUF=*pstr;
 600   2                      while (!TI);
 601   2                      TI=0;
 602   2                      pstr++;
 603   2              }
 604   1      }
 605          
 606          void Clear_Timer(void)
 607          {
 608   1              EA=0;
 609   1              Flag_10ms=false;
 610   1              Flag_Second=false;
 611   1              EA=1;
 612   1      }
 613          
C51 COMPILER V7.09   LPC935                                                                03/14/2006 04:35:09 PAGE 11  

 614          void Do_ADConvert()             
 615          {                       
 616   1              ADCON0=0x05;                    //选择转换触发模式;并立即启动
 617   1              AD_Current=AD0DAT0;
 618   1              ADCON0&=0xF7;                   //清除中断完成标志
 619   1      
 620   1              ADCON1=0x05;                    //选择转换触发模式;并立即启动
 621   1              AD_Load=AD1DAT0;                // ALL AD Convert in sample frequencs
 622   1              AD_Battery=AD1DAT1;
 623   1              ADCON1&=0xF7;                   //清除中断完成标志
 624   1      }
 625          
 626          
 627          
 628          void delayus(word us)
 629          {
 630   1              while (us--);
 631   1      }
 632          
 633          void    Send_AD_Result(void)

⌨️ 快捷键说明

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