/********************************************************************
* 文件名 : EEPROM_24C02.c
* 描述 : 该文件实现对24C02的操作。
确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
数码管显示的值会从断电钱的那个值开始显示。
* 创建人 : 东流,2009年4月9日
***********************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P1^5; //24c08 SCL
sbit sda=P3^6; //24c08 SDA
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar sec; //定义计数值,每过1秒,sec加1
uint write; //写标志位
/********************************************************************
* 名称 : flash()
* 功能 : 延时,时间为2个NOP,大概为2US
* 输入 : 无
* 输出 : 无
***********************************************************************/
void flash(void)
{
_nop_();
_nop_();
}
/********************************************************************
* 名称 : x24c02_init()
* 功能 : 24c02初始化子程序
* 输入 : 无
* 输出 : 无
***********************************************************************/
void x24c02_init(void)
{
scl = 1;
flash();
sda = 1;
flash();
}
/********************************************************************
* 名称 : start(void)
* 功能 : 启动I2C总线
* 输入 : 无
* 输出 : 无
***********************************************************************/
void start(void)
{
scl = 1;
flash();
sda = 1;
flash();
sda = 0;
flash();
scl = 0;
flash();
}
/********************************************************************
* 名称 : stop()
* 功能 : 停止I2C总线
* 输入 : 无
* 输出 : 无
***********************************************************************/
void stop()
{
scl = 0;
flash();
sda = 0;
flash();
scl = 1;
flash();
sda = 1;
flash();
}
/********************************************************************
* 名称 : writex()
* 功能 : 写一个字节
* 输入 : j(需要写入的值)
* 输出 : 无
***********************************************************************/
void writex(uchar j)
{
uchar i,temp;
temp = j;
for(i=0; i<8; i++)
{
scl = 0;
flash();
sda = (bit)(temp & 0x80);
flash();
scl = 1;
flash();
temp = temp << 1;
}
scl = 0;
flash();
}
/********************************************************************
* 名称 : readx()
* 功能 : 读一个字节
* 输入 : 无
* 输出 : 读出的值
***********************************************************************/
uchar readx(void)
{
uchar i, j, k = 0;
for(i=0; i<8; i++)
{
scl = 0;
flash();
if(sda == 1)
{
j = 1;
}
else j = 0;
k = (k << 1) | j;
scl = 1;
flash();
}
return(k);
}
/********************************************************************
* 名称 : ack()
* 功能 : I2C总线时钟
* 输入 : 无
* 输出 : 无
***********************************************************************/
void ack(void)
{
uchar i = 0;
scl = 1;
flash();
while((sda == 1) && (i < 255))
{
i++;
}
scl = 0;
flash();
}
/********************************************************************
* 名称 : x24c02_read()
* 功能 : 从24c02中读出值
* 输入 : address(要在这个地址读取值)
* 输出 : 从24c02中读出的值
***********************************************************************/
uchar x24c02_read(uchar address)
{
uchar i;
start();
writex(0xa0);
ack();
writex(address);
ack();
start();
writex(0xa1);
ack();
i = readx();
stop();
return(i);
}
/********************************************************************
* 名称 : x24c02_write()
* 功能 : 想24c02中写入数据
* 输入 : address(地址) , info(值)
* 输出 : 无
***********************************************************************/
void x24c02_write(uchar address, uchar info)
{
start();
writex(0xa0);
ack();
writex(address);
ack();
writex(info);
ack();
stop();
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时,延时时间为 1ms * i
* 输入 : i(延时1ms的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
uchar x, j;
for(j=0; j<i; j++)
for(x=0; x<=148; x++)
;
}
/********************************************************************
* 名称 : LED()
* 功能 : 显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void LED() //LED显示函数
{
P2 = 6;
P0 = table[sec / 10];
Delay_1ms(5);
P2 = 7;
P0 = table[sec % 10];
Delay_1ms(5);
}
/********************************************************************
* 名称 : time0()
* 功能 : 定时中断函数,每秒中sec加一,并且写标识write使能
* 输入 : del
* 输出 : 无
***********************************************************************/
void time0(void) interrupt 1 using 3 //定时中断服务函数
{
static uchar Count = 0;
TH0 = 0x4c; //对TH0 TL0赋值
TL0 = 0x00; //重装计数初值
Count++;
if(Count == 20) //计满20次(1秒)时
{
Count = 0; //重新再计
sec++;
write = 1; //1秒写一次24C08
if(sec == 100) //定时100秒,在从零开始计时
{
sec = 0;
}
}
}
/********************************************************************
* 名称 : Time0_Init()
* 功能 : 定时器0的初始化
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Init(void)
{
TMOD = 0x01; //定时器工作在方式1
ET0 = 1;
EA = 1;
TH0 = 0x4c; //对TH0 TL0赋值
TL0 = 0x00; //使定时器0.05秒中断一次
TR0 = 1; //开始计时
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
x24c02_init(); //初始化24C02
sec = x24c02_read(2); //读出保存的数据赋于sec
Time0_Init();
while(1)
{
LED();
if(write == 1) //判断计时器是否计时一秒
{
write =0; //清零
x24c02_write(2,sec); //在24c08的地址2中写入数据sec
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
单片机 191-存储AT24C02(C语言).rar
共15个文件
lst:2个
bak:2个
obj:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 19 浏览量
2023-04-11
11:50:46
上传
评论
收藏 24KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
单片机 191-存储AT24C02(C语言).rar (15个子文件)
191-存储AT24C02
EEPROM_24C02.OBJ 10KB
STARTUP.LST 11KB
STARTUP.A51 5KB
EEPROM_24C02.Uv2 2KB
EEPROM_24C02 9KB
EEPROM_24C02.Opt 1KB
EEPROM_24C02.plg 209B
EEPROM_24C02.hex 2KB
EEPROM_24C02.LST 12KB
STARTUP.OBJ 749B
EEPROM_24C02_Opt.Bak 1KB
EEPROM_24C02.c 6KB
EEPROM_24C02.M51 15KB
EEPROM_24C02_Uv2.Bak 2KB
EEPROM_24C02.lnp 72B
共 15 条
- 1
资源评论
荣华富贵8
- 粉丝: 215
- 资源: 7653
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功