为了让大家更好理解,我先贴主机数据是如何发送滴:)
DISD[]数组为存放的数据,此程序发送5个数据,每个数据只发送6位而不是8位
P2B=0x10; //P2B是8255的B口,以B口的位4做CS片选
for(i=0;i <5;i++){
for(j=0;j <6;j++){
a=_cror_(DISD[i],2); //右移两位
P2B=((a&0x08)|0x04); //B口的位3为SDA,位2为SCK
nop(50);
P2B=(a&0x08);
DISD[i]=_crol_(DISD[i],1); //左移一位
}
P2B=0x10; //关片选CS,CS低有效
以上为主机发送的关键部分
接下来就是我写的接受部分啦(请指错)
void rece(void) //模拟PSI接受
{
while(!RA1){;} //RA1接CS片选,等待CS下降沿
while(RA1){;} //所有串行数据传输开始于CS下降沿
for(i=0;i <5;i++) //一次发送5数据
{
for(j=0;j <6;j++) //一个数据6位
{
while(RB0){;} //RB0接SCK ,等待时钟上升沿
while(!RB0){;} // 数据在时钟上升沿移入
data_buf < <= 1;
if(RA0==0) //RA0接SDA,一位一位接受
{
data_buf&= 0xfe;
}
else
{
data_buf|= 0x01;
}
}
buffer1[i]=data_buf&0x0f; //6次循环,接受完一个数据
//并取低四位存如数组buffer1中
}
//5次循环,接受完5个数据
for(k=0;k <5;k++)
{
buffer2[k]=buffer1[k]; //然后把5个数据存入buffer2中
}
reflash1(); //之后调用刷新,显示数据
}
目前显示的数据瞎跳,没一点规律性,我推断是接数据的这部分有问题,拜托了,调了好几天没什么进展.急!!!![IMG]此主题相关图片如下: