打印

请问这段程序有什么问题,I2C写入24lc08

[复制链接]
2625|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cyfwy|  楼主 | 2008-9-2 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写完后数据写的大部分对,但是有小部分错误。怎么办,什么原因,下面是程序



#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#include <reg51.h>     //包括一个51标准内核的头文件
//本课试验写入一个字节到24lc08中

#define    WriteDeviceAddress 0xa0      // 24lc08定义器件在I2C总线中的地址

sbit    SCL=P1^5;
sbit    SDA=P1^4;
sbit    P13=P1^3;
sbit     P37=P3^7;






//定时函数
void DelayMs(uchar i) 
{
    uchar temp;
    for(;i!=0;i--) 
    {
        for(temp=112;temp!=0;temp--) 
            {
       }
         }
}

//开始总线
void Start() 
{
    SDA=1;
    DelayMs(1); 
    SCL=1;
    DelayMs(1); 
    SDA=0;
    DelayMs(1); 
    SCL=0;
    DelayMs(1); 
}

//结束总线
void Stop() 
{
    SCL=0;
    DelayMs(1); 
    SDA=0;
    DelayMs(1); 
    SCL=1;
    DelayMs(1); 
    SDA=1;
    DelayMs(1); 
}



//测试ACK
bit TestAck() 
{
    bit ErrorBit;
    SDA=1;
    DelayMs(1); 
    SCL=1;
    DelayMs(1); 
    ErrorBit=SDA;
    DelayMs(1);  
    SCL=0;
    DelayMs(1);  
    return(ErrorBit);
}

//写入8个bit(一个字节)到24lc08
Write8Bit(uchar input) 
{
    uchar temp;
    for(temp=8;temp!=0;temp--) 
    {
        SDA=(bit)(input&0x80);//从最高位开始串行写入
                   DelayMs(1);         
        SCL=1;
                  DelayMs(1);         
        SCL=0;
                  DelayMs(1);         
        input=input<<1;
    }
    return 1;
}

//写入N个字节到24lc08中
void Write24c08(uchar *wdata,uint address,uint number) 
{
    Start();
    Write8Bit(WriteDeviceAddress);
    TestAck();
    
    Write8Bit(address);
    TestAck();
    for(;number!=0;number--)
   {
    
         Write8Bit(*wdata);
         TestAck();
              wdata++;
   }
    Stop();
    DelayMs(1);  

}

