电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> EEPROM ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

AT24C01A通用头文件含成熟驱动代码


类别:技术文章
来源:未知
作者:未知
关键字:AT24C01A
加入日期:2010-8-3

*the header files name is AT24C01.h
*the header files program's function is link exterior extend E2PROM
*the link chip's name is AT24C01A
*the program's synopsis as follows
* Author by:weiyi
* Establish on Date:31-10-2002
* Modified on Date:31-10-2002
* Edition NO.:V1.0*/

/*简介:
中国电子网http://www.ec66.com
A.本AT24C01A接口驱动程序的使用非常简单。在你的源程序包含此头文件后你所要做的
是:
1。定义与你单片机所连接的相应口线号(bSda & bScl);
2。设置你的芯片所连接的地址(A2-A0);你可以对你的芯片编号,比如Chip_1
对应
一个地址、Chip_2对应另一个地址(AT24家族中最多可以定义8个),访问芯
片时你
只需带入芯片号,程序便能连接你想要访问的芯片,同时进行读写操作。
B.此驱动程序与你有关的主要内容为:
1.2个涵数<ReadMem(l,x,y);>、<WriteMem(l,x,y)>;
2.1个宏定义<#define Chip_x(器件号) y(具体器件A2-A0地址号)>;
3.2个口线定义<sbit bScl =Px^x;、sbit bSda =Px^x;>;
4.一个缓冲数组<cShareBuf[10]>,所有读写数据都会经此数组中转。
C.你在源程序中调用这里面的涵数相当方便,请看试例;
D.本程序的测试频率为:12.000MHz
注意:1.如果在包含此头文件前有其他程序(包括其他程序、头文件里程序)使用了此头文
件内的某
一涵数、宏等,请将包含此头文件的关键词放置在它前面,或将本头文件内
相应申明(或定义)
放置于他的前面的任何一个地方甚至于他内部(也可以申明一个专门用于放
置一些涵数的申明、宏定义、
口线定义的头文件,然后将一些涵数的申明放在内部以实现共用不冲突)
2.读写的数据都是通过变量数组交换的,所以写之前必须将数据有规律的放置
在cShareBuf之中;执行
完读功能后在cShareBuf之中取出数据*/
/*Sample:

/*main(){ ...
/* ReadMem(l,x,y); /*读。l为本次访问的器件号,在宏定义时分配不同芯
片的不同器件号,
x为本次欲读出的字节数;y为本次读数的起始地址*/
/* ...
/* WriteMem(l,x,y); /*写。l为本次访问的器件号,在宏定义时分配不同芯
片不同的器件号,
x为本次欲写入的字节数;y为本次写数的起始地址,
注:当心页写入的地址规律,即页地址在同一页内滚
动;否则会出现页溢出*/
/*}*/


#define Wait1us _nop_();
#define Wait2us {_nop_();_nop_();}
#define Wait4us {Wait2us;Wait2us;}
#define Wait8us {Wait4us;Wait4us;}
#define Wait10us {Wait8us;Wait2us;}
#define StartIic {bSda=bScl=1;Wait8us;bSda=0;Wait8us;bScl=0;}
#define EndIic {bSda=0;bScl=1;Wait8us;bSda=1;}
#define SlaWr 0xa0 /*0000 0 0 0 0*/
#define SlaRd 0xa1 /*0000 0 0 0 1*/
#define Chip_1 0x02 /*本器件的器件地址,可以第一8个不同地
址的芯片使之能用同一段程序进行读写*/
sbit bScl =P2^6;
sbit bSda =P2^7;

unsigned char bdata cFlag; /**/
sbit bRight =cFlag^0;
sbit bErr =cFlag^1;
sbit bReadOk =cFlag^2;
sbit bBeepEn =cFlag^3;
sbit bCtrl =cFlag^4;
sbit bScanErr =cFlag^5;
sbit bAll =cFlag^6;
sbit bSame =cFlag^7;
unsigned char data cShareBuf[10]; /*I2c read and write buffer*/

unsigned char ScanIic();
void SendIic(unsigned char cData);
void SendAck(void);
void SendNotAck(void);
void WriteMem(unsigned char cChipsAdd,cSize,cAddress);
void ReadMem(unsigned char cChipsAdd,cSize,cAddress);
/************Name:ScanIic***********
Function:Read 1byte data from 24C01
NO.:1
Run time:145us 1=10us 0=10us f=50kbps
**********Function Start************/
unsigned char ScanIic(){
unsigned char data i,j;/*IIC data*/
StopDog; /*喂狗*/
bSda=1;
j=0;
for(i=0;i<8;i++){
bScl=1;
Wait2us;
j<<=1;/*这个指令已经有15个周期,所以无须再延时*/
j|=bSda;/*Scan 0*/ /*Scan 1*/
bScl=0;
Wait1us;
}
return j;
}
/**********Function End*************/

/************Name:SendIic***********
Function:Send 1byte to 24C01
NO.:2
Run time:150us 1=10us 0=13us f=43.5kbps
**********Function Start************/
void SendIic(unsigned char cData){
unsigned char data i;
StopDog; /*喂狗*/
for(i=0;i<8;i++){
bSda=(bit)(cData&0x80);
bScl=1;
cData<<=1;
Wait4us;
Wait2us;
bScl=0;
}
bSda=bScl=1; /*检测ACK*/
for(i=0;(bSda==1)&&(bScanErr==0);i++){
StopDog; /*喂狗*/
if(i==17)
bScanErr=1;/*如果101us没有响应就错误*/
}
bScl=0;
}
/**********Function End*************/

/************Name:SendAck***********
Function:Send ack
NO.:3
Run time:12us
**********Function Start************/
void SendAck(void){
bSda=0;
bScl=1;
Wait10us;
bScl=0;
bSda=1;
}
/**********Function End*************/

/************Name:SendNotAck***********
Function:send not ack
NO.:4
Run time:11us
**********Function Start************/
void SendNotAck(void){
bScl=bSda=1;
Wait10us;
bScl=0;
}
/**********Function End*************/
/************Name:WriteMem***********
Function:write data to 24C01
NO.:5
Run time:xx
**********Function Start************/
void WriteMem(unsigned char cChipsAdd,cSize,cAddress){
unsigned char data i,j;
StopDog; /*喂狗*/
bScanErr=0;
i=SlaWr;
i|=cChipsAdd;
StartIic;
SendIic(i);/*SLA*/
SendIic(cAddress);/*address*/
for(i=0;(bScanErr==0)&&(i!=cSize);i++)
SendIic(cShareBuf[i]); /*写一个字节数据*/
EndIic;
}
/**********Function End*************/

/************Name:ReadMem***********
Function:Read data from 24C01
NO.:6
Run time:xx
**********Function Start************/
void ReadMem(unsigned char cChipsAdd,cSize,cAddress){
unsigned char data i,j;
StopDog; /*喂狗*/
bScanErr=0;
i=SlaWr;
i|=cChipsAdd;
StartIic;
SendIic(i);/*address and read*/
SendIic(cAddress);/*address and write*/
i|=0x01; /*Read*/
StartIic;
SendIic(i);/*address and read*/
for(i=0;(bScanErr==0)&&(i!=cSize);i++){
cShareBuf[i]=ScanIic();/*读入第一个字节*/
if(i==(cSize-1))
SendNotAck();
else
SendAck();
}
EndIic;
}
/**********Function End*************/

您可能还会关注的相关技术资料:
暂无

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号