/*********************************************************************
微 雪 电 子 WaveShare http://www.waveShare.net
目 的: 建立AT24C02操作库
目标系统: 基于AVR单片机
应用软件: ICCAVR
版 本: Version 1.0
圆版时间: 2005-06-25
开发人员: SEE
说 明: 若用于商业用途,请保留此段文字或注明代码来源
深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
*********************************************************************/
/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
版本更新记录:
----------------------------------------------------------------------
实验内容:
写入一些测试数据进EEPROM,再读出,使用PA口的LED做指示,观测是否与写入一致。
----------------------------------------------------------------------
硬件连接:
将PA口的LED指示灯开关切换到"ON"状态。
将AT24CXX的硬件地址A0、A1、A2使用短路帽短接至“-”。
AT24CXX:VCC、GND、SDA、SCL
| | | |
SMK1632:VCC、GND、SDA、SCL
----------------------------------------------------------------------
注意事项:
(1)若有加载库函数,请将光盘根目录下的“库函数”下的“ICC_H”文件夹拷到D盘
(2)请详细阅读“使用必读”及相关资料。
----------------------------------------------------------------------10101010101010101010101010101010101010101010101010101010101010101010*/
#include <iom16v.h>
#define RD_DADR 0xA1 //read device-address
#define WR_DADR 0xA0 //write device-address
#include "D:\ICC_H\AT24CXX.H"
#define DISP_DDR DDRA
#define DISP_PORT PORTA
/*--------------------------------------------------------------------
函数名称:AT24C02
函数功能:
注意事项:
提示说明:
输 入:
返 回:
--------------------------------------------------------------------*/
void errDisp()
{
DISP_PORT = 0X55;
delay50ms(4);
DISP_PORT = 0X00;
delay50ms(4);
DISP_PORT = 0XAA;
delay50ms(4);
DISP_PORT = 0X00;
delay50ms(4);
}
/*--------------------------------------------------------------------
函数全称:AT24C02
函数功能:
注意事项:
提示说明:假设系统时钟为16M,则TWI波特率=CLK/(16+2*(TWBR)*4)=400K
输 入:
返 回:
--------------------------------------------------------------------*/
void twi_init() //TWI(I2C)初始化
{
TWBR = 0X03; //设置TWI波特率
TWSR &= 0XFC; //设置TWI预分频 为 1
}
/*--------------------------------------------------------------------
函数名称:AT24C02
函数功能:
注意事项:
提示说明:
输 入:
返 回:
--------------------------------------------------------------------*/
void main(void)
{
uint8 adr,WrDat,t;
uint8 *pRdDat=&t; //随便给"*pRdDat"一个具体地址,以免内存发生错误
DISP_DDR = 0XFF;
twi_init();
adr=0x20;
WrDat=0x33;
if( AT24CXX_Write(adr,WrDat)!=AT24CXX_ERR ) //AT24CXX写成功?
{
delay50ms(1); //等待EERPOM写完
if( AT24CXX_Read(adr,pRdDat)!=AT24CXX_ERR ) //AT24CXX读成功?
DISP_PORT=*pRdDat;
else
errDisp();
}
else
errDisp();
while(1);
}