MCP3553的控制端口配置无误,严格按照时序操作,芯片也更换过。现在读取的数据是错误的,乱的。附上程序和手册,高手帮忙看看,折腾蛮久了。由衷感谢~
/**************MCP3553***************/
#define CS1(b) ( b? (P2OUT|=1<<3) : (P2OUT&=~(1<<3)) )
#define SCK(b) ( b? (P2OUT|=1<<2) : (P2OUT&=~(1<<2)) )
#define CS2(b) ( b? (P2OUT|=1<<0) : (P2OUT&=~(1<<0)) )
long unsigned int ReadAdValSingle(void)
{
u8 i;
long unsigned int rcv=0;
CS1(1);
SCK(1);
delay_ms(10);
CS1(0); //CS的第一个下降沿将开启内部转换
delay_us(100);
CS1(1); //Tconv期间,CS的上升沿使器件进入休眠模式,单次转换
delay_ms(40); //暂时通过延时等待AD转换完成
CS1(0); //CS拉低读取数据,更新RDY信号
while(P2IN&0x02); //检测RDY信号
for(i=0;i<24;i++)
{
delay_us(5);
SCK(0);
delay_us(5);
SCK(1);
if(P2IN&0X02) rcv |= 1<<(23-i);
}
CS1(1); //进入关断模式
rcv = rcv&0x3fffff; //取有效的22位AD数据
return rcv;
}
连续进行单次采样,取10个AD值放入数组中,观察数据是错乱的。
就这几行代码,求破! |