我写完后数据写的大部分对,但是有小部分错误。怎么办,什么原因,下面是程序
#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); } } }
|