?? 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 + -