📄 2402shiyan.lst
字号:
C51 COMPILER V8.02 2402SHIYAN 06/01/2007 22:56:05 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 2402SHIYAN
OBJECT MODULE PLACED IN 2402shiyan.OBJ
COMPILER INVOKED BY: G:\8.02\C51\BIN\C51.EXE 2402shiyan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X52.H>
2 #include <INTRINS.h>
3 #ifndef I2C_H
4 #define I2C_H
5 typedef unsigned char uchar; //重新定义数据类型
6 typedef unsigned int uint;
7 const uchar WR24C02 = 0xa0; //读写控制命令 //EEPROM地址+写命令
8 const uchar RD24C02 = 0xA1; //EEPROM地址+读命令
9 sbit I2C_SCL = P2^4; //I/O口定义
10 sbit I2C_SDA = P2^5;
11 bit ErrorBit; //用户变量声明 //读写错误标志 1错误 0 正确
12 uchar idata ErrorCode; //错误码
13 uchar date_txd[18]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8}; //发送数据存放数组
14 uchar date_rxd[18]={0}; //接收数据存放数组
15 uchar da=0;
16 //************************函数声明***************************
17 void Start(void);
18 void Stop(void);
19 void Ack(void);
20 void NoAck(void);
21 void TestAck(void);
22 void Write_I2c(uchar date);
23 uchar Read_I2c(void);
24 void DelayMs(uchar time);
25 void Write_Date(uchar StartAddress,uchar *date,uchar bytes);
26 void Read_Date(uchar StartAddress,uchar *date,uchar bytes);
27 #endif
28 unsigned char code Tab[]={0xff,0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf
-,
29 0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,0xff
-};
30 unsigned char code codedisplay[]={0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0
-xFF,0xFF,/*"0",0*/
31 0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0
-xFF,0xFF,/*"1",1*/
32 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0
-xFF,0xFF,/*"2",2*/
33 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,/*"3",3*/
34 0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0
-xFF,0xFF,/*"4",4*/
35 0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0
-xFF,0xFF,/*"5",5*/
36 0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6",6*/
37 0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,/*"7",7*/
38 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8",8*/
39 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF};/*"9",9*/
40
41
42
43 unsigned char m;
44 unsigned int result,count=0;
45 void Start(void)
46 { I2C_SDA = 1; //起始条件的数据信号
47 1 I2C_SCL = 1; //起始条件时钟信号
48 1 _nop_();
C51 COMPILER V8.02 2402SHIYAN 06/01/2007 22:56:05 PAGE 2
49 1 _nop_();
50 1 I2C_SDA = 0; //起始信号
51 1 _nop_();
52 1 _nop_();
53 1 I2C_SCL = 0; //钳住I2C总线, 准备发送或者接受数据
54 1 _nop_();
55 1 }
56 void Stop(void)
57 { I2C_SDA = 0; //结束条件的数据信号
58 1 I2C_SCL = 1; //结束条件的时钟信号
59 1 _nop_();
60 1 _nop_();
61 1 I2C_SDA = 1; //结束信号
62 1 _nop_();
63 1 _nop_();
64 1 }
65 void Ack(void)
66 { I2C_SDA = 0;
67 1 I2C_SCL = 1;
68 1 _nop_();
69 1 _nop_();
70 1 I2C_SCL = 0;
71 1 _nop_();
72 1 _nop_();
73 1 I2C_SDA = 1;
74 1 }
75 void NoAck(void)
76 { I2C_SDA = 1;
77 1 I2C_SCL = 1;
78 1 _nop_();
79 1 _nop_();
80 1 I2C_SCL = 0;
81 1 _nop_();
82 1 _nop_();
83 1 }
84 void TestAck(void)
85 { I2C_SDA = 1;
86 1 I2C_SCL = 1;
87 1 _nop_();
88 1 _nop_();
89 1 ErrorBit = I2C_SDA;
90 1 I2C_SCL = 0;
91 1 _nop_();
92 1 _nop_();
93 1 }
94 void Write_I2c(uchar date)
95 { uchar i;
96 1 for(i=0;i<8;i++)
97 1 {
98 2 I2C_SDA=date&0x80; //送数据到数据线上
99 2 date<<=1;
100 2 I2C_SCL=1; //置时钟信号为高电平,使数据有效
101 2 _nop_();
102 2 _nop_();
103 2 I2C_SCL=0;
104 2 _nop_();
105 2 _nop_();
106 2
107 2 }
108 1 }
109 uchar Read_I2c(void)
110 { uchar i;
C51 COMPILER V8.02 2402SHIYAN 06/01/2007 22:56:05 PAGE 3
111 1 uchar byte = 0;
112 1 for(i = 0; i < 8; i++)
113 1 { I2C_SCL = 0; //置时钟为低电平,准备接受数据
114 2 _nop_();
115 2 _nop_();
116 2 I2C_SCL = 1; //置时钟为高电平,使数据线数据有效
117 2 _nop_();
118 2 _nop_();
119 2 byte <<= 1;
120 2 byte |= I2C_SDA;
121 2 I2C_SCL = 0;
122 2 }
123 1 return(byte);
124 1 }
125 void DelayMs(uchar time)
126 { uchar i;
127 1 do
128 1 { for(i = 0; i < 125 ; i++); //*延时 8us x 125 = 1ms
129 2 }
130 1 while (time--);
131 1 }
132 void Write_Date(uchar StartAddress,uchar *date,uchar bytes)
133 { uchar i = 0;
134 1 Start();
135 1 Write_I2c(WR24C02);
136 1 TestAck();
137 1 Write_I2c(StartAddress);
138 1 TestAck();
139 1 for(i = 0;i < bytes; i++)
140 1 {
141 2 Write_I2c(*date);
142 2 TestAck();
143 2 date++;
144 2 }
145 1
146 1 Stop();
147 1 DelayMs(20);
148 1 }
149 void Read_Date(uchar StartAddress,uchar *date,uchar bytes)
150 { uchar i;
151 1 Start();
152 1 Write_I2c(WR24C02);
153 1 TestAck();
154 1 Write_I2c(StartAddress);
155 1 TestAck();
156 1 Start();
157 1 Write_I2c(RD24C02);
158 1 TestAck();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -