#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned char
uchar shou;
sbit mi=P1^0; //从机接收主机发送接口
sbit mo=P1^1; //从机发送主机接收接口
sbit sclk=P1^2; //主从机时钟同步时钟信号
sbit ss=P1^3; //从机选择控制位
/**********简单的延时函数***************/
void delay(uchar z)
{
uchar a;
for(;z>0;z--)
for(a=5;a>0;a--);
}
/**********从机接收数据并发送数据函数************/
void shoufa(uchar date)
{
uchar a,b;
while(ss==0) //检测是否有数据的传输
{
/*确认主机要发送数据后进行接收****/
while(sclk==1); //检测同步时钟信号
//确定时钟信号置低
for(a=0;a<8;a++)
{
while(sclk==0) //时钟置低,准备发数据
{
delay(0); //等待数据的稳定
b=mi;
P2=b;
if(b==1)
shou|=0x01;
while(sclk==0); //数据接收完成一位之后等待发送数据
}
if(a<7)
{
shou<<=1;
}
while(sclk==1)
{
date<<=1;
mo=CY; //输出数据的高位
while(sclk==1);
}
}
}
}
/***********主程序**************/
void main()
{
P1=0xff;
while(1)
{
shoufa(0xff);
P3=shou;
}
}
评论0