📄 at24c02.lst
字号:
C51 COMPILER V8.05a AT24C02 12/20/2008 11:08:09 PAGE 1
C51 COMPILER V8.05a, 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 #include<reg52.h>
2 #define uchar unsigned char
3 uchar temp;
4 sbit dula=P2^6;
5 sbit wela=P2^7;
6 sbit sda=P2^0;
7 sbit scl=P2^1;
8 sbit wr=P3^7;
9 sbit P30=P3^0;
10 sbit P31=P3^1;
11 uchar a;
12 void delay()
13 { ;; }
14 void start() //开始信号
15 {
16 1 sda=1;//sda为高
17 1 delay();//简单延时
18 1 scl=1;//scl为高
19 1 delay();//简单延时
20 1 sda=0;//sda为低
21 1 delay();//简单延时
22 1 }
23
24 void stop() //停止
25 {
26 1 sda=0;//sda为低
27 1 delay();//简单延时
28 1 scl=1;//scl为高
29 1 delay();//简单延时
30 1 sda=1;//sda为高
31 1 delay();
32 1 }
33
34 void respons() //应答
35 {
36 1 uchar i;
37 1 scl=1;//scl为高
38 1 delay();//简单延时
39 1 while((sda==1)&&(i<250))i++;//(sda==1)和(i<250)只要有一个为真就退出while循环
40 1 scl=0;//scl为低
41 1 delay();//简单延时
42 1 }
43
44 void init()//初始化
45 {
46 1 wr=0;//关闭写保护
47 1 sda=1;//sda为高
48 1 delay();//简单延时
49 1 scl=1;//scl为高
50 1 delay();//简单延时
51 1 }
52
53 void write_byte(uchar date)//写数据
54 {
55 1 uchar i,temp;
C51 COMPILER V8.05a AT24C02 12/20/2008 11:08:09 PAGE 2
56 1 temp=date;
57 1
58 1
59 1 for(i=0;i<8;i++)//依次将8个字节写入
60 1 {
61 2 temp=temp<<1;
62 2 scl=0;
63 2 delay();
64 2 sda=CY;
65 2 delay();
66 2 scl=1;
67 2 delay();
68 2 }
69 1 scl=0;
70 1 delay();
71 1 sda=1;
72 1 delay();
73 1 }
74
75 uchar read_byte()//读数据
76 {
77 1 uchar i,k;
78 1 scl=0;
79 1 delay();
80 1 sda=1;
81 1 delay();
82 1 for(i=0;i<8;i++)//依次读出8个字节
83 1 {
84 2 scl=1;
85 2 delay();
86 2 k=(k<<1)|sda;
87 2 scl=0;
88 2 delay();
89 2 }
90 1 return k;
91 1 }
92
93 void delay1(uchar x)//延时
94 {
95 1 uchar a,b;
96 1 for(a=x;a>0;a--)
97 1 for(b=100;b>0;b--);
98 1 }
99
100 void write_add(uchar address,uchar date)//写
101 {
102 1 start();//开始信号
103 1 write_byte(0xa0);//选择器件,并发出写信号
104 1 respons();//等待应答信号
105 1 write_byte(address);//发出要写数据的器件地址
106 1 respons();//等待应答
107 1 write_byte(date);//发出要写的数据给器件
108 1 respons();//等待应答
109 1 stop();//停止信号
110 1 }
111
112 uchar read_add(uchar address)//读
113 {
114 1 uchar date;
115 1 start();//开始信号
116 1 write_byte(0xa0);//选择器件,并发出写信号
117 1 respons();//等待应答
C51 COMPILER V8.05a AT24C02 12/20/2008 11:08:09 PAGE 3
118 1 write_byte(address);//发出要数据的器件地址
119 1 respons();//等待应答
120 1 start();//开始信号
121 1 write_byte(0xa1);//选择器件,并发出读信号
122 1 respons();//等待应答
123 1 date=read_byte();//把器件地址中的数据读出后,放在date中
124 1 stop();//停止信号
125 1 return date;//返回值
126 1 }
127
128 void main()
129 { uchar k=0;k=read_add(0x01);P1=k;
130 1 init();//初始化器件
131 1 while(1){
132 2
133 2 if(P30==0){delay1(10);if(P30==0)write_add(0x01,k);while(P30==0);}//将k值写入芯片的第1个地址
134 2 delay1(200);//延时100ms,(这个延时过短,会造成错误)
135 2 if(P31==0){delay1(10);if(P31==0)k++;P1=k;while(P31==0);}
136 2 temp=read_add(0x01);//将芯片的第23个地址中的数据读出,赋给temp
137 2 P0=temp;//将temp的数据赋给P0口
138 2
139 2
140 2 }
141 1
142 1 }
143
144
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 275 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
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 + -