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

📄 system.lst

📁 该程序是基于c8051f的红外线发射率的测量程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 233          ///////////////////////////////////////////////////////////////////////////////
 234          ///////////////////////////////////////////////////////////////////////////////
 235          ////////////////////////////////////////////////        以下是关于I2C总线的     ///////
C51 COMPILER V7.07   SYSTEM                                                                05/17/2003 11:52:25 PAGE 5   

 236          ////////////////////////////////////////////////        延时6us                 ////////////
 237          void delay6us(){
 238   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 239   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 240   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 241   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 242   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 243   1              nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
 244   1      }
 245          ////////////////////////////////////////////////        延时任意us              ////////////
 246          void delayus(unsigned int us){
 247   1              unsigned int i;
 248   1              for(i=0;i<us;i++);
 249   1      }
 250          ////////////////////////////////////////////////        启动I2C总线             ///////////
 251          void i2cstart(){
 252   1              SCL=0;
 253   1              delay6us();
 254   1              SDA=1;
 255   1              delay6us();
 256   1              SCL=1;
 257   1              delay6us();
 258   1              SDA=0;
 259   1              delay6us();
 260   1              SCL=0;
 261   1              delay6us();
 262   1      }
 263          ////////////////////////////////////////////////        关闭I2C总线             ///////////
 264          void i2cstop(){
 265   1              SCL=0;
 266   1              delay6us();
 267   1              SDA=0;
 268   1              delay6us();
 269   1              SCL=1;
 270   1              delay6us();
 271   1              SDA=1;
 272   1              delay6us();
 273   1              SCL=0;
 274   1              delay6us();
 275   1      }
 276          
 277          ////////////////////////////////////////////////        发送非应答位    //////////
 278          void mnack(){
 279   1              SDA=1;
 280   1              delay6us();
 281   1              SCL=1;
 282   1              delay6us();
 283   1              SCL=0;
 284   1              delay6us();
 285   1              SDA=0;
 286   1      }
 287          ////////////////////////////////////////////////        应答位检查子程序        //////
 288          unsigned char checkack(){
 289   1              unsigned char ack;
 290   1              SDA=1;
 291   1              delay6us();
 292   1              SCL=1;
 293   1              delay6us();
 294   1              ack=SDA;
 295   1              delay6us();
 296   1              SCL=0;
 297   1              delay6us();
C51 COMPILER V7.07   SYSTEM                                                                05/17/2003 11:52:25 PAGE 6   

 298   1              return(ack);
 299   1      }
 300          ///////////////////////////////////////////////         向FLASH写1个字节        ///////
 301          void write1byte(unsigned char input){
 302   1              unsigned char i,temp;
 303   1              temp = input;
 304   1              for(i=0;i<8;i++){
 305   2                      SCL = 0;
 306   2                      delay6us();
 307   2                      temp<<=1;
 308   2                      SDA = CY;//temp左移溢出的位
 309   2                      delay6us();
 310   2                      SCL = 1;
 311   2                      delay6us();
 312   2              }
 313   1              SCL = 0;
 314   1              delay6us();                                             
 315   1              SDA = 1;
 316   1      }
 317          ///////////////////////////////////////////////         从FLASH中读1个字节      /////////
 318          unsigned char read1byte(){
 319   1              unsigned char i,temp;
 320   1              temp = 0;
 321   1              SCL = 0;
 322   1              delay6us();
 323   1              SDA = 1;
 324   1              delay6us();
 325   1              for(i=0;i<8;i++){
 326   2                      SCL = 1;
 327   2                      delay6us();
 328   2                      temp=(temp<<=1) | SDA;
 329   2                      SCL = 0;
 330   2                      delay6us();
 331   2              }                                                       
 332   1              SDA = 1;
 333   1              delay6us();     
 334   1              delayus(2000);                                  
 335   1              return(temp);
 336   1      }
 337          //********************************************************************************************************
             -*********************************************
 338          //从存储器芯片指定地址处读出一字节
 339          //********************************************************************************************************
             -*********************************************
 340          unsigned char write_byte(unsigned char dat,unsigned int addr)
 341          {
 342   1              i2cstart();                            
 343   1              write1byte(W_CONTROLBYTE);             
 344   1              if(checkack()==1)                     
 345   1                      return 1;                        
 346   1              write1byte(addr>>8); //写入高8位地址                     
 347   1              if(checkack()==1)
 348   1                      return 1;  
 349   1          write1byte((unsigned char)addr); //写入低8位地址                     
 350   1              if(checkack()==1)
 351   1                      return 1;  
 352   1              write1byte(dat);                  
 353   1              if(checkack()==1)
 354   1                      return 1;
 355   1              i2cstop();                              
 356   1              delayus(2000); 
 357   1              delayus(2000);
C51 COMPILER V7.07   SYSTEM                                                                05/17/2003 11:52:25 PAGE 7   

 358   1              delayus(2000);                          
 359   1              return 0;                       
 360   1      }
 361          //********************************************************************************************************
             -*******************************************
 362          //写入一字节到存储器芯片指定地址处
 363          //********************************************************************************************************
             -*******************************************
 364          unsigned char  read_byte(unsigned int addr)
 365          {
 366   1              unsigned char temp;
 367   1              i2cstart();                             
 368   1              write1byte(W_CONTROLBYTE);             
 369   1              if(checkack()==1)                     
 370   1                      return 1;                        
 371   1              write1byte(addr>>8); //写入高8位地址                     
 372   1              if(checkack()==1)
 373   1                      return 1;  
 374   1          write1byte((unsigned char)addr); //写入低8位地址                     
 375   1              if(checkack()==1)
 376   1                      return 1;  
 377   1              i2cstart();                             
 378   1              write1byte(R_CONTROLBYTE);            
 379   1              if(checkack()==1)
 380   1                      return 1; 
 381   1              temp=read1byte();                  
 382   1              mnack();                             
 383   1              i2cstop();                             
 384   1              return temp;                    
 385   1      }
 386          ///////////////////////////////////////////////////////////////////////////////////////////////
 387          ///////////////////////////////////////////////////////////////////////////////////////////////
 388          //========================================      END     ===============================================
 389          
 390          //********************************************************************************************************
             -**************************************
 391          //给LCD发送一个字节
 392          //********************************************************************************************************
             -**************************************
 393          void send_lcd_byte(unsigned char dat)
 394          {
 395   1        STB=1;
 396   1        while(Busy==1);   //等待系统空闲
 397   1        delay4us();      //延时us
 398   1        delay4us();
 399   1        P2=dat;    
 400   1        STB=0;            //下降沿送入
 401   1        delay4us();
 402   1        STB=1 ;
 403   1      } 
 404          
 405          //********************************************************************************************************
             -***************************************
 406          //通过UART0发送一个字符
 407          //********************************************************************************************************
             -****************************************
 408          void uart0_send_byte(unsigned char dat)
 409          {
 410   1        
 411   1      }
