| 主机:STB=0选通,CLK =0,串入数据,CLK=1,时钟上升沿串入数据到DATA上,发一个字节,时钟高低20US(脉宽20US,占空1/2),高 位先串入,数据有更新才发;
 
 从机:只是收数据,主机数据有更新才发的,我是这么做的,24M晶体:
 1,STB接51外中断,优先最高,STB下降沿触发外中断,进入中断先关中断,收完退出前再开
 2,读数据
 while(MPG_CLK==1) ;   //确定CLK为低准备收
 for(mpg_temp = 0,MPG_RCV_data=0;mpg_temp < 8;mpg_temp++)
 {
 
 while(MPG_CLK == 0) //反复读取数据直到CLK=1
 {
 Cdate = MPG_DATA;
 if(Cdate)
 {
 MPG_RCV_data |= 0x01 ;
 }
 
 NOP;NOP;NOP;NOP;  //CLK变高前得到有效的数据
 while(MPG_CLK==0);
 }
 MPG_RCV_data <<= 1;
 
 }
 gMPG_RcvComd = MPG_RCV_data;  //把数据缓存起来
 3,收到的数据要末全为1,要末全为0,有时是错误的数据,发过来的是秒钟变化0~59
 4,应该何时读DATA 上的数据呢?怎么读?痛苦中,再做不好要走人了,快帮我~~
 |