void ad_send(unsigned char sdata)//发送一个字节数据,连续写数据时用。 { unsigned char i=8; while (i--){ P3OUT|=0X08; if (sdata & 0x80) P3OUT |= ADS1256_DIN; else P3OUT &= ~ADS1256_DIN; _NOP(); _NOP(); P3OUT&=~0X08; sdata<<=1; } usdelay(5); } void ad_wreg(unsigned char reg,unsigned char wdata)//写寄存器。选择寄存器地址,写入的数据。 { P4OUT=0X00; //ad_send(0x0f); //停止采集// while(!(P3IN&ad_drdy));//DRDY信号高时才能写寄存器 ad_send(0x50+reg);//选择写入寄存器 ad_send(0x00); //写入1个寄存器 ad_send(wdata); //写入数据 //ad_send(0xfc); //SYNC //ad_send(0xff); //WAKEUP P4OUT=0X07; //开始连续采集// usdelay(250); //可更改。但读数据必须在要等待最小一个采集周期(大约90ms)后。 } /*************************************************************************************/ /*void ad_ch(unsigned char ch) //选择通道。 高4位 正向通道;低4位 负向通道。 { //选择通道寄存器地址,写入数据。 }*/ /*************************************************************************************/ unsigned long ad_read()//读A/D数据。 { unsigned char r; rdata=0; P4OUT=0X00; ad_send(0xfc); //SYNC ad_send(0xff); //WAKEUP while (!(P3IN&ad_drdy)); //while(P3IN&ad_drdy) { ad_send(0x01); for (r=0;r<24;r++) { rdata<<=1; P3OUT|=0X08; _NOP(); if (P3IN & ADS1256_DOUT){rdata++;} P3OUT&=~0X08; _NOP();_NOP(); } //usdelay(10); //ad_send(0x0f); P4OUT=0X07; usdelay(100); } return rdata; } /*****************************************************************************/ /*unsigned long ad_readch(unsigned char ch)//读某通道A/D数据。 { ad_wreg(R_MUX,ch); //usdelay(50); //要等待最小一个采集周期完后,才能读数据。 return ad_read(); }*/