📄 2404.lst
字号:
C51 COMPILER V8.02 2404 11/07/2006 09:12:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 2404
OBJECT MODULE PLACED IN 2404.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2404.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************************************************************
2 **文件功能:24c04的驱动函数 **
3 **创建人:xingyuegu **
4 **创建日期:2006-7-12 **
5 **版本:1.0 **
6 **************************************************************/
7 #include <reg51.h> #include <reg51.h>
8 #include <intrins.h>
9 #include "common.h"
10
11 #define nop() _nop_()
12
13 #define WriteDeviceAddress 0xa0 //写驱动地址指令
14 #define ReadDeviceAddress 0xa1 //读驱动地址指令
15
16 sbit AT24C04_SCL=P2^0;
17 sbit AT24C04_SDA=P2^1;
18 void delay10ms(void)
19 {
20 1 uint i;
21 1 for(i=0;i<6000;i++);
22 1 }
23
24 //启动信号
25 void Start(void)
26 {
27 1 AT24C04_SCL=0;
28 1
29 1 AT24C04_SDA=1;
30 1 nop();
31 1 nop();
32 1 nop();
33 1 nop();
34 1 nop();
35 1 AT24C04_SCL=1;
36 1 nop();
37 1
38 1 nop();
39 1 nop();
40 1 nop();
41 1 nop();
42 1
43 1 AT24C04_SDA=0;
44 1 nop();
45 1 nop();
46 1 nop();
47 1 nop();
48 1 nop();
49 1
50 1 }
51 //停止信号
52 void Stop(void)
53 { AT24C04_SCL=0;
54 1 nop();
55 1 nop();
C51 COMPILER V8.02 2404 11/07/2006 09:12:54 PAGE 2
56 1 nop();
57 1 nop();
58 1 nop();
59 1 nop();
60 1
61 1 AT24C04_SDA=0;
62 1
63 1 AT24C04_SCL=1;
64 1 nop();
65 1 nop();
66 1 nop();
67 1 nop();
68 1 AT24C04_SDA=1;
69 1 nop();
70 1 nop();
71 1 nop();
72 1 nop();
73 1 nop();
74 1 nop();
75 1 }
76 //发应答信号
77 void ack(void)
78 {
79 1 AT24C04_SCL=0;
80 1 nop();
81 1 nop();
82 1 AT24C04_SDA=0;
83 1 AT24C04_SCL=1;
84 1 nop();
85 1 nop();
86 1
87 1 }
88 //发非应答信号
89 void no_ack(void)
90 {
91 1 AT24C04_SCL=0;
92 1 nop();
93 1 nop();
94 1 AT24C04_SDA=1;
95 1 AT24C04_SCL=1;
96 1 nop();
97 1 nop();
98 1 }
99 //写字节
100 bit write8bit(uchar input)
101 {
102 1 uchar i;
103 1 for(i=0;i<8;i++)
104 1 {
105 2 AT24C04_SCL=0;
106 2 input=input<<1;
107 2 AT24C04_SDA=CY;
108 2 nop();
109 2 nop();
110 2 AT24C04_SCL=1;
111 2 nop();
112 2 }
113 1
114 1 AT24C04_SCL=0; //read ack
115 1 nop();
116 1 //AT24C04_SDA=1;
117 1 nop();
C51 COMPILER V8.02 2404 11/07/2006 09:12:54 PAGE 3
118 1 nop();
119 1 // nop();
120 1 AT24C04_SCL=1;
121 1 nop();
122 1
123 1 CY=AT24C04_SDA;
124 1 if(CY)
125 1 return 0;
126 1 else
127 1 return 1;
128 1
129 1 //return(CY);
130 1 }
131 //读字节
132 uchar read8bit(void)
133 {
134 1 uchar i,readdata;
135 1 for(i=0;i<8;i++)
136 1 {
137 2 AT24C04_SCL=0;
138 2 nop();
139 2
140 2 readdata=(readdata<<1)|AT24C04_SDA;
141 2 AT24C04_SCL=1;
142 2 nop();
143 2 }
144 1 return readdata;
145 1 }
146
147 void write_byte(uchar address,uchar output)
148 {
149 1 Start();
150 1 write8bit(WriteDeviceAddress);
151 1 write8bit(address);
152 1 write8bit(output);
153 1 Stop();
154 1 delay10ms();
155 1 }
156
157 uchar random_read(uchar address)
158 {
159 1 uchar rddata;
160 1 Start();
161 1 write8bit(WriteDeviceAddress);
162 1 write8bit(address);
163 1 Start();
164 1 write8bit(ReadDeviceAddress);
165 1 rddata=read8bit();
166 1 no_ack();
167 1 Stop();
168 1 delay10ms();
169 1 return rddata;
170 1 }
171
172 void write_flash(uchar *content,uchar address,uchar len)
173 {
174 1 uchar i;
175 1 Start();
176 1 write8bit(WriteDeviceAddress);
177 1 write8bit(address);
178 1 for(i=0;i<len;i++)
179 1 {
C51 COMPILER V8.02 2404 11/07/2006 09:12:54 PAGE 4
180 2 if(address%16==0)
181 2 {
182 3 Stop();
183 3 delay10ms();
184 3 Start();
185 3 write8bit(WriteDeviceAddress);
186 3 write8bit(address);
187 3 }
188 2 write8bit(*content);
189 2 content++;
190 2 address++;
191 2 }
192 1 Stop();
193 1 delay10ms();
194 1 }
195
196
197
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 255 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
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 + -