我在写tlc2574时碰到了下面的问题,单独采集一路或两路信号时,没有问题,但要把一路信号采集很多次时,就会影响其他的采集,而且很不稳定。下面是我写的程序,大家来看看。麻烦大家把问题提出来,谢谢!
void temp_measure(unsigned int Address,unsigned char Y)
{
unsigned int AD_temp,AD_temp1;
// AD_spi_init(0X3b00); //选择第四通道11
TRISC0=0;
TRISC=0X12; //设置SDI为输入方向,其他的方向为输出
// PORTC=0XF4; //时钟设置为时钟脚为低电平,片选禁止,
AD_STAR=1;
AD_CS=1;
AD_SCK=0;
//先把复位脚电平拉高,
SSPSTAT=0X00; //数据在中间接收,CKP=0 DATA transmitted on rising edge of SCK
NOP();
SSPCON=0X20; //设置RC为SPI的硬件部分,总线的时钟为低电平,
//0000=SPI master mode ,clock=Fosc/4,
NOP();
PORTC=0X01; //拉低时钟信号,片选使能,
AD_CS=0; //加的
NOP();
SSPBUF=(Address/256); //发送高8位数据
NOP();
while(!SSPIF); //发送结束标志位为1时发送结束,为0还在发送数据
NOP();
SSPIF=0X00; //发送结束标志位清0,等待下次发送数据
NOP();
AD_temp=SSPBUF; //把接收到到的高8位数据临时放在temp中,
NOP();
SSPBUF=(Address%256); //把要发送的低8位数据放在sspbuf中
NOP();
while(!SSPIF); //发送结束标志位为1时发送结束,为0还在发送数据
AD_temp1=SSPBUF; //把接收到到的低8位数据临时放在temp1中,
SSPIF=0X00; //发送结束标志位清0,等待下次发送数据
NOP();
AD_CS=1; //片选拉到,禁止AD2574工作
NOP();
// AD_CS=0;
AD_STAR=0; //等数据转换完成后,把复位脚电平拉低复位
delay(1); //复位时间要延时
AD_STAR=1; //然后把复位脚电平拉高,一次的采集就完成了
delay(5);
///////////////////////////////////////////////////////////////////////
locateXY(0x0C,Y); //要显示的行
lcd_datawrite((((AD_temp)-127)/10)+48); //TLCAD2574可以测量-10v到+10v电压信号,当测量的电压为0v时,AD_temp为128.
lcd_datawrite((((AD_temp)-127)%10)+48); //要写入的数据
locateXY(0x10,Y); //显示小数部分的数值
lcd_datawrite(((AD_temp1)/26)+48); //只有它的高四位才是有效的数据
} |