我用的c8051f340 已调试通过
/*****************************************
**函数名称:void WriteToReg(char writed_byte )
**函数功能:写一个字节到7705
**入口参数:无
**返 回 值:无
**说 明:
*****************************************/
void WriteToReg(uchar writed_byte)
{
uchar i;
SCK7705 = 1;
_nop_();
_nop_();
for(i = 0; i < 8; i++)
{
DIN7705 = (bit)(writed_byte & 0x80);
SCK7705 = 0;
_nop_();
_nop_();
_nop_();
SCK7705 = 1;
writed_byte = writed_byte<<1;
}
_nop_();
}
/*****************************************
**函数名称:void ReadFromReg( )
**函数功能:写一个字节到7705
**入口参数:无
**返 回 值:无
**说 明:
*****************************************/
uint ReadFromReg(void) /*读一个字从7705*/
{
uchar i;
uint readed_data;
readed_data =0;
for (i=1;i<=16;i++)
{
readed_data*=2;
SCK7705 = 1;
_nop_();
SCK7705 = 0;
_nop_();
if (DOUT7705)
{
readed_data++;
_nop_();
_nop_();
_nop_();
}
SCK7705 = 1;
}
return(readed_data);
}
/*****************************************
**函数名称:uint AD7705(uchar channel)
**函数功能:写一个字节到7705
**入口参数:无
**返 回 值:无
**说 明:
*****************************************/
uint AD7705(uchar channel) /*选A/D通道,返回转换结果/通道号0/1*/
{
uint Ad_result,i;
for (i = 0 ;i < 40 ;i++ )
{
SCK7705= 0 ;
Delay(1);
SCK7705= 1 ;
}
WriteToReg(0x20|(channel&0x01));/*首先写通讯寄存器,并约定下一个要写的寄存器是时钟寄存器
并选中A/D通道0/1 */
WriteToReg(0x0c) ; /*0X09 使能振荡,4.9152MHZ的主频,A/D转换最快时间为4MS,
滤波器稳定时间160MS,输出数据率500HZ,滤波器稳定时间8MS,
即每次测量需10MS*/
/*0x0c 使能振荡,4.9152MHZ的主频,A/D转换最快时间为20MS
输出数据率50HZ,滤波器稳定时间80MS, 每次测量需100MS*/
Delay(1);
WriteToReg(0x10|(channel&0x01));/*写通讯寄存器,并约定下一个要写的寄存器是设置寄存器
并选中A/D通道0/1 */
Delay(1);
WriteToReg(0x4e); /*0x6e 通道0/1自校准,带输入缓冲器,增益为2,单极性,*/
Delay(1);
WriteToReg(0x38|(channel&0x01)); /*写/通讯寄存器,并约定下一个要读的寄存器是数据寄存器
并选中A/D通道0/1 */
while (DRDY7705); /*等待通道0/1自校准完成,等待时间为9/输出数据率*/
Ad_result=ReadFromReg(); /*读A/D转换高字节*/
return(Ad_result);
}
|