void main(void)    // 主程序
{
  uchar  code BinCode[]={    
    0x00,        // 0
    0x00,        // 1
    0x40,        // 2
    0x01,        // 3
    0x88,        // 4
    0x02,        // 5
    0x00,        // 6
    0x00,        // 7
    0x00,        // 8
    0x00,        // 9
    0x00,        // A
    0x00,        // B
    0x08,        // C
    0x00,        // D
    0x00,        // E
    0x00,        // F
    0x00,        // 10
    0x00,        // 11
    0x52,        // 12
    0x54,        // 13
    0x4C,        // 14
    0x01,        // 15
    0x02,        // 16
    0x09,        // 17
    0x0C,        // 18
    0x00,        // 19
    0x40,        // 1A
    0x41,        // 1B
    0x42,        // 1C
    0x43,        // 1D
    0x00,        // 1E
    0x00,        // 1F
    0x00,        // 20
    0x00,        // 21
    0x04,        // 22
    0x00,        // 23
    0x00,        // 24
    0x82,        // 25
    0x00,        // 26
    0x00,        // 27
    0x00,        // 28
    0x00,        // 29
    0x00,        // 2A
    0x00,        // 2B
    0x00,        // 2C
    0x00,        // 2D
    0x00,        // 2E
    0x00,        // 2F
    0x00,        // 30
    0x00,        // 31
    0x00,        // 32
    0x00,        // 33
    0x00,        // 34
    0x00,        // 35
    0x00,        // 36
    0x00,        // 37
    0x1F,        // 38
    0x00,        // 39
    0x01,        // 3A
    0x01,        // 3B
    0x01,        // 3C
    0x01,        // 3D
    0x01,        // 3E
    0x01,        // 3F
    0x8F,        // 40
    0x00,        // 41
    0x8F,        // 42
    0x01,        // 43
    0x01,        // 44
    0x01,        // 45
    0x01,        // 46
    0x01,        // 47
    0x01,        // 48
    0x00,        // 49
    0x00,        // 4A
    0x00,        // 4B
    0x00,        // 4C
    0x00,        // 4D
    0x00,        // 4E
    0x00,        // 4F
    0x00,        // 50
    0x00,        // 51
    0xEC,        // 52
    0x0E,        // 53
    0x00,        // 54
    0x00,        // 55
    0x00,        // 56
    0x00,        // 57
    0x00,        // 58
    0x00,        // 59
    0x00,        // 5A
    0x00,        // 5B
    0x00,        // 5C
    0x00,        // 5D
    0x00,        // 5E
    0x00,        // 5F
    0x00,        // 60
    0x00,        // 61
    0x00,        // 62
    0x00,        // 63
    0x00,        // 64
    0x00,        // 65
    0x00,        // 66
    0x00,        // 67
    0x00,        // 68
    0x00,        // 69
    0x00,        // 6A
    0x00,        // 6B
    0x00,        // 6C
    0x00,        // 6D
    0x00,        // 6E
    0x00,        // 6F
    0x79,        // 70
    0x23,        // 71
    0x00,        // 72
    0x00,        // 73
    0x00,        // 74
    0x00,        // 75
    0x00,        // 76
    0x00,        // 77
    0x00,        // 78
    0x00,        // 79
    0x00,        // 7A
    0x00,        // 7B
    0x00,        // 7C
    0x00,        // 7D
    0x00,        // 7E
    0x00,        // 7F
    0x00,        // 80
    0x00,        // 81
    0x00,        // 82
    0x00,        // 83
    0x00,        // 84
    0x00,        // 85
    0x00,        // 86
    0x00,        // 87
    0x00,        // 88
    0x00,        // 89
    0x00,        // 8A
    0x00,        // 8B
    0x00,        // 8C
    0x00,        // 8D
    0x00,        // 8E
    0x00,        // 8F
    0x00,        // 90
    0x00,        // 91
    0x00,        // 92
    0x00,        // 93
    0x00,        // 94
    0x00,        // 95
    0x00,        // 96
    0x00,        // 97
    0x00,        // 98
    0x01,        // 99
    0x02,        // 9A
    0x03,        // 9B
    0x04,        // 9C
    0x05,        // 9D
    0x06,        // 9E
    0x07,        // 9F
    0x08,        // A0
    0x09,        // A1
    0x0A,        // A2
    0x0B,        // A3
    0x0C,        // A4
    0x0D,        // A5
    0x0E,        // A6
    0x0F,        // A7
    0x10,        // A8
    0x11,        // A9
    0x12,        // AA
    0x13,        // AB
    0x14,        // AC
    0x15,        // AD
    0x16,        // AE
    0x17,        // AF
    0x00,        // B0
    0x00,        // B1
    0xFF,        // B2
    0xFF,        // B3
    0xFF,        // B4
    0xFF,        // B5
    0xFF,        // B6
    0xFF,        // B7
    0x00,        // B8
    0x00,        // B9
    0x01,        // BA
    0xC0,        // BB
    0x00,        // BC
    0x00,        // BD
    0x00,        // BE
    0x00,        // BF
    0x02,        // C0
    0xC0,        // C1
    0x00,        // C2
    0x00,        // C3
    0x00,        // C4
    0x00,        // C5
    0x04,        // C6
    0xC0,        // C7
    0x00,        // C8
    0x00,        // C9
    0x00,        // CA
    0x00,        // CB
    0x08,        // CC
    0xC0,        // CD
    0x00,        // CE
    0x00,        // CF
    0x00,        // D0
    0x00,        // D1
    0x10,        // D2
    0xC0,        // D3
    0x00,        // D4
    0x00,        // D5
    0x00,        // D6
    0x00,        // D7
    0x20,        // D8
    0xC0,        // D9
    0x00,        // DA
    0x00,        // DB
    0x00,        // DC
    0x00,        // DD
    0x40,        // DE
    0xC0,        // DF
    0x00,        // E0
    0x00,        // E1
    0x00,        // E2
    0x00,        // E3
    0x80,        // E4
    0xC0,        // E5
    0x00,        // E6
    0x00,        // E7
    0x00,        // E8
    0x00,        // E9
    0x00,        // EA
    0xC1,        // EB
    0x00,        // EC
    0x00,        // ED
    0x00,        // EE
    0x00,        // EF
    0x00,        // F0
    0xC2,        // F1
    0x00,        // F2
    0x00,        // F3
    0x00,        // F4
    0x00,        // F5
    0x00,        // F6
    0xC4,        // F7
    0x00,        // F8
    0x00,        // F9
    0x00,        // FA
    0x00,        // FB
    0x00,        // FC
    0xC8,        // FD
    0x00,        // FE
    0x00,        // FF
    0x00,        // 100
    0x00,        // 101


   uchar *addw;
    while(1)
  { 
        P13=1;
        while(P37==0)
    {           DelayMs(10);
                    if(P37==0) 
       {
       addw=BinCode;
       Write24c08(addw,0x0000,0x03ff);// 逐个写入到24lc08中
       }
                      P13=0;
                      DelayMs(4000); 
    }
  }
}








 

相关帖子

沙发
zyok| | 2008-9-2 12:43 | 只看该作者

是否有换页问题,uchar i = 4000;??

使用特权

评论回复
板凳
cyfwy|  楼主 | 2008-9-2 12:51 | 只看该作者

数组我删减了些

上面的数组我删减了,本来是从0到3ff,我觉得太多写上来大家看不顺眼,所以只写上来101.

使用特权

评论回复
地板
cyfwy|  楼主 | 2008-9-2 12:53 | 只看该作者

谢谢

我最后面写的 DelayMs(4000); 只是想从1.3口输出一个久一点的低电平能通过LED等看出程序运行完成。

使用特权

评论回复
5
zhaoyu2005| | 2008-9-2 16:26 | 只看该作者

LZ啊

24LC08的一页允许写入16个字节,你一下子写入101个,怎么没发现换页呢?

使用特权

评论回复
6
cyfwy|  楼主 | 2008-9-2 17:13 | 只看该作者

啊,没听过啊,我菜鸟

换页?什么叫换页啊,怎么换页啊?

使用特权

评论回复
7
zjh006| | 2008-9-2 17:57 | 只看该作者

只有小部分错误?

只能小部分正确吧,该仔细看看datasheet。

使用特权

评论回复
8
cyfwy|  楼主 | 2008-9-3 04:53 | 只看该作者

谢谢

楼上是对的,后来经验证,根本就没有对的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

53

帖子

0

粉丝