main.c
/************************头文件***********************/
#include<reg52.h>
#include<string.h>
#include <delay.h>
#include <time0.h>
#include <uart.h>
#include <IIC.h>
#include <at24c02-e2prom.h>
#define uchar unsigned char
#define uint unsigned int
#define SLAW 0x44
#define SLAR 0x45
/************************变量声明***********************/
uchar tem[7];//串口发送HEX数据的寄存器,【起始字节-地址字节-温度十位-温度个位-温度点位-校验字节-结束字节】
uchar T_num=20;
uchar Hex_num=0;
uchar UartSend_Fleg=0;
uchar AT24C02_rdata[]={0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0};
uchar AT24C02_wdata[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0};
/************************函数声明***********************/
void UartSend(void); //串口发送一帧数据函数
/**********************主函数***********************/
void main()
{
uchar i;
Led=0xff;
init_uart(); //初始化串口
init_T0();
I2C_Init();
AT24C02_read(AT24C02, 0 , &AT24C02_wdata[0], 1);
Hex_num=AT24C02_wdata[0]; //读取,并保存上次掉电存储在eeprom中的数据
while(1)
{
if(UartSend_Fleg==1)
{
UartSend_Fleg=0;
AT24C02_wdata[0]=Hex_num++; //处理后的数据放入数组---可以使用中间变量,或者不使用
AT24C02_write(AT24C02, 0 , &AT24C02_wdata[0], 1); //处理后的数据放入数组,再次存储在eeprom中
UartSend();
}
}
}
/*******************串口发送一帧数据函数********************/
void UartSend(void)
{
TR1=1; //开启定时器T1
/*******************发送HEX格式*******************/
sendByte(AT24C02_wdata[0]);
/************************************************/
TR1=0; //关闭定时器T1
}
/*******************定时器T0中断程序*****************/
void senddat_T0(void) interrupt 1
{
TH0=0x4c; //重载定时器初值
TL0=0x00;
if(--T_num==0)
{
T_num=20; //恢复计数值
UartSend_Fleg=1;
}
}
at24c02-e2prom.c
/*******************************************************************
功能: 【从机地址sla】【子地址suba】【发送内容,s指向的内容】【发送字节数量】
返回值: 如果返回1表示操作成功,否则操作有误
********************************************************************/
bit AT24C02_write(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
I2C_Start()/*启动总线*/
I2C_Write_Byte(sla);/*发送器件地址*/
if(I2C_Wait_Ack()!=0)return(0);
I2C_Write_Byte(suba);/*发送器件子地址*/
if(I2C_Wait_Ack()!=0)return(0);
for(i=0;i<no;i++)
{
I2C_Write_Byte(*s);/*发送数据*/
if(I2C_Wait_Ack()!=0)return(0);
s++;
}
I2C_Stop();/*结束总线*/
return(1);
}
/*******************************************************************
功能: 【从机地址sla】【子地址suba】【读出的内容放入s指向的存储区】【读字节数量】
返回值: 如果返回1表示操作成功,否则操作有误
********************************************************************/
bit AT24C02_read(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
I2C_Start();/*启动总线*/
I2C_Write_Byte(sla);/*发送器件地址+写*/
if(I2C_Wait_Ack()!=0)return(0);
I2C_Write_Byte(suba);/*发送器件子地址*/
if(I2C_Wait_Ack()!=0)return(0);
I2C_Start();/*重新启动总线*/
I2C_Write_Byte(sla+1);/*发送器件地址+读*/
if(I2C_Wait_Ack()!=0)return(0);
for(i=0;i<no-1;i++)
{
*s=I2C_Read_Byte();/*发送数据*/
I2C_Ack();/*发送就答位*/
s++;
}
*s=I2C_Read_Byte();
I2C_NAck();/*发送非应位*/
I2C_Stop();/*结束总线*/
return(1);
}