主机: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 上的数据呢?怎么读?痛苦中,再做不好要走人了,快帮我~~ |