求大神帮我改改msp430的ad7705驱动程序,谢谢!
只是驱动程序部分(不出数据)
#define sclk_1 P6OUT|= BIT4
#define sclk_0 P6OUT&=~BIT4
#define din_1 P6OUT|= BIT5
#define din_0 P6OUT&=~BIT5
#define dout P6IN&BIT6
#define ready P6IN&BIT7
#define uchar unsigned char
#define uint unsigned int
//函数声明
void pio_ini
tial(void);
void ms(uchar k);
void ad7705_initial(void);
void write_8bit(uchar dat_8);
unsigned int read_16bit(void);
//端口初始化
void pio_initial(void)
{
P6SEL=0X00;
P6DIR=BIT4+BIT5;
P6DIR&=~BIT6; //读出数据
P6DIR&=~BIT7; //数据读写状态的判断
}
//延时1ms
void ms(uchar k)
{
uchar i,j;
for(i=0;i
for(j=0;j<20;j++);
}
//AD7705芯片初始化
void ad7705_initial(void)
{
uchar i=0;
sclk_1; //时钟拉高
din_1;
for(i=0;i<40;i++) //不要使用中文加括号
{
sclk_0;
sclk_1;
}
write_8bit(0x20); //下一次进入时钟寄存器,写操作,选择通道1
write_8bit(0x06); //选择更新速率为250Hz
write_8bit(0x10); //先写
通信寄存器,选择通道1
write_8bit(0x5c); //自校准模式,单极性,增益为1
ms(255); //延时50ms
}
//写8位数据
void write_8bit(uchar dat_8)
{
uchar i=0;
uchar bit=0x80;
sclk_1; //时钟拉高
for(i=0;i<40;i++)
{
if(dat_8&bit)
din_1;
else
din_0;
sclk_0; //时钟拉低,等待数据更新
sclk_1; //上升沿触发,写入数据
bit=bit>>1;
}
sclk_1; //时钟拉高
din_1;
}
//读16位数据
unsigned int read_16bit(void)
{
uchar i=0;
uint add_16bit=0x0000;
write_8bit(0x38); //读操作,选通道1
while(ready); //读有效信号为低电平,等待数据
sclk_1; //时钟拉高
for(i=0;i<16;i++)
{
add_16bit=add_16bit<<1; //最后一次不需要再移位
sclk_0; //时钟拉低
if(dout)
add_16bit=add_16bit+1;
sclk_1; //时钟拉高
}
sclk_1; //时钟拉高
din_1;
return(add_16bit);
}
0