sbit clock_ad = P3^6;//时钟线
sbit dout_ad = P3^4;//数据输出端
sbit cs_ad = P3^5;//片选(低电平有效)
sbit din_da = P2^6;
sbit sck_da = P2^4;
sbit cs_da = P2^5;
void DA(uint j)
{
uchar i;
uchar temp=j;
sck_da=0;
cs_da=0;
for(i=0;i<12;i++)//为什么这要溢出12次啊 改成8时 仿真输出值不准确
{
temp=temp<<1;
din_da=CY;
sck_da=1;
_nop_();
sck_da=0;
}
cs_da=1;
}
uchar read_549()//数据得采集
{
uchar i;
uint k=0x00;//定义一个变量k,将在dout上采集的到的数据装进K
dout_ad=1;//该地方置不置高电平都可以,应为单片机的I/O口默认值为高点平
for(i=0;i<8;i++)
{
if(dout_ad)
{
k++;
}
k=k<<1;
clock_ad=1;//高电平期间采集dout线上的数据
clock_ad=0;
_nop_();
}
return k;//返回值
}
uchar shuchu_549()//数据得读取
{
uint date;
cs_ad=0;//片选低电平时数据有效
date=read_549();//将read_549()函数中采集到的数据付给变量date
cs_ad=1;//片选拉高,表示数据读取完毕
_nop_();
return date;//返回值
}
void main()
{
uint date;
uint i;
while(1)
{
date=shuchu_549();
DA(date);
}
} |