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

📄 zhudanyuan.lst

📁 新华龙c8051f020单片机 串口调试示例程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 250   1          {
 251   2            dat = 16383;
 252   2           }
 253   1          else if(dat<0)
 254   1           {
 255   2            dat = 0;
 256   2           }
 257   1          dat &=0x3fff;                   //14 bits is vaild.
 258   1          DAC_A0  = 0;
 259   1          return dat;                     //SHG设定, DAC8164通道A
 260   1       }      
 261          unsigned int Set_THG(uint tem)                 //THG 130 -160 度
 262           {
 263   1          unsigned int  dat;                  
 264   1          float v;
 265   1              tem = 15000;
 266   1          v = tem/1000.0;
 267   1          dat = (uint)(16384/5*v);
 268   1          if(dat>16383)
 269   1         {
 270   2            dat = 16383;
 271   2         }
 272   1          else if(dat<0)
 273   1         {
 274   2            dat = 0;
 275   2         }
 276   1         dat &=0x3fff;                   //14 bits is vaild.
 277   1         DAC_A0  = 0;                      
 278   1         return dat;                     //THG 设定, DAC8164通道B
 279   1       }
 280          
 281          void DAC8164_ISRA(unsigned int tem)
 282          {
 283   1         unsigned int dat;
 284   1         dat =  Set_SHG(tem);
 285   1         dat<<=2;
 286   1         dat |= DAC_cha1|0x800000;
 287   1         Spi_Write(dat);
 288   1       }
 289          void DAC8164_ISRB(unsigned int tem)
 290          {
 291   1         unsigned int dat;
 292   1         dat = Set_THG(tem);
 293   1         dat<<=2;
 294   1         dat |= DAC_cha2|0x800000;
 295   1         Spi_Write(dat);
 296   1       }
 297          void Spi_Write(unsigned int dat)
 298          {
 299   1              unsigned char i;
C51 COMPILER V7.02b   ZHUDANYUAN                                                           08/29/2008 14:57:54 PAGE 6   

 300   1              DAC_ENAB=0;
 301   1          _nop_(); 
 302   1          DAC_SYNC=0;
 303   1          DAC_SCLK = 1; 
 304   1          for(i=0;i<24;i++)
 305   1              {
 306   2                 DAC_DIN = ((dat&0x800000)>0)?1:0;
 307   2                 DAC_SCLK = 0;DAC_SCLK = 1; 
 308   2                 dat<<=1;
 309   2               }
 310   1          _nop_();
 311   1          _nop_();
 312   1          DAC_SYNC=1;
 313   1          _nop_(); _nop_();
 314   1              DAC_LDAC=1; 
 315   1              delay(10);
 316   1          DAC_ENAB=1;
 317   1      }
 318          
 319          //***************************************数据采集******************************//
 320          uint GetADCData(uchar channel)
 321           {      
 322   1              uchar xdata dtt,dth,dtl;
 323   1              uint xdata sump = 0;
 324   1              uint xdata i;
 325   1              MAX_CS = 0;     
 326   1              for(i=0; i<15; i++)
 327   1              {
 328   2                MAX_CON = 0;
 329   2                delay(10);
 330   2            MAX_CON = 0;
 331   2                if(MAX_INT = 0);
 332   2                { 
 333   3              for(i=0; i<2; i++)
 334   3                 {
 335   4                  MAX_RD  = 0;
 336   4              _nop_();
 337   4              _nop_();
 338   4                  dtt = P5&0x3f;
 339   4              dth = dtt;
 340   4                      dtl = P4;
 341   4                  sump+= dtl+dth*256;
 342   4              MAX_RD  = 1;
 343   4              delay(3000);
 344   4                  }
 345   3                 }
 346   2                      delay(30);
 347   2              }
 348   1              return sump / 15;
 349   1       }
 350          
 351          
 352          //--------------递推平均滤波--------------------//
 353          uint filter(uchar channel)       
 354          { 
 355   1          char  count;
 356   1          uint  sum = 0;
 357   1              if(channel == 0)
 358   1              {
 359   2                      filter0_buf[array0++] = GetADCData(0);
 360   2                      if (array0 == N0)  
 361   2                      array0 = 0;     
C51 COMPILER V7.02b   ZHUDANYUAN                                                           08/29/2008 14:57:54 PAGE 7   

 362   2                      for (count=0;count<N0;count++)
 363   2                      {
 364   3                         sum += filter0_buf[count];
 365   3                      }
 366   2                      return (uint)(sum/N0);
 367   2              }
 368   1              else if(channel == 1)
 369   1              {
 370   2                      filter1_buf[array1++] = GetADCData(1);
 371   2                      if (array1 == N1)  array1 = 0;  
 372   2                      for (count=0;count<N1;count++)
 373   2                      {
 374   3                         sum += filter1_buf[count];
 375   3                      }
 376   2                      return (uint)(sum/N1);
 377   2              }
 378   1              
 379   1              }               
 380          
 381          //--------SHG与THG的温度读取----------//
 382          void GetSHG( uchar channel, float current)   
 383           {
 384   1              uint  adresult;
 385   1              float  v,tem,logval;
 386   1              float  m,n,z;
 387   1      
 388   1              adresult = filter(channel);     
 389   1              v = adresult*5.0/16384.0; 
 390   1              if(channel == 5)
 391   1              {
 392   2               logval = log(v/CUR_SHG);
 393   2               _nop_();
 394   2           _nop_();
 395   2                m = 1.120332914398244e-003 ;
 396   2                _nop_();
 397   2           _nop_();
 398   2                n = 2.354891980894096e-004*logval;
 399   2                _nop_();
 400   2           _nop_();
 401   2                z = 8.289547029771934e-008*logval*logval*logval;
 402   2               _nop_();
 403   2           _nop_();
 404   2               _nop_();
 405   2           _nop_();;
 406   2                tem = 1.0/(m + n + z) - 273.15+0.11;  //实际温度      
 407   2               _nop_();
 408   2           _nop_();
 409   2                SHGAct = tem*100;                     //SHG实际温度
 410   2              }
 411   1              delay(3000);
 412   1       }
 413          void GetTHG( uchar channel, float current )
 414           {
 415   1              uint  adresult;
 416   1              float  v,tem,res;
 417   1          adresult = filter(0);       
 418   1              v = adresult*5.0/16384.0; 
 419   1              res = v/CUR_THG;
 420   1              tem = 0.261643*res-261.643;
 421   1              THGAct = tem*100.0;                       //THG实际温度
 422   1              
 423   1       }
