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

📄 main.lst

📁 此程序实现任意波形发生器的菜单选择操作及向FPGA发送控制命令
💻 LST
📖 第 1 页 / 共 3 页
字号:
 205   1       if(ISP_DATA==DataBuf) return OK;
 206   1       else return ERROR;
 207   1      }
 208          
 209          
 210          //定义延时函数
 211          void delay(void)
 212          {
 213   1         uchar i,j;
 214   1         for(i=0;i<255;i++)
 215   1            for(j=0;j<255;j++);
 216   1      }
 217          
 218          
 219          
 220          //定义显示函数
 221          void display(void)
 222          {
 223   1           uint buff;  
 224   1           
 225   1                //频率输出      
 226   1                       buff=freq;
 227   1                        COM=0X80;
 228   1                        DAT=seg[buff/10000];
 229   1                        COM=0X81;
 230   1                        DAT=seg[buff/1000%10];
 231   1                        COM=0X82;
 232   1                        DAT=seg[buff/100%10];
 233   1                        COM=0X83;
 234   1                        DAT=seg[buff/10%10];
 235   1                        COM=0X84;
 236   1                        DAT=seg[buff%10];  
 237   1             //幅度输出
 238   1                          buff=mag/5;
 239   1                              COM=0X85;
 240   1                          DAT=seg[buff/10]+0x80;
 241   1                          COM=0X86;
 242   1                          DAT=seg[buff%10];
 243   1                //波的类型输出
 244   1                        COM=0X87;
 245   1                        DAT=seg[state0];   
 246   1      }
 247          
 248          //定义波形产生函数
 249          void create_base(uchar b_mag,uint b_freq,uchar b_type)
 250          {
 251   1              uchar temp;
 252   1              uchar j;
 253   1              uchar freqH=0,freqL=1;//频率控制字高低8位
 254   1              uchar cycleH,cycleL;
 255   1              uchar *D_RAM=&CS_7132;//双口RAM头地址
 256   1              uchar *A_FPGA=&CS_FPGA;//频率控制字首地址
 257   1              uint i;
 258   1              //uint k;
 259   1              uchar *table;
 260   1              switch(b_type)
 261   1              {
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 6   

 262   2                      case 0:table=sin;break;//输出正弦波
 263   2                      case 1:table=rec;break;//输出方波
 264   2                      case 2:table=tri;break;//输出三角波
 265   2                      default:break;
 266   2              }
 267   1      
 268   1              
 269   1      
 270   1      //产生波形
 271   1              //bit W_FPGA;//FPGA 写标志位
 272   1              //uchar D_RAM=0x10000;//双口RAM头地址
 273   1              //uchar CS_FPGA  //FPGA enable
 274   1              
 275   1              CS_DAC = b_mag;//输出D/A幅值
 276   1              CS_TEMP=0;
 277   1              CS_DAC=b_mag;
 278   1          //p10=1;
 279   1          //p12=0;
 280   1          _nop_();
 281   1          _nop_();
 282   1      
 283   1              *A_FPGA=freqL;
 284   1         
 285   1              *(A_FPGA+1)=freqH;
 286   1              
 287   1              *(A_FPGA+2)=0;
 288   1          *(A_FPGA+3)=0;
 289   1         
 290   1              *(A_FPGA+4)=0;
 291   1              *(A_FPGA+5)=0;
 292   1          
 293   1      
 294   1                      for(i=0;i<bits;i++)
 295   1              {
 296   2                      temp=0x00;
 297   2                      *(D_RAM+i)=temp;//输出波形表到FPGA双口RAM
 298   2              }
 299   1      
 300   1              for(j=0;j<10;j++)
 301   1         {
 302   2              for(i=0;i<bits;i++)
 303   2              {
 304   3                      temp=table[i];
 305   3                      _nop_();
 306   3                      *(D_RAM+i)=temp;//输出波形表到FPGA双口RAM
 307   3                      _nop_();
 308   3              }
 309   2          }
 310   1      
 311   1              //输送16位频率控制字
 312   1              //频率控制字16位,分为高8位freqH;低8位freqL
 313   1              freqH=((b_freq&0xff00)>>8);//取出频率控制字高8位
 314   1              freqL=(b_freq&0x00ff);//取出频率控制字低8位
 315   1              cycleH=((cycle_count&0xff00)>>8);
 316   1              cycleL=(cycle_count&0x00ff);
 317   1              
 318   1          //送出频率控制字和周期个数   
 319   1              *A_FPGA=freqL;
 320   1         
 321   1              *(A_FPGA+1)=freqH;
 322   1              
 323   1              *(A_FPGA+2)=cycleL;
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 7   

 324   1          *(A_FPGA+3)=cycleH;
 325   1         
 326   1              *(A_FPGA+4)=0;
 327   1              *(A_FPGA+5)=0;
 328   1              
 329   1      }
 330          
 331          
 332          //组合波产生和存储
 333          void  create_combin(uchar c_mag,uint c_freq,uchar x_sin,uchar x_rec,uchar x_tri)
 334          {
 335   1              
 336   1          uchar temp;
 337   1              uchar freqH=0,freqL=1;//频率控制字高低8位
 338   1              uchar cycleH,cycleL;
 339   1              uchar *D_RAM=&CS_7132;//双口RAM头地址
 340   1              uchar *A_FPGA=&CS_FPGA;//频率控制字首地址
 341   1              uint i;
 342   1              uchar x_total=x_sin+x_rec+x_tri;//系数之和
 343   1              //uchar table[bits];//存储生成的波形到rom
 344   1      
 345   1      //产生波形
 346   1              
 347   1              CS_DAC=c_mag;//输出D/A幅值
 348   1              for(i=0;i<bits;i++)
 349   1              {
 350   2                      temp=x_sin*sin[i]+x_rec*rec[i]+x_tri*tri[i];//线型叠加波形
 351   2                      temp/=x_total;//新波形归一化
 352   2                      *(D_RAM+i)=temp;//输出波形表到FPGA双口RAM
 353   2                       temp_jun[i]=temp;//存储波形。
 354   2              }
 355   1      
 356   1              //输送16位频率控制字
 357   1              //频率控制字16位,分为高8位freqH;低8位freqL
 358   1              freqH=((c_freq&0xff00)>>8);//取出频率控制字高8位
 359   1              freqL=(c_freq&0x00ff);//取出频率控制字低8位
 360   1              cycleH=((cycle_count&0xff00)>>8);
 361   1              cycleL=(cycle_count&0x00ff);
 362   1              
 363   1      //      W_FPGA=0
 364   1              *A_FPGA=freqL;
 365   1      //      W_FPGA=1
 366   1              *(A_FPGA+1)=freqH;
 367   1              *(A_FPGA+2)=cycleL;
 368   1              *(A_FPGA+3)=cycleH;
 369   1              *(A_FPGA+4)=0;
 370   1              *(A_FPGA+5)=0;
 371   1              //CS_TEMP=0;
 372   1      
 373   1      
 374   1              //存储波形
 375   1          Sector_erase(save_mag);
 376   1      
 377   1          Byte_program(save_mag,c_mag);//存储幅度
 378   1      
 379   1      
 380   1              Byte_program(save_freq,freqH);//存储频率高位
 381   1              Byte_program((save_freq+1),freqL);//存储频率低位
 382   1      
 383   1              Byte_program(save_count,cycleH);//存储频率高位
 384   1              Byte_program(save_count+1,cycleL);//存储频率低位
 385   1      
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 8   

 386   1      
 387   1              save(temp_jun);
 388   1      }
 389          
 390          
 391          //波形存储函数
 392          void save(uchar *reg_temp)
 393          { 
 394   1         uint i;
 395   1         uint addr=save_sector;
 396   1         Sector_erase(addr);
 397   1         for(i=0;i<512;i++)
 398   1           {
 399   2                 Byte_program(addr,reg_temp[i]);
 400   2             _nop_();
 401   2                 addr++;
 402   2               }
 403   1         
 404   1      }
 405          
 406          
 407          //读已存波
 408          void read_bo(void)
 409          {
 410   1         uint i;
 411   1         uint addr;
 412   1         uchar temp;
 413   1              uchar freqH=0,freqL=1;//频率控制字高低8位
 414   1              uchar cycleH,cycleL;
 415   1              uchar *D_RAM=&CS_7132;//双口RAM头地址
 416   1              uchar *A_FPGA=&CS_FPGA;//频率控制字首地址
 417   1      
 418   1         addr=save_sector;
 419   1         
 420   1         for(i=0;i<512;i++)
 421   1           {
 422   2                  temp=Byte_read(addr);
 423   2                      _nop_();
 424   2                      temp_jun[i]=temp;
 425   2                      addr++;
 426   2               }
 427   1      
 428   1               freqH=Byte_read(save_freq);
 429   1               freqL=Byte_read(save_freq+1);
 430   1      
 431   1           _nop_();
 432   1               mag=Byte_read(save_mag);
 433   1           _nop_();
 434   1      
 435   1               cycleH=Byte_read(save_count);
 436   1               cycleL=Byte_read(save_count+1);
 437   1               _nop_();
 438   1          
 439   1          //显示已存波
 440   1           CS_DAC=mag;             //输出D/A幅值
 441   1      
 442   1           *A_FPGA=freqL;
 443   1         
 444   1              *(A_FPGA+1)=freqH;
 445   1              
 446   1              *(A_FPGA+2)=0;
 447   1          *(A_FPGA+3)=0;
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 9   

 448   1         
 449   1              *(A_FPGA+4)=0;
 450   1              *(A_FPGA+5)=0;
 451   1      
 452   1              for(i=0;i<bits;i++)
 453   1              {
 454   2                      temp=temp_jun[i];
 455   2                      *(D_RAM+i)=temp;//输出波形表到FPGA双口RAM
 456   2              }
 457   1      
 458   1              //输送16位频率控制字
 459   1              //频率控制字16位,分为高8位freqH;低8位freqL

⌨️ 快捷键说明

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