急啊急啊!!求高手指点,用12C5A60S2的内部AD来采集波形,已知周期T,每个周期采样20次,下面是我自己写的程序,但是效果很不好,求高手指点一下,或能附上c语言例程,能借鉴一下,先谢谢啦
void AD_Init()
{ /* 初始化AD */
P1M0 |= 0x01; /* 设置为高阻输入模式 */
P1M1 |= 0x01;
P1ASF = 0x01; /* 清零标志位 */
ADC_RES = 0; /* 清零结果寄存器 */
ADC_RESL = 0;
ADC_CONTR = 0xe0; /* 开启转换电源,设置转换周期为90个时钟周期 */
AUXR1 = 0X00;
delayms(1); /* 必要的延时 */
}
uchar AD_sample() //AD采样
{
ADC_CONTR |= 0X08; /* 启动AD转换 */ delayms(1);
while(!(ADC_CONTR & 0X10)); /* 查询AD转换标志位 */
res = ADC_RES * 4 + ADC_RESL; /* 将查询结果保存为10位字符 */
ADC_CONTR &= 0xef; /* 清零标志位 */
res = res * 5000 / 256;
return (res);
}
viod main(void)
{
for(i = 0; i < 20; i ++)
{
resnum[i] = AD_sample();
while(ndelay --); //ndelay = T/20, 意为采样间隔,每隔T/20采样一次。不知道这么写对不对
}
for(i = 0; i < 20; i ++)
{
P2 = resum[i]; //da转换
}
}
以上只是部分程序。
求指教。。。。。。。