C51 COMPILER V7.02b   ZHUDANYUAN                                                           08/29/2008 14:57:54 PAGE 8   

 424          
 425          
 426          
 427          //UART通信
 428          void Receiving()
 429          {
 430   1       #define PC_data (uchan xdata*) 0x0000;  //定义外部数据地址
 431   1       uchan xdata * point;                    //定义外部数据指针变量
 432   1       uchan ch;                              
 433   1       uint i;
 434   1       UART0_Init();          
 435   1       TR1 = 1;                                //启动波特率发生器
 436   1       RI0 = 0;                                //清接受中断标志
 437   1       point= PC_data;                         //指针变量赋初值
 438   1       P4= 0xf0;                               //CS0=0,CS1=1,选择RAM中的第0页
 439   1       for (i=0;i<oxffff;i++)                  //接受64K个数据(超过64K另置页地址)
 440   1        {
 441   2         while(!RI0);                          //接受一个字节数据
 442   2         *point=SUBF0;                         //存储一个字节数据到RAM中                     
 443   2         point++;                              //指向下一个地址
 444   2         RI0 = 0;                              //清接受中断标志                                                 
             -           
 445   2        } 
 446   1       TR1=0;                                  //停止波特率发生器
 447   1       P4= 0xff;                              
 448   1       erase_flash();                          //擦除FLASH芯片
 449   1       point= PC_data;                         //指针变量赋初值                      
 450   1       for (i=0;i<oxffff;i++)                  //写64K字节数据到FLASH中
 451   1        {
 452   2         P4= 0xf0;                             //选择RAM中第0页
 453   2         ch= *point;                           //读RAM
 454   2         P4= 0x8e;                             //选择FLASH中第0页
 455   2         XBYTE[0X5555]= 0xaa;                  //写一个字节的命令
 456   2         XBYTE[0X2aaa]= 0x55;                  //写一个字节的命令  
 457   2         XBYTE[0X5555]= 0xa0;                  //写一个字节的命令
 458   2         *point= ch;                           //写一个字节到FLASH中
 459   2         delay(500);
 460   2         point++;                              //指针变量指向下一个地址
 461   2        }
 462   1        P4= 0xff;                              //CS0=0,CS1=1,重置页地址
 463   1      }
 464          
 465          
 466          void Send_data(void)
 467          {
 468   1       uint i;
 469   1       P4= 0xf0;
 470   1       SCON1= 0x40;
 471   1       TR1 = 1;
 472   1       point= PC_data;
 473   1       P4= 0xf0;
 474   1       for (;point<ffff;)
 475   1       { for (i=0;i<10;i++)
 476   2        {
 477   3         SUBF1= *point;
 478   3         while((SCON1&0x02)==0);
 479   3         SCON1= 0x40;
 480   3         point++;
 481   3         }
 482   2        }
 483   1      }
 484          
C51 COMPILER V7.02b   ZHUDANYUAN                                                           08/29/2008 14:57:54 PAGE 9   

 485          //--------------------延时指令定义//-----------------//
 486          void delay(uint i)
 487          {
 488   1              while (i--) ;           
 489   1      }
 490          
 491          
 492          void long_delay(void)
 493          {
 494   1              uchar  i;
 495   1              for( i = 0; i <250; i++)
 496   1              {
 497   2                        _nop_();
 498   2                _nop_();
 499   2              }
 500   1      }
 501          
 502          
 503          void short_delay(void)
 504          {
 505   1              uchar i;
 506   1              for( i = 0; i <100; i++);
 507   1      }

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

⌨️ 快捷键说明

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