文档库 最新最全的文档下载
当前位置:文档库 › CSU8RP1382读写24C02程序

CSU8RP1382读写24C02程序

/********************************************************************
* 文件名 : EEPROM_24C02.c
* 描述 : 该文件实现对24C02的操作。
确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
数码管显示的值会从断电钱的那个值开始显示。
* 创建人 : ricky,2015年4月16日
***********************************************************************/
#include "CSU8RP1382.h"
#include "eeprom_24c02.h"

// SCL = PT1_7;
// SDA = PT1_6;

extern char eep_address,eep_info;


/********************************************************************
* 名称 : flash()
* 功能 : 延时,时间为个NOP,大概为US
* 输入 : 无
* 输出 : 无
***********************************************************************/
void flash(void)
{
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
// asm("NOP");
// asm("NOP");
}

/********************************************************************
* 名称 : x24c02_init()
* 功能 : 24c02初始化子程序
* 输入 : 无
* 输出 : 无
***********************************************************************/
void x24c02_init(void)
{
PT1EN6 = 1; //SDA写时输出
PT1PU6 = 0;
PT1_7 = 1;
flash();
PT1_6 = 1;
flash();
}

/********************************************************************
* 名称 : start(void)
* 功能 : 启动I2C总线
* 输入 : 无
* 输出 : 无
***********************************************************************/
void start(void)
{
PT1EN6 = 1; //SDA写时输出
PT1PU6 = 0;

PT1_7 = 1;
flash();
PT1_6 = 1;
flash();
PT1_6 = 0;
flash();
PT1_7 = 0;
flash();
}

/********************************************************************
* 名称 : stop()
* 功能 : 停止I2C总线
* 输入 : 无
* 输出 : 无
***********************************************************************/
void stop()
{
PT1EN6 = 1; //SDA写时输出
PT1PU6 = 0;

PT1_7 = 1;
flash();
PT1_6 = 0;
flash();
// PT1_7 = 1; //find bug
// flash();
PT1_6 = 1;
flash();

}
/********************************************************************
* 名称 : writex()
* 功能 : 写一个字节
* 输入 : j(需要写入的值)
* 输出 : 无
***********************************************************************/
void writex(char _w)
{
char i,temp_w;

PT1EN6 = 1; //SDA写时输出
PT1PU6 = 0;
temp_w = _w;
for(i=0; i<8; i++)
{
PT1_7 = 0;
flash();
PT1_6 = temp_w.ubit[7];
flash();
PT1_7 = 1;
flash();
temp_w = temp_w<<1;
}

PT1_7 = 0;
flash();
PT1_6 = 0; //添加
flash();
}

/********************************************************************
* 名称 : readx()
* 功能 : 读一个字节
* 输入 : 无
* 输出 : 读出的值
***********************************************************************/
char readx(void)
{
char i, read_j, read_k;




PT1EN6 = 0; //SDA读时输入
PT1PU6 = 1;
read_k = 0;

for(i=0; i<8; i++)
{
PT1_7 = 0;
flash();
if(PT1_6) read_j = 1;
else read_j = 0;
read_k = (read_k << 1) | read_j;
PT1_7 = 1;
flash();
}
return(read_k);
}

/********************************************************************
* 名称 : ack()
* 功能 : I2C总线时钟
* 输入 : 无
* 输出 : 无
***********************************************************************/
void ack(void)
{
char i;
PT1EN6 = 0; //SDA读时输入
PT1PU6 = 1;

i = 0;
PT1_7 = 1;
flash();
while((PT1_6 == 1)&& (i < 255))
i++;
PT1_7 = 0;
flash();
}

/********************************************************************
* 名称 : x24c02_read()
* 功能 : 从24c02中读出值
* 输入 : address(要在这个地址读取值)
* 输出 : 从24c02中读出的值
***********************************************************************/
char x24c02_read()
{
char read_t;

read_t=0;
start();
writex(0xa0); //写信号
ack();
writex(eep_address);
ack();
start();
writex(0xa1); //读信号
ack();
read_t = readx();
stop();
return(read_t);
}

/********************************************************************
* 名称 : x24c02_write()
* 功能 : 想24c02中写入数据
* 输入 : address(地址) , info(值)
* 输出 : 无
***********************************************************************/
void x24c02_write()
{
start();
writex(0xa0);
ack();
writex(eep_address);
ack();
// start(); //添加
writex(eep_info);
ack();
stop();
}


/********************************************************************
main.c
***********************************************************************/
#include "CSU8RP1382.h"
#include "eeprom_24c02.h"

extern bit write;
char eep_address,eep_info;

void main()
{
char sec;
MCK = 0xAC; //时钟初始化
WDTIN = 0x00; //看门狗初始化
WDTCON = 0x00;

PT1 = 0xFF; //IO口初始化
PT1EN = 0xFF;
PT1PU = 0x00;
PT1CON = 0x00;
PT2 = 0x00;
PT2EN = 0xFF;
PT2PU = 0x00;
PT2CON = 0x00;

x24c02_init();//初始化24C02

eep_address = 2;
while(1)
{
eep_info = 0;
eep_info = x24c02_read(); //读出保存的数据赋于sec

eep_info +=1;
x24c02_write();
}

}

相关文档
相关文档 最新文档