原创 24c08读写程序

2008-9-25 10:54 7442 15 17 分类: MCU/ 嵌入式

    最近两天在学习24c08的程序编写,现在模仿着编了个读写的程序,就是把一个数写入24C08,然后读出来显示到数码管上,哈哈,写完也算是对I2C总线有了个初步的了解。。


#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int


sbit SCL="P2"^6;
sbit SDA="P2"^7;
uchar code displaycode[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
uchar code displaybit[]={0xfe,0xfd,0xfb,0xf7};
uchar displaybuf[3];


void delayX2us(uchar x)           //微秒延时
{
 while(--x);
}


void delayXms(uchar x)         //毫秒延时
{
 uchar i;
 while(x--)
 {
  for(i=250;i>0;i--)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
 } 
}


void start ()
{
 SDA=1;
 delayX2us(2);
 SCL=1;
 delayX2us(2);
 SDA=0;
 delayX2us(2);
}


void stop ()
{
 SDA=0;
 delayX2us(2);
 SCL=1;
 delayX2us(2);
 SDA=1;
 delayX2us(2);
}



void init()
{
 SCL=1;
 delayX2us(2);
 SDA=1;
 delayX2us(2);
}


void responds()
{
 uchar i;
 i=0;
 SCL=1;
 delayX2us(2);
 while(SDA==1&&i<200)
 i++;
 SCL=0;
 delayX2us(2);
}


void write_dat (uchar dat)   //写一个字节
{
 uchar i;


 for(i=0;i<8;i++)
 {
  SCL=0;
  delayX2us(2);
  SDA=(bit)(dat&0x80);
  delayX2us(2);
  SCL=1;
  delayX2us(2);
  SCL=0;
  delayX2us(2);
  dat<<=1;
 }


 SDA=1;
 delayX2us(2);
 
}


void write(uchar dat,uchar add)   // 写一个字节dat到地址add
{
 start();
 write_dat(0xa0);
 responds();
 write_dat(add);
 responds();
 write_dat(dat);
 responds();
 stop();
}


uchar read_dat ()    //读一个字节
{
 uchar i;
 uchar dat;
 bit j;
 for (i=0;i<8;i++)
 {
  dat<<=1;
  SCL=0;
  j=SDA;
  delayX2us(2);
  SCL=1;
  if(j==1)
  {
   dat|=0x01;
  }
  SCL=0;
 }
 return dat;
}


uchar read (uchar add)   //从地址add中读取一个字节
{
 uchar dat;


 start();
 write_dat(0xa0);
 responds();
 write_dat(add);
 responds();
 start();
 write_dat(0xa1);
 responds();
 dat=read_dat();
 delayX2us(2);
 stop();
 return dat;
}


void display(uchar dat)  //显示程序
{
 uchar bai,shi,ge,i;
 bai=dat/100;
 shi=dat%100/10;
 ge=dat%10;
 displaybuf[0]=bai;
 displaybuf[1]=shi;
 displaybuf[2]=ge;
 
 for(i=0;i<3;i++)
 {
  P0=displaycode[displaybuf];
  P1=displaybit;
  delayX2us(5);
  P1=0xff;  
 }
}



void main ()
{
 uchar dat,add,k;
 dat=212;
 add=2;
 init();


 write(dat,add);
 delayXms(1000);
 k=read(add);


 while(1)
 {


display(k);


}
}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2012-12-27 10:30

24c08的地址好像是2个字节,你这样好像只能使用0x0000~0x00ff。。。 0x0100~0x03ff浪费了。。。

用户580322 2009-7-28 15:23

不错. 谢谢分享
相关推荐阅读
用户147553 2009-06-04 10:31
学之初———WinCE 6.0
最近在EDN的WinCE小组买到了一块开发板,忙里偷闲趁着端午开始了我的WinCE学习之旅。我一直在用Visual Studio 2005编写桌面程序,对Visual Studio2005还算比较熟悉...
用户147553 2009-04-27 16:46
技术人员发展方向及嵌入式学习【转】
    关于技术人员发展方向的问题大家讨论已经很多,现在谈谈我的想法对于技术人员可以选择以下几个方向一、继续做技术、做技术比较稳定,是一个撑不死,饿不着的行业,要想挣到比较多的钱比较困难。二、销售做销...
用户147553 2009-04-27 16:42
一位软件工程师的6年总结【转】
        “又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程...
用户147553 2009-04-06 11:41
阶段总结
        期待已久的清明假期还有半天就要结束了,尽管平时这三天也是没有课,但放假毕竟和周末的感觉不一样,至少没有什么压力,可以名正言顺的睡个懒觉,名正言顺的不来实验室。回到学校快两个月了,虽然这...
用户147553 2009-03-06 22:29
C#写的一个简单计算器程序
        刚开始学C#,现在还处于模仿的水平,这个计算器算是自己的第一个小作品吧。程序比较简单,基本没有用到C#的类和函数,大部分和C语言一样。https://static.assets-sta...
用户147553 2009-03-06 22:27
焊板失败
      前几天帮一女同学在电子园买了一套EDN助学的51开发板,昨天货到了,然后我就义不容辞的承担下帮她焊板子的任务,当然无偿的。因为之前我焊过一块,结果很成功,所以这次我有信心、有决心将美女交给...
EE直播间
更多
我要评论
2
15
关闭 站长推荐上一条 /3 下一条