📄 at24c02.lst
字号:
C51 COMPILER V7.20 AT24C02 03/15/2007 15:00:57 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN AT24C02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C02.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2
3 I2C存储器AT24C02读写实验
4 网址:http://www.kaifaban.com
5
6 功能:在AT24C02某一地址写入一个数据
7 再读出显示在P0口
8
9 ********************************************************************/
10 #include <reg52.h>
11 #include <intrins.h>
12 #define uchar unsigned char
13 #define uint unsigned int
14 sbit SCL=P3^4;//串行时钟线
15 sbit SDA=P3^5;//串行数据线
16 sbit DsySelect=P3^7;//控制LED的74HC244所在IO口
17 //I2C延时程序
18 void I2cDelay(){
19 1 _nop_();_nop_();_nop_();_nop_();_nop_();
20 1 }
21 //I2C起始条件
22 void I2cStart(){
23 1 SDA=1;
24 1 _nop_();
25 1 SCL=1;
26 1 I2cDelay();
27 1 SDA=0;
28 1 I2cDelay();
29 1 SCL=0;//钳住I2C总线,准备发送或接收数据
30 1 _nop_();
31 1 }
32 //I2C停止条件
33 void I2cStop(){
34 1 SDA=0;
35 1 _nop_();
36 1 SCL=1;
37 1 I2cDelay();
38 1 SDA=1;
39 1 I2cDelay();
40 1 }
41 //发ACK应答
42 void I2cAck(){
43 1 SDA=0;
44 1 _nop_();
45 1 SCL=1;
46 1 I2cDelay();
47 1 SCL=0;
48 1 _nop_();
49 1 }
50 //发NOACK应答
51 void I2cNoAck(){
52 1 SDA=1;
53 1 _nop_();
54 1 SCL=1;
55 1 I2cDelay();
C51 COMPILER V7.20 AT24C02 03/15/2007 15:00:57 PAGE 2
56 1 SCL=0;
57 1 _nop_();
58 1 }
59 //等待应答
60 bit WaitAck(){
61 1 uchar Time=255;
62 1 SDA=1;
63 1 _nop_();
64 1 SCL=1;
65 1 I2cDelay();
66 1 while(SDA){
67 2 Time--;
68 2 if(Time==0){
69 3 I2cStop();
70 3 return (0);
71 3 }
72 2 }
73 1 SCL=0;
74 1 _nop_();
75 1 return (1);
76 1 }
77 //I2C写一字节数据
78 void I2cWriteByte(uchar Data){
79 1 uchar i;
80 1 for(i=0;i<8;i++){
81 2 SCL=0;
82 2 I2cDelay();
83 2 SDA=(bit)(Data&0x80);
84 2 Data<<=1;
85 2 I2cDelay();
86 2 SCL=1;
87 2 I2cDelay();
88 2 }
89 1 SCL=0;
90 1 }
91 //I2C读一字节数据
92 uchar I2cReadByte(){
93 1 uchar i,TmpData=0;
94 1 SDA=1;
95 1 for(i=0;i<8;i++){
96 2 SCL=0;
97 2 I2cDelay();
98 2 SCL=1;
99 2 I2cDelay();
100 2 TmpData<<=1;
101 2 TmpData|=SDA;
102 2 }
103 1 SCL=0;
104 1 return(TmpData);
105 1 }
106 //I2C写数据到AT24C02
107 void I2cWrite(uchar Address,uchar Data){
108 1 I2cStart();//启动总线
109 1 I2cWriteByte(0xA0);//发送器件地址
110 1 WaitAck();
111 1 I2cWriteByte(Address);//发送器件子地址
112 1 WaitAck();
113 1 I2cWriteByte(Data);//发送数据
114 1 WaitAck();
115 1 I2cStop();
116 1 }
117 //I2C从AT24C02读数据
C51 COMPILER V7.20 AT24C02 03/15/2007 15:00:57 PAGE 3
118 uchar I2cRead(uchar Address){
119 1 uchar TmpData;
120 1 I2cStart();//启动总线
121 1 I2cWriteByte(0xA0);//发送器件地址
122 1 WaitAck();
123 1 I2cWriteByte(Address);//发送器件子地址
124 1 WaitAck();
125 1 I2cStart();//启动总线
126 1 I2cWriteByte(0xA1);//发送器件地址
127 1 I2cAck();
128 1 TmpData=I2cReadByte();//读取数据
129 1 I2cNoAck();
130 1 I2cStop();
131 1 return(TmpData);
132 1 }
133 //主函数
134 main(){
135 1 uchar ReadData;
136 1 DsySelect=0;//打开LED
137 1 I2cWrite(0x00,0x12);//在地址0x00写入数据0x12
138 1 while(1){
139 2 ReadData=I2cRead(0x00);//读出地址为0x00的数据
140 2 P0=~ReadData;
141 2 }
142 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 230 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -