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