📄 iic.c.new
字号:
#include <reg52.h>#include<intrins.h>#include"IIC.h"void mDelay(uint t) //延时{
uchar i; while(t--) { for(i=0;i<125;i++) {
;
} }}void Nop(void) //空操作{ _nop_(); _nop_(); _nop_(); _nop_();}/*起始条件*/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;}/*反向应答位*/void NoAck(void){ Sda=1; 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) 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) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp);}void WrToROM(uchar Data[],uchar Address,uchar Num){ uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i++) { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Send(*(PData+i)); Ack(); Stop(); mDelay(20); }}void RdFromROM(uchar Data[],uchar Address,uchar Num){ uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i++) { Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); Ack(); *(PData+i)=Read(); Scl=0; NoAck(); Stop(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -