谢谢,LS的回答
补充一下,AD采样率是100K,转换周期是6us.单片机晶振是12M,现在我采样的是两路5OHz信号,通过多路开关切换,定时器定时20ms,即采样一个周期.采样到的点数总共只有不到300个点,一路信号也就最多150个点.这样算来的话也就是差不多66us一个点.现在我想的是能再提高点,能采样400个点.不知道该如何提高.请高手指点一下.现在把中断程序贴一下: while(ad_end!=1) //等待定时标志,定时20ms; { if(IE0==1) //查询外部中断0标志; { ET1=0; sp++; RD=0; P0=0xff; AD_L=P0; //AD转换低位; AD_H=P1; //AD转换高四位; RD=1; if(HB==0) //存储UH信号; { *add_ad_h=AD_H; //uchar xdata *add_ad_h; add_ad_h++; *add_ad_h=AD_L; add_ad_h++; P2=gain_UB; } else //存储UB信号; { *add_ad_b=AD_H; add_ad_b++; *add_ad_b=AD_L; add_ad_b++; P2=gain_UH; } MUL^=1; //信号选择; HB=MUL; *add_ad=0x48; //启动AD转换; ET1=1; } }
我把 *add_ad_h=AD_H; //uchar xdata *add_ad_h; add_ad_h++; *add_ad_h=AD_L; add_ad_h++; 这部分编译的结果贴出来大家看看,是否还有精简的余地 957: *add_ad_h=AD_H; C:0x08B8 852B82 MOV DPL(0x82),0x2B C:0x08BB 852A83 MOV DPH(0x83),add_ad_h(0x2A) C:0x08BE E532 MOV A,AD_H(0x32) C:0x08C0 F0 MOVX @DPTR,A 958: add_ad_h++; C:0x08C1 052B INC 0x2B C:0x08C3 E52B MOV A,0x2B C:0x08C5 7002 JNZ C:08C9 C:0x08C7 052A INC add_ad_h(0x2A) 959: *add_ad_h=AD_L; C:0x08C9 F582 MOV DPL(0x82),A C:0x08CB 852A83 MOV DPH(0x83),add_ad_h(0x2A) C:0x08CE E534 MOV A,AD_L(0x34) C:0x08D0 F0 MOVX @DPTR,A 960: add_ad_h++; C:0x08D1 052B INC 0x2B C:0x08D3 E52B MOV A,0x2B C:0x08D5 7002 JNZ C:08D9 C:0x08D7 052A INC add_ad_h(0x2A)
|
|