专栏中心

EEPW首页 > 专栏 > c51写的24c02的读写程序

c51写的24c02的读写程序

发布人:yanqin 时间:2009-04-16 来源:工程师 发布文章
#include <reg51.h>
%A
%A // 对24C02的读、写
%A // extern void DelayMs(unsigned int);
%A // extern void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
%A // extern void Write24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
%A
%A /***************************************************************************/
%A #define WriteDeviceAddress 0xa0
%A #define ReadDviceAddress 0xa1
%A
%A /***************************************************************************/
%A sbit SCL=P1^4;
%A sbit SDA=P1^3;
%A sbit DOG=P3^7;
%A
%A /***************************************************************************/
%A void DelayMs(unsigned int number) {
%A unsigned char temp;
%A for(;number!=0;number--,DOG=!DOG) {
%A   for(temp=112;temp!=0;temp--) {
%A   }
%A }
%A }
%A
%A /***************************************************************************/
%A void Start() {
%A SDA=1;
%A SCL=1;
%A SDA=0;
%A SCL=0;
%A }
%A
%A /***************************************************************************/
%A void Stop() {
%A SCL=0;
%A SDA=0;
%A SCL=1;
%A SDA=1;
%A }
%A
%A /***************************************************************************/
%A void Ack() {
%A SDA=0;
%A SCL=1;
%A SCL=0;
%A SDA=1;
%A }
%A
%A /***************************************************************************/
%A void NoAck() {
%A SDA=1;
%A SCL=1;
%A SCL=0;
%A }
%A
%A /***************************************************************************/
%A bit TestAck() {
%A bit ErrorBit;
%A SDA=1;
%A SCL=1;
%A ErrorBit=SDA;
%A SCL=0;
%A return(ErrorBit);
%A }
%A
%A /***************************************************************************/
%A bit Write8Bit(unsigned char input) {
%A unsigned char temp;
%A for(temp=8;temp!=0;temp--) {
%A   SDA=(bit)(input&0x80);
%A   SCL=1;
%A   SCL=0;
%A   input=input<<1;
%A }
%A }
%A
%A /***************************************************************************/
%A void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
%A Start();
%A Write8Bit(WriteDeviceAddress);
%A TestAck();
%A Write8Bit(RomAddress);
%A TestAck();
%A for(;number!=0;number--) {
%A   Write8Bit(*Wdata);
%A   TestAck();
%A   Wdata++;
%A }
%A Stop();
%A DelayMs(10);
%A }
%A
%A /***************************************************************************/
%A unsigned char Read8Bit() {
%A unsigned char temp,rbyte=0;
%A for(temp=8;temp!=0;temp--) {
%A   SCL=1;
%A   rbyte=rbyte<<1;
%A   rbyte=rbyte|((unsigned char)(SDA));
%A   SCL=0;
%A }
%A return(rbyte);
%A }
%A
%A /***************************************************************************/
%A void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
%A unsigned char temp,rbyte;
%A Start();
%A Write8Bit(WriteDeviceAddress);
%A TestAck();
%A Write8Bit(RomAddress);
%A TestAck();
%A Start();
%A Write8Bit(ReadDviceAddress);
%A TestAck();
%A while(bytes!=1) {
%A *RamAddress=Read8Bit();
%A Ack();
%A RamAddress++;
%A bytes--;
%A }
%A *RamAddress=Read8Bit();
%A NoAck();
%A Stop();
%A }
%A
%A /***************************************************************************/
%A
%A%A
%A

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

RE

REABOO 2005-10-09

江苏大学:基于 FPGA 的 LCD 显示的远程更新

视频 2012-06-15

薄膜冷却器使固态制冷效率翻倍

高度集成的PMIC为人工智能应用带来关键优势

现代的两级电机系统:全球电动汽车的游戏规则改变者?

日本或将全面停止向中国出口光刻胶

2025-12-09

RE

REABOO 2005-10-09

蓝牙核心规范6.2正式发布

库克被爆出存在健康问题,硬件出身技术大佬或将成为苹果接班人

2025-12-09

山东大学:基于FPGA的车牌识别系统

视频 2012-06-15

Gartner预测2026年全球在用电动汽车数量将达到1.16亿辆

山东大学:植物识别

视频 2012-06-15

770亿美元市场引爆:中国具身智能机器人从“秀肌肉”到“真干活”

SMT之基础课程

资源下载 2007-02-09

山东大学:LED里的三维世界

视频 2012-06-15

中国大陆IC设计年市占率正式超越台湾地区

2025-12-09

广东工业大学:基于Microblaze Linux的三轴数控系统

大模型双雄之争:AI教父押谷歌会赢得最终胜利

2025-12-09
更多 培训课堂
更多 焦点
更多 视频

技术专区