📄 wre2prom.c
字号:
#pragma sfr
#pragma di
#pragma ei
#include"main.h"
#include"WRE2PROM.h"
#include"serialRC.h"
#include"POWER_COUNT.h"
#include"LCD.h"
#define SDA1 (P2.2=1)
#define SDA0 (P2.2=0)
#define SCL1 P2.1=1;_delay(2)
#define SCL0 P2.1=0;_delay(2)
#define SDAOUT PM2.2=0
#define SDAINT PM2.2=1
#define DATAIN (P2.2)
/***************************************************************************/
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
/***************************************************************************/
void _delay(uchar t)
{
for(;t>0;t--);
}
void delay10mS(void)
{
uchar ii;
for(ii=0;ii<4;ii++)//10mS
{
_delay(0xBA);
}
}
/*--------------------------------------------------------------------------------
调用方式:void I2CStart(void) ﹫2001/07/0 4
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
SDA1; SCL1;
SDA0;
SCL0;
}
/*--------------------------------------------------------------------------------
调用方式:void I2CStop(void) ﹫2001/07/0 4
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL0; SDA0;
SCL1; SDA1; //STOP
}
/*--------------------------------------------------------------------------------
调用方式:void SendAck(void) ﹫2001/07/0 4
函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
---------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA1;
SCL1;
SCL0;
}
/*--------------------------------------------------------------------------------
调用方式:void I2CSend(unsigned char ch) ﹫2001/07/0 5
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CSendByte(unsigned char ch)
{
unsigned char i=8;
while(i--)
{
SCL0;
if(ch&0x80)
{
SDA1;
}
else
{
SDA0;
}
ch<<=1;
SCL1;
}
SCL0;
i=255;
SDAINT;//
SCL1;
while(DATAIN && i--);
SCL0;
SDAOUT;
}
/*--------------------------------------------------------------------------------
调用方式:unsigned char I2CReceive(void) ﹫2001/07/0 5
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
unsigned char I2CReceiveByte(void)
{
unsigned char i=8;
unsigned char dat=0;
SDAINT;
SDA1;
while(i--)
{
dat<<=1;
SCL0;
SCL1;
if(DATAIN)
{
dat|=0x01;
}
}
SCL0;
SDAOUT;
return(dat);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void WriteChar(unsigned char add,unsigned char dat)
{
I2CStart();
I2CSendByte(0xA0);
// I2CSendByte((char)(add>>8));delay32(); //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的话 那么这句话就不需要屏蔽了
// WaitAck();
I2CSendByte(add);
I2CSendByte(dat);
I2CStop();
delay10mS();
}
/*-------------------------------------------------------------------------------------*/
/* 从AT24C02的任意地址读入一个字节 */
/*=====================================================================================*/
unsigned char ReadChar(unsigned char add)
{
unsigned char a;
I2CStart();
I2CSendByte(0xA0);
//I2CSendByte((char)(add>>8)); //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的话 那么这句话就不需要屏蔽了
//WaitAck();
I2CSendByte(add);
I2CStart();
I2CSendByte(0xA1);
a=I2CReceiveByte();
SendNotAck();
I2CStop();
return(a);
}
void ReadString(unsigned char *RamAddress,unsigned char RomAddress,unsigned char Number)
{
while(Number--)
{
*RamAddress++=ReadChar(RomAddress++);
}
}
void WriteString(unsigned char *RamAddress,unsigned char RomAddress,unsigned char Number)
{
while(Number--)
{
WriteChar(RomAddress++,*RamAddress++);
}
}
void Read_Degree(uchar item_NO,unsigned char *RamAddress)
{
item_NO%=AMOUNT_OF_DEGREE;
ReadString(&RamAddress[1],ADDR_OF_DEGREE_INTEGER_START + item_NO*LEN_OF_DEGREE_INTEGER ,3);
ReadString( &RamAddress[0] ,ADDR_OF_DEGREE_DECIMAL_START+item_NO*LEN_OF_DEGREE_DECIMA
+ (bcd_to_hex(RamAddress[1])%100) ,1);
}
void Write_Degree(uchar item_NO ,unsigned char *RamAddress)
{
item_NO%=AMOUNT_OF_DEGREE;
WriteString(&RamAddress[1],ADDR_OF_DEGREE_INTEGER_START + item_NO*LEN_OF_DEGREE_INTEGER ,3);
WriteChar(ADDR_OF_DEGREE_DECIMAL_START+item_NO*LEN_OF_DEGREE_DECIMA
+ (bcd_to_hex(RamAddress[1])%100) ,RamAddress[0]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -