📄 main.lst
字号:
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 + -