📄 24ceprom.lst
字号:
C51 COMPILER V8.02 24CEPROM 01/01/2000 10:42:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24CEPROM
OBJECT MODULE PLACED IN .\24CEPROM.obj
COMPILER INVOKED BY: C:\keil c51\kei c51\C51\BIN\C51.EXE ..\EPROM\24CEPROM.C BROWSE DEBUG OBJECTEXTEND PRINT(.\24CEPROM.
-lst) OBJECT(.\24CEPROM.obj)
line level source
1 /*******************************************
2 * 文件名 : 24CEPROM.C
3 * 功能 : 24C系列EPROM读写程序
4 * 占用资源: 两个IO口
5 * 程序员 : wyl(wyl-e@163.com)
6 * 日期 : 2007.07
7 * 包含文件: 24CEPROM.H(见本文件结尾处)
8 * 说明 :
9 Table : Description RomSize
10 EPROM24C01 128
11 EPROM24C02 256
12 EPROM24C04 512
13 EPROM24C08 1024
14 EPROM24C16 2048
15 ********************************************/
16
17 #include<_REG52_.H>
*** WARNING C318 IN LINE 17 OF ..\EPROM\24CEPROM.C: can't open file '_REG52_.H'
18 #include"24CEPROM.H"
*** ERROR C202 IN LINE 6 OF ..\EPROM\24CEPROM.H: 'P3': undefined identifier
*** ERROR C202 IN LINE 7 OF ..\EPROM\24CEPROM.H: 'P3': undefined identifier
*** ERROR C129 IN LINE 12 OF ..\EPROM\24CEPROM.H: missing ';' before 'ReadByteFromEPROM'
19
20 /******************************************/
21 #define SETB_SDA SDA_EPROM=1;_nop_();_nop_()
22 #define CLR_SDA SDA_EPROM=0;_nop_();_nop_()
23
24 #define SETB_SCK SCK_EPROM=1;_nop_();_nop_()
25 #define CLR_SCK SCK_EPROM=0;_nop_();_nop_()
26
27 #define WAIT_FOR_ACK _nop_() //等待时钟周期.
28 /*******************************************/
29
30
31 /*******************************************
32 * 函数功能 : 启动EPROM
33 * 入口参数 : (void)
34 * 返回值 : (void)
35 ********************************************/
36 void START_EPROM(void)
37 {
38 CLR_SCK;
39 SETB_SDA;
40 SETB_SCK;
41 CLR_SDA;
42 CLR_SCK;
43 }
44
45 /*******************************************
46 * 函数功能 : 停止EPROM
47 * 入口参数 : (void)
48 * 返回值 : (void)
49 ********************************************/
50 void STOP_EPROM(void)
C51 COMPILER V8.02 24CEPROM 01/01/2000 10:42:29 PAGE 2
51 {
52 CLR_SCK;
53 CLR_SDA;
54 SETB_SCK;
55 SETB_SDA;
56 CLR_SCK;
57 }
58
59 /*******************************************
60 * 函数功能 : 写字节到EPROM
61 * 入口参数 : (uchar)
62 * 返回值 : (bit)
63 ********************************************/
64 static bit WriteByte_EPROM(uchar byte_dat)
65 {
66 uchar dat,i,j=255;
67 dat = byte_dat;
68 for(i=0;i<8;i++)
69 {
70 CLR_SCK;
71 if(dat&0x80){SETB_SDA;}
72 else {CLR_SDA;}
73 SETB_SCK;
74 dat<<=1;
75 }
76 CLR_SCK;
77 SETB_SDA;
78 SETB_SCK;
79 while((SDA_EPROM)&&(j>10))
80 {
81 #ifdef WAIT_FOR_ACK
82 WAIT_FOR_ACK;
83 #endif
84 j--;
85 }
86 CLR_SCK;
87 if(j>10) return 1; //OK
88 else return 0; //ERROR
89 }
90
91 /*******************************************
92 * 函数功能 : 从EPROM读一个字节
93 * 入口参数 : (void)
94 * 返回值 : (uchar)
95 ********************************************/
96 static uchar ReadByte_EPROM(void)
97 {
98 uchar dat,i;
99 CLR_SCK;
100 SETB_SDA;
101 for(i=0;i<8;i++)
102 {
103 dat<<=1;
104 CLR_SCK;
105 SETB_SCK;
106 if(SDA_EPROM)dat+=1;
107 }
108 CLR_SCK;
109 SETB_SDA;
110 SETB_SCK;
111 return dat;
112 }
C51 COMPILER V8.02 24CEPROM 01/01/2000 10:42:29 PAGE 3
113
114 /*******************************************
115 * 函数功能 : 写一个字节到EPROM指定地址.
116 * 入口参数 : (uchar dat,uint addr)
117 * 返回值 : (bit)
118 * 说明 : 连续执行本函数时中间应该有10毫秒
119 的延时.以待ROM内部操作完毕.
120 ********************************************/
121 bit WriteByteToEPROM(uchar byte,uint f_add)
122 {
123 uchar addr;
124 uchar page;
125 bit ack;
126 page = (uchar)(f_add/256);
127 addr = (uchar)(f_add%256);
128 page <<= 1;
129 page &= 0x0E;
130 START_EPROM();
131 WriteByte_EPROM(0xA0|page);
132 WriteByte_EPROM(addr);
133 ack=WriteByte_EPROM(byte);
134 STOP_EPROM();
135 return ack;
136 }
137
138 /*******************************************
139 * 函数功能 : 从EPROM的指定地址读取一个字节
140 * 入口参数 : (uint addr)
141 * 返回值 : (uchar dat)
142 ********************************************/
143 uchar ReadByteFromEPROM(uint f_add)
144 {
145 uchar addr,dat;
146 uchar page;
147 page = (uchar)(f_add/256);
148 addr = (uchar)(f_add%256);
149 page <<= 1;
150 page &= 0x0E;
151 START_EPROM();
152 WriteByte_EPROM(0xA0|page);
153 WriteByte_EPROM(addr);
154 START_EPROM();
155 WriteByte_EPROM(0xA1|page);
156 dat=ReadByte_EPROM();
157 STOP_EPROM();
158 return dat;
159 }
160 /*******************************************
161 * 函数功能 : 从EPROM的指定地址进行读取,获得应得信号
162 * 入口参数 : (uint addr)
163 * 返回值 : (uchar dat)
164 ********************************************/
165 bit ReadACKFromEPROM(uint f_add)
166 {
167 uchar addr;
168 bit ack;
169 uchar page;
170 page = (uchar)(f_add/256);
171 addr = (uchar)(f_add%256);
172 page <<= 1;
173 page &= 0x0E;
174 START_EPROM();
C51 COMPILER V8.02 24CEPROM 01/01/2000 10:42:29 PAGE 4
175 ack = WriteByte_EPROM(0xA0|page);
176 /*
177 WriteByte_EPROM(addr);
178 START_EPROM();
179 ack=WriteByte_EPROM(0xA1|page);
180 dat=ReadByte_EPROM();
181 */
182 STOP_EPROM();
183 return ack;
184 }
185
186 /******************THE END*********************/
187
188
C51 COMPILATION COMPLETE. 1 WARNING(S), 3 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -