#include <eeprom.h>
/*发送起始条件*/ void Start(void) /*起始条件*/ { SdaSet; delay(50); SclSet; delay(50); SdaClr; delay(50); }
void Stop(void) /*停止条件*/ { SdaClr; delay(50); SclSet; delay(50); SdaSet; delay(50); }
void Ack(void) /*应答位*/ { SdaClr; delay(50); SclSet; delay(50); SclClr; delay(50); }
void NoAck(void) /*反向应答位*/ { SdaSet; delay(50); SclSet; delay(50); SclClr; delay(50); }
void Send(uchar Data) /*发送数据子程序,Data为要求发送的数据*/ { uchar BitCounter=8; /*位数控制*/ uchar temp; /*中间变量控制*/ //supplydog(); do { temp=Data; SclClr; delay(50); if((temp&0x80)==0x80)/* 如果最高位是1*/ SdaSet; else SdaClr; delay(50); SclSet; delay(50); temp=Data<<1; /*RLC*/ Data=temp; BitCounter--; }while(BitCounter); SclClr; delay(50); }
uchar Read(void) /*读一个字节的数据,并返回该字节值*/ { uchar temp=0; uchar temp1=0; uchar BitCounter=8; SdaSet; delay(50); //supplydog(); do{ SclClr; delay(50); SclSet; delay(50); /////////////////////////////////////////// P74OUT=0x3E; P4|=0x02; if((P4&0x02)==0x02) //if(Sda) temp=temp|0x01; /*temp的最低位置1*/ else temp=temp&0xfe; /*否则temp的最低位清0*/ P74OUT=0x3F; delay(50); SclSet; /////////////////////////////////////////// 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); /*发送SLA+W*/ Ack(); Send(Address+i); /*发送地址*/ Ack(); Send(*(PData+i)); delay(50); Ack(); Stop();
} }
void RdFromROM(uchar Data[],uchar Address,uchar Num) { uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i++) { delay(100); Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); Ack(); *(PData+i)=Read(); delay(50); SclClr; delay(50); NoAck(); Stop(); } } |