两个单片机iic通讯程序_怎样从零学单片机?
时间: 2023-08-07 16:04:25 浏览: 87
学习单片机首先需要掌握基础知识,包括微处理器的原理、基本指令集和编程语言等。接下来可以通过学习单片机的应用场景和实际应用案例来深入理解单片机的使用方法和编程技巧。
关于两个单片机iic通讯程序,以下是一个简单的程序示例:
主机程序:
```
#include <reg52.h>
sbit SDA=P2^0;
sbit SCL=P2^1;
void delay() //延时函数
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
void iic_start() //iic起始信号
{
SDA=1;
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
}
void iic_stop() //iic停止信号
{
SDA=0;
SCL=1;
delay();
SDA=1;
delay();
SCL=0;
}
void iic_ack() //iic应答信号
{
SDA=0;
SCL=1;
delay();
SCL=0;
SDA=1;
}
void iic_nack() //iic非应答信号
{
SDA=1;
SCL=1;
delay();
SCL=0;
SDA=1;
}
void iic_sendbyte(unsigned char dat) //iic发送字节
{
int i;
for(i=0;i<8;i++)
{
SDA=dat&0x80;
SCL=1;
delay();
SCL=0;
dat<<=1;
}
iic_ack();
}
unsigned char iic_recvbyte() //iic接收字节
{
unsigned char dat=0;
int i;
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
dat<<=1;
dat|=SDA;
SCL=0;
}
return dat;
}
void iic_write(unsigned char addr,unsigned char dat) //iic写数据
{
iic_start();
iic_sendbyte(0xA0);
iic_sendbyte(addr);
iic_sendbyte(dat);
iic_stop();
}
unsigned char iic_read(unsigned char addr) //iic读数据
{
unsigned char dat;
iic_start();
iic_sendbyte(0xA0);
iic_sendbyte(addr);
iic_start();
iic_sendbyte(0xA1);
dat=iic_recvbyte();
iic_nack();
iic_stop();
return dat;
}
void main()
{
unsigned char dat=0x55;
iic_write(0x00,dat);
dat=iic_read(0x00);
}
```
从机程序:
```
#include <reg52.h>
sbit SDA=P2^0;
sbit SCL=P2^1;
void delay() //延时函数
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
void iic_start() //iic起始信号
{
SDA=1;
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
}
void iic_stop() //iic停止信号
{
SDA=0;
SCL=1;
delay();
SDA=1;
delay();
SCL=0;
}
void iic_ack() //iic应答信号
{
SDA=0;
SCL=1;
delay();
SCL=0;
SDA=1;
}
void iic_nack() //iic非应答信号
{
SDA=1;
SCL=1;
delay();
SCL=0;
SDA=1;
}
unsigned char iic_recvbyte() //iic接收字节
{
unsigned char dat=0;
int i;
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
dat<<=1;
dat|=SDA;
SCL=0;
}
return dat;
}
void iic_sendbyte(unsigned char dat) //iic发送字节
{
int i;
for(i=0;i<8;i++)
{
SDA=dat&0x80;
SCL=1;
delay();
SCL=0;
dat<<=1;
}
while(!SDA);
SCL=1;
delay();
SCL=0;
}
void iic_write(unsigned char dat) //iic写数据
{
iic_sendbyte(dat);
}
unsigned char iic_read() //iic读数据
{
unsigned char dat;
dat=iic_recvbyte();
iic_nack();
return dat;
}
void main()
{
unsigned char dat;
while(1)
{
iic_start();
dat=iic_read();
iic_write(dat);
iic_stop();
}
}
```
这是一个简单的iic通讯程序,其中包括了主机程序和从机程序的代码。在这个程序中,主机通过iic发送数据到从机,并从从机读取数据返回。从机收到主机发送的数据后,将数据返回给主机。
阅读全文