导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:谁用过X1243?[文仔]

 *第1602篇: 初学者:谁用过X1243?

  
楼 主:文仔 2001年12月20日16:05
 初学者:谁用过X1243?
我写的程序老是读出来的数据不对,谁作过,能否共享一下源程序?谢谢!
  
2楼:hlg8888 2001年12月20日16:51
 hlg8888
你可以参照I2C的其他器件来编程序,比如X1203 ,X24xx,我想你主要是在时序上有问题。
  
3楼:老陈 2001年12月21日13:04
 我送你几个子程序,你慢慢看吧。 我要提醒你的是:用显波器测一下晶振……
bit writebyte(unsigned char sbyte)                  /* 送一个字节 */
{
unsigned char wi,aa,wsbyte;
bit nop,returnbit;
wsbyte=sbyte;
aa=0x80;
for(wi=0;wi<8;wi++)
   {
   x_scl=0;
   wsbyte=sbyte&aa;
   if(wsbyte==0)
      x_sda=0;
   else
      x_sda=1;
   aa=aa>>1;
   x_scl=1;
   nop=0;
   }
x_scl=0;
x_sda=1;
     if(x_sda==0)
        returnbit=0;                   /*write success*/
     else
        returnbit=1;
x_scl=1;
nop=0;
x_scl=0;
return returnbit;
}

bit x1243w(unsigned char slabyte,char highaddr,char lowaddr,char rwdata)
{                                /* 送四个字节,一个命令包含四个字节  */
  bit xreturnbit;
      x_sda=1;
      x_scl=1;
      x_sda=0;                            /*  start  */
      xreturnbit=1;
      if(writebyte(slabyte)==0)
       if(writebyte(highaddr)==0)
          if(writebyte(lowaddr)==0)
              if(writebyte(rwdata)==0)
                   xreturnbit=0;          /* 送数据成功 */
       x_sda=0;
       x_scl=1;
       x_sda=1;       /*stop*/
       return(xreturnbit);
 }

char x1243read(unsigned char slabyte,char highaddr,char lowaddr)  /* 读出一个字
节 */
{
    unsigned char readvalue;
    char wi;
    x_sda=1;
    x_scl=1;
    x_sda=0;                                        /* start */
    if(writebyte(slabyte)==0)                       /* 虚写... */
       if(writebyte(highaddr)==0)
          if(writebyte(lowaddr)==0)
             {
             x_scl=1;
             x_sda=0;
             slabyte=slabyte|0x01;
             if(writebyte(slabyte)==0)
                {
                x_scl=0;
                readvalue=0;
                for(wi=0;wi<7;wi++)                 /* 读出8位数据 */
                   {
                   x_scl=1;
                   if(x_sda==1)
                      readvalue=readvalue|0x01;
                   readvalue=readvalue<<1;
                   x_scl=0;
                   }
                x_scl=1;
                if(x_sda==1)
                readvalue=readvalue|0x01;
                }
             }
    x_scl=0;
    x_sda=0;
    x_scl=1;
    x_sda=1;/*stop*/
return readvalue;
}


>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:硬件:fifo and loopback

[下一篇主题]:C51编程:没有人肯回复我一下吗