*** WARNING C280 IN LINE 408 OF SYSTEM.C: 'dat': unreferenced local variable
 412          
C51 COMPILER V7.07   SYSTEM                                                                05/17/2003 11:52:25 PAGE 8   

 413          
 414          //********************************************************************************************************
             -*********************************************
 415          //读取发射率
 416          //********************************************************************************************************
             -********************************************
 417          unsigned int get_emissivity(void)
 418          {
 419   1        return 0;
 420   1      }
 421          
 422          //********************************************************************************************************
             -********************************************
 423          //读取工作电压
 424          //********************************************************************************************************
             -********************************************
 425          unsigned int get_voltige(void)
 426          {
 427   1        return 0;
 428   1      }
 429          
 430          //********************************************************************************************************
             -*******************************************
 431          //读取工作电流
 432          //********************************************************************************************************
             -********************************************
 433          unsigned int get_current(void)
 434          {
 435   1        return 0;
 436   1      }
 437          
 438          //========================================================================================================
             -===
 439          //timer0中断
 440          //========================================================================================================
 441          void timer0_ISR(void) interrupt 1
 442          {
 443   1          //unsigned char i; 
 444   1          TL0=0x40;
 445   1              TH0=0xB0;//这样T0就在20ms内中断一次
 446   1          //第一个10ms时采集电压和发射率
 447   1              SFRPAGE=LEGACY_PAGE;
 448   1              AMX0SL=2; //发射率通道
 449   1              delay4us();
 450   1          AD0INT=0;
 451   1              AD0BUSY=1;//启动转换
 452   1              while(AD0INT==0);
 453   1              AD0INT=0;
 454   1          emissivity_AD=(ADC0H & 0x0F)*256+ADC0L;
 455   1            
 456   1              if(time==6)
 457   1              {
 458   2                AMX0SL=1; //电压通道
 459   2                delay4us();
 460   2            AD0INT=0;
 461   2                AD0BUSY=1;//启动转换

⌨️ 快捷键说明

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