微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MAX517与51单片机的I2C总线数据通信

MAX517与51单片机的I2C总线数据通信

时间:12-28 来源:互联网 点击:

设备一个控制字节00H,当从设备接到该控制字节后,再发给主设备一个应答。之后主设备便可发给从设备要转换的8位数据。其工作流程图见图4所示。具体的程序代码如下:

程序开始时,定义P1.6,P1.7为SDA,SCL;

//起始条件子函数

void Start(void)

{

SDA=1;

SCL=1;

NOP;

SDA=0;

NOP;

}

//停止条件子函数

void Stop(void)

{

SDA=0;

SCL=1;

NOP;

SDA=1;

NOP;

}

//应答子函数

void Ack(void)

{

SDA=0;

NOP;

SCL=1;

NOP;

SCL=0;

}

//发送数据子程序,Data为要发送的数据

void Send(uchar Data)

{

uchar BitCounter=8; //位数控制

uchar temp; //中间变量控制

do{

temp=Data;

SCL=0;

NOP;

if((temp&0x80)==0x80)

//如果最高位是1

SDA=1;

else

SDA=0;

SCL=1;

temp=Data<<1; //左移

Data=temp;

BitCounter--;

}while(BitCounter);

SCL=0;

}

//读一个字节的数据,并返回该字节值

uchar Read(void)

{

uchar temp=0;

uchar temp1=0;

uchar BitCounter=8;

SDA=1;

do{

SCL=0;

NOP;

SCL=1;

NOP;

if(SDA) //如果SDA=1

temp=temp|0x01;

else

temp=temp&0xfe;

if(BitCounter-1)

{

temp1=temp<<1;

temp=temp1;

}

BitCounter--;

}while(BitCounter);

return(temp);

}

4 结束语

由于该系统可通过单片机给MAX517发送0-255的数字量,并且可用数码管显示,同时,用示波器还可观测相应的电压变化,直观性非常好。同样,该程序对单片机与MAX518、MAX519等的通信都具有参考价值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top