📄 24c04.lst
字号:
C51 COMPILER V8.02 24C04 10/16/2006 21:22:15 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24C04
OBJECT MODULE PLACED IN 24c04.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c04.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include "at24c04.h"
4 #include "i2c.h"
5
6
7
8
9 void delay10ms(void)
10 {
11 1 uint i;
12 1 for(i=0;i<200;i++);
13 1 }
14
15 //启动信号
16 void start(void)
17 {
18 1 AT24C04_SCL=0;
19 1 nop();
20 1 AT24C04_SDA=1;
21 1 nop();
22 1 AT24C04_SCL=1;
23 1 nop();
24 1 AT24C04_SDA=0;
25 1 nop();
26 1
27 1 }
28 //停止信号
29 void stop(void)
30 { AT24C04_SCL=0;
31 1 nop();
32 1 AT24C04_SDA=0;
33 1 AT24C04_SCL=1;
34 1 nop();
35 1 AT24C04_SDA=1;
36 1 nop();
37 1 }
38 //发应答信号
39 void ack(void)
40 {
41 1 AT24C04_SCL=0;
42 1 AT24C04_SDA=0;
43 1 AT24C04_SCL=1;
44 1 nop();
45 1
46 1 }
47 //发非应答信号
48 void no_ack(void)
49 {
50 1 AT24C04_SCL=0;
51 1 AT24C04_SDA=1;
52 1 AT24C04_SCL=1;
53 1 nop();
54 1 }
55 //写字节
C51 COMPILER V8.02 24C04 10/16/2006 21:22:15 PAGE 2
56 bit write8bit(uchar input)
57 {
58 1 uchar i;
59 1 for(i=0;i<8;i++)
60 1 {
61 2 AT24C04_SCL=0;
62 2 input=input<<1;
63 2 AT24C04_SDA=CY;
64 2 nop();
65 2 nop();
66 2 AT24C04_SCL=1;
67 2 nop();
68 2 }
69 1 AT24C04_SCL=0;
70 1 nop();
71 1 AT24C04_SDA=1;
72 1 AT24C04_SCL=1;
73 1 nop();
74 1 CY=AT24C04_SDA;
75 1 return(CY);
76 1 }
77 //读字节
78 uchar read8bit(void)
79 {
80 1 uchar i,readdata;
81 1 for(i=0;i<8;i++)
82 1 {
83 2 AT24C04_SCL=0;
84 2 nop();
85 2
86 2 readdata=(readdata<<1)|AT24C04_SDA;
87 2 AT24C04_SCL=1;
88 2 }
89 1 return readdata;
90 1 }
91 //功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针
92 //nContent开头的往下内容。
93 void readflash(uchar *content,uchar address,uchar len) //顺序读
94 {
95 1 uchar i;
96 1 start(); //以随机读开始,提供开始地址
97 1 write8bit(WriteDeviceAddress);
98 1 write8bit(address);
99 1
100 1 start();
101 1 write8bit(ReadDeviceAddress);
102 1 for(i=0;i<len;i++)
103 1 {
104 2 *content=read8bit();
105 2 content++;
106 2 ack();
107 2 }
108 1 no_ack();
109 1 stop();
110 1 }
111
112 uchar readflash_byte()
113 {
114 1 uchar readdata;
115 1 start();
116 1 write8bit(ReadDeviceAddress);
117 1 readdata=read8bit();
C51 COMPILER V8.02 24C04 10/16/2006 21:22:15 PAGE 3
118 1 ack();
119 1 stop();
120 1 return readdata;
121 1 }
122 //
123 bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF
124 {
125 1 unsigned char nLen;
126 1 unsigned char Addr;
127 1 nLen=16;
128 1 Addr=16 *nPage;
129 1 start();;
130 1 write8bit(WriteDeviceAddress);
131 1 write8bit(Addr);
132 1 for(;nLen!=0;nLen--)
133 1 {
134 2 if(write8bit(0xff)) break; //if Write8Bit() Return 1 Write Flase
135 2 }
136 1 stop();
137 1 delay10ms();
138 1 return(CY);
139 1 }
140 //功能:向EEPROM
141
142 void writeflash(uchar *content,uchar address,uchar len)
143 {
144 1 uchar i;
145 1
146 1 start();
147 1 write8bit(WriteDeviceAddress);
148 1 write8bit(address);
149 1 for(i=0;i<len;i++)
150 1 {
151 2 if(address%16==0)//该写下一页了
152 2 {
153 3 stop();
154 3 delay10ms();
155 3 start();
156 3 write8bit(WriteDeviceAddress);
157 3 write8bit(address);
158 3 }
159 2
160 2 write8bit(*content);
161 2
162 2 content++;
163 2 address++;
164 2 }
165 1 stop();
166 1 delay10ms();
167 1 }
168
169
170
171
172
173
174
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 270 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V8.02 24C04 10/16/2006 21:22:15 PAGE 4
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -