⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 51的GPIO模拟iic的驱动程序
💻 C
字号:
/************************************
IIC.C 与IIC.H一同加入工程
请先在main()中运行I_init();

****************************************/
#include <REG51F.H>
#include<intrins.h>
#include<IIC.h>

sbit SCL=PinSCL;
sbit SDA=PinSDA;
#define WRITE 0xa0
#define READ 0xa1
void d5us(){
	_nop_();_nop_();
	_nop_();_nop_();
}

void I_ss(bit ss){	   //ss=1:start;SS=0;stop//
SCL=0;
d5us();
SDA=ss;
d5us();
 SCL=1;
d5us();
SDA=!ss;
d5us();
SCL=0;
}
void I_init(){
I_ss(0);
}
void I_sendB(Uchar ch){
	Uchar chb;
	for(chb=0;chb<8;chb++){
		SCL=0;	
		d5us();
		if(ch&0x80)SDA=1;
		else SDA=0;
		ch=ch<<1;
		SCL=1;
		d5us();
	}
	SCL=0;
}
void ACK(bit ack){
	SDA=ack;
	d5us();
	SCL=1;
	d5us();
	SCL=0;
	d5us();
}
void watch(){
	SDA=1;
	d5us();
	SCL=1;
	d5us();
	SCL=0;
	d5us();
}
void I_write(Uchar waddr,Uchar num,Uchar *pra){				  
Uchar i;
EA=0;
I_ss(1);
I_sendB(WRITE);
watch();
I_sendB(waddr);
watch();
 for(i=0;i<num;i++)
 {I_sendB(pra[i]);
 watch();
 }
 I_ss(0);
 d5us();d5us();
 EA=1;
}
Uchar I_receiveB(){
	Uchar read,i2;
	read=0;
	for(i2=0;i2<8;i2++){		
		SDA=1;
		d5us();
		SCL=1;
		d5us();
		read<<=1;
		if(SDA)read++;		
		d5us();
		SCL=0;
		d5us();
	}
	return(read);
}
void I_read(Uchar raddr,Uchar rnum,Uchar *sto){
Uchar i3;
EA=0;

I_ss(1);
I_sendB(WRITE);
watch();
I_sendB(raddr);
watch();
I_ss(1);
I_sendB(READ);
watch();
for(i3=0;i3<rnum;i3++){
	sto[i3]=I_receiveB();
	if(i3<rnum-1)ACK(0);  
	}
SDA=1;
d5us();
SCL=1;
d5us();
SCL=0;
d5us();
I_ss(0);
EA=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -