请问工程师,怎样用单片机采集SSI数据,这个数据是24位的串行数据。
它的时许如图
我现在用以下方法试过
1.用IO口模拟他的时许
void signal()
{
RA5=0;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
RA5=1;
}
/******信号采集********/
void Rec_data()
{
unsigned char i;
di();
RA5=1;
for(i=5;i>0;i--);
signal(); //----------1--------------//
data1=Rev;
signal(); //----------2--------------//
data2=Rev;
signal(); //----------3--------------//
data3=Rev;
signal(); //----------4--------------//
data4=Rev;
signal(); //----------5--------------//
data5=Rev;
signal(); //----------6--------------//
data6=Rev;
signal(); //----------7--------------//
data7=Rev;
signal(); //----------8--------------//
data8=Rev;
signal(); //----------9--------------//
data9=Rev;
signal(); //----------10--------------//
data10=Rev;
signal(); //----------11--------------//
data11=Rev;
signal(); //----------12--------------//
data12=Rev;
signal(); //----------13--------------//
data13=Rev;
signal(); //----------14--------------//
data14=Rev;
signal(); //----------15--------------//
data15=Rev;
signal(); //----------16--------------//
data16=Rev;
signal(); //----------17--------------//
data17=Rev;
signal(); //----------18--------------//
data18=Rev;
signal(); //----------19--------------//
data19=Rev;
signal(); //----------20--------------//
data20=Rev;
signal(); //----------21--------------//
data21=Rev;
signal(); //----------22--------------//
data22=Rev;
signal(); //----------23--------------//
data23=Rev;
signal(); //----------24--------------//
data24=Rev;
RA5=0;
// data_H=(data1<<7)+(data2<<6)+(data3<<5)+(data4<<4)+(data5<<3)+(data6<<2)+(data7<<1)+data8;
data_M=(data9<<7)+(data10<<6)+(data11<<5)+(data12<<4)+(data13<<3)+(data14<<2)+(data15<<1)+data16;
data_L=(data17<<7)+(data18<<6)+(data19<<5)+(data20<<4)+(data21<<3)+(data22<<2)+(data23<<1)+data24;
data=((unsigned int)data_M<<8)+data_L;
ei();
}
这样可以采集数据,但是有点不稳定,有时会采集到错误数据。
2、我用单片机SPI,收三次。
收到的全是0xFF,所以我怀疑是不是不能中断,要连续接收才对。
3、还有试,只是一个想法
我准备用6个74LS194级联一个串转并的电路,6个正好转出来是24位的
但是IO又不够用。
其他工程师有没有做过,给我点建议!
第一种方法太麻烦,因为他的速率至少70k,所以用for不行的!我时钟是4MHz |