这个是相关程序
void ad_delay(void)
{
u8 i;
i=10;
while (i--);
}
//读写均有8位或24位情况,所以各操作独立
void AD_Read(u8 readlong)
{
u8 i,j,temp1;
for (i=readlong;i>0;i--)
{
temp1=0;
for (j=0;j<8;j++)
{
AD_SCLK_L;
temp1<<=1;
ad_delay();
if (GPIO_ReadInputDataBit(GPIOB,AD_MISO)>0)
temp1++;
AD_SCLK_H;
ad_delay();
}
g_ADReadBuf[i-1]=temp1;
}
}
void AD_Write(u8 BtLong,u8 * wrdata)
{
u8 i,j,temp1;
for (i=BtLong;i>0;i--)
{
temp1=*(wrdata+i-1);
for (j=0;j<8;j++)
{
if (temp1&0x80)
AD_MOSI_H;
else
AD_MOSI_L;
ad_delay();
AD_SCLK_L;
ad_delay();
AD_SCLK_H;
temp1<<=1;
}
}
}
void AD_Reset(void)
{
u8 ad_buf[3];
ad_buf[0]=0xff;
ad_buf[1]=0xff;
ad_buf[2]=0xff;
AD_Write(3,ad_buf);
AD_Write(3,ad_buf);
}
/*********************************************************************/
/*函数名称:AD_ch1_Init(u8 refdata) */
/*功 能:AD 通道1初始化 */
/*入口参数:refdata:转换的速度 */
/*出口参数:无 */
/*********************************************************************/
void AD_ch1_Init(u8 refdata)
{
u8 i,ad_buf[3];
ad_buf[0] = 0x10; //写0x10到通讯寄存器, 以控制下一操作是写配置寄存器
AD_Write(1,ad_buf);
g_sysdelay1=0;
while(g_sysdelay1<2);
ad_buf[2] = 0x00; //数据高位
ad_buf[1] = 0x10; //数据中位
ad_buf[0] = 0x08; //数据低位
AD_Write(3,ad_buf); //写入配置寄存器
while (GPIO_ReadInputDataBit(GPIOB,AD_MISO)==Bit_SET);
ad_buf[0] = 0x08; //写0x08到通讯寄存器,以控制下一操作为写模式寄存器
AD_Write(1,ad_buf);
g_sysdelay1=0;
for (i=0;i<200;i++)
ad_delay();
while(g_sysdelay1<2);
ad_buf[2]=0x88; //内部零点校准
ad_buf[1]=0x00;
ad_buf[0]=0x01;
AD_Write(3,ad_buf);
for (i=0;i<200;i++)
ad_delay();
while (GPIO_ReadInputDataBit(GPIOB,AD_MISO)==Bit_SET);
ad_buf[0] = 0x08; //写0x08到通讯寄存器,以控制下一操作为写模式寄存器
AD_Write(1,ad_buf);
g_sysdelay1=0;
for (i=0;i<200;i++)
ad_delay();
while(g_sysdelay1<2);
ad_buf[2]=0xA8; //内部满量程校准
ad_buf[1]=0x00;
ad_buf[0]=0x01;
AD_Write(3,ad_buf);
for (i=0;i<200;i++)
ad_delay();
while (GPIO_ReadInputDataBit(GPIOB,AD_MISO)==Bit_SET);
ad_buf[0] = 0x08; //写0x08到通讯寄存器,以控制下一操作为写模式寄存器
AD_Write(1,ad_buf);
g_sysdelay1=0;
while(g_sysdelay1<2);
if (refdata==1)
{
ad_buf[2] = 0x08; //内部4.92MHz,MCLK2引脚三态
ad_buf[1] = 0x00; //波波器最大值,单周期转换无效,sinc3无效,校验位无效
ad_buf[0] = 0x10; //波波器值=16,输出数据速率300Hz
}
else if (refdata==2)
{
ad_buf[2] = 0x08; //内部4.92MHz,MCLK2引脚三态
ad_buf[1] = 0x00; //波波器最大值,单周期转换无效,sinc3无效,校验位无效
ad_buf[0] = 0x20; //波波器值=32,输出数据速率150Hz
}
else if (refdata==3)
{
ad_buf[2] = 0x08; //内部4.92MHz,MCLK2引脚三态
ad_buf[1] = 0x00; //波波器最大值,单周期转换无效,sinc3无效,校验位无效
ad_buf[0] = 0x50; //波波器值=80,输出数据速率60Hz
}
else if (refdata==4)
{
ad_buf[2] = 0x08; //内部4.92MHz,MCLK2引脚三态
ad_buf[1] = 0x00; //波波器最大值,单周期转换无效,sinc3无效,校验位无效
ad_buf[0] = 0x60; //波波器值=96,输出数据速率50Hz
}
AD_Write(3,ad_buf); //写入模式寄存器
while (GPIO_ReadInputDataBit(GPIOB,AD_MISO)==Bit_SET);
ad_buf[0] = 0x50;
AD_Write(1,ad_buf); //准备读配置寄存器
for (i=0;i<200;i++)
ad_delay();
AD_Read(3); //读配置寄存器
ad_buf[0] = 0x5c;
AD_Write(1,ad_buf);//写命令到通讯寄存器,以决定下一操作为读数据寄存器
while (GPIO_ReadInputDataBit(GPIOB,AD_MISO)==Bit_SET);
} |