📄 sle4428.lst
字号:
C51 COMPILER V6.12 SLE4428 08/15/2002 18:03:17 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE SLE4428
OBJECT MODULE PLACED IN sle4428.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sle4428.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <stdio.h>
2 #include <string.h>
3 #include "memcard.h"
4 //#include "memcard1.h"
5 //#pragma ot(2)
6 void delay(uint iTime)
7 {
8 1 uint i;
9 1 for(i=0;i<iTime;i++);
10 1 }
11
12 //上电函数
13 void power_on(void)
14 {
15 1 RST=0;//tufei
16 1 SCL=0;//tufei
17 1 SDA=0;//tufei
18 1 VCC = 1;
19 1 }
20
21 //下电函数
22 void power_down(void)
23 {
24 1 VCC = 0;
25 1 }
26
27
28 //*****************************************************************************************
29 //***********************以下为4428卡的函数************************************************
30 //*****************************************************************************************
31 //reset and atr
32 void answer_reset_4428(void)
33 {
34 1 uchar data i;
35 1 //tufei SCL = 1;
36 1 //tufei delay(DELAY_CLK_4428);
37 1 RST=HIGH;
38 1 delay(DELAY_CLK_4428);
39 1 SCL=1;//tufei SCL = 0;
40 1 delay(DELAY_CLK_4428);
41 1 SCL=0;//tufei SCL = 1;
42 1 delay(DELAY_CLK_4428);
43 1 RST=LOW;
44 1 delay(DELAY_CLK_4428);
45 1 for(i=0;i<31;i++)
46 1 {
47 2 SCL=1;//tufei SCL = 0;
48 2 delay(DELAY_CLK_4428);
49 2 SCL=0;//tufei SCL = 1;
50 2 delay(DELAY_CLK_4428);
51 2 }
52 1 }
53
54 //写入一个字节
55 void byte_write_4428(uchar cTemp)
C51 COMPILER V6.12 SLE4428 08/15/2002 18:03:17 PAGE 2
56 {
57 1 uchar data i;
58 1 RST=1;
59 1 for(i=0;i<8;i++)
60 1 {
61 2 SDA=cTemp&0x01;
62 2 SCL = 1;//tufei SCL=0;
63 2 delay(DELAY_CLK_4428);
64 2 SCL = 0;//tufei SCL=1;
65 2 delay(DELAY_CLK_4428);
66 2 cTemp=cTemp>>1;
67 2 }
68 1 }
69
70 //读取一个字节
71 uchar byte_read_4428(void)
72 {
73 1 uchar data i;
74 1 uchar cTemp;
75 1 RST=0;
76 1 SDA=1;
77 1 cTemp=0x00;
78 1 for(i=0;i<8;i++)
79 1 {
80 2 cTemp=cTemp/2;
81 2 //tufei SCL = 0;
82 2 //tufei delay(DELAY_CLK_4428);
83 2 SCL = 1;
84 2 delay(DELAY_CLK_4428);
85 2 if(SDA==HIGH)
86 2 {
87 3 cTemp=cTemp+0x80;
88 3 }
89 2 SCL=0;//tufei
90 2 delay(DELAY_CLK_4428);//tufei
91 2 }
92 1 return (cTemp);
93 1 }
94
95 //读取一个字节(带保护位)
96 //返回iTemp, iTemp高字节为数据,iTemp低字节为保护标志(0x00为保护,0xff为未保护)
97 unsigned int byte_read_wpbit_4428(void)//tufei
98 {
99 1 uchar idata i,iTemp;
100 1 uchar idata cTemp[2];
101 1 RST=0;
102 1 SDA=1;
103 1 cTemp[0]=0x00;
104 1 for(i=0;i<8;i++)
105 1 {
106 2 cTemp[0]=cTemp[0]/2;
107 2 //TUFEI SCL = 0;
108 2 //TUFEI delay(DELAY_CLK_4428);
109 2 SCL = 1;
110 2 delay(DELAY_CLK_4428);
111 2 if(SDA==HIGH)
112 2 {
113 3 cTemp[0]=cTemp[0]+0x80;
114 3 }
115 2 SCL=0;//TUFEI
116 2 delay(DELAY_CLK_4428);//TUFEI
117 2 }
C51 COMPILER V6.12 SLE4428 08/15/2002 18:03:17 PAGE 3
118 1 //TUFEI SCL = 0;
119 1 //TUFEI delay(DELAY_CLK_4428);
120 1 SCL = 1;
121 1 delay(DELAY_CLK_4428);
122 1 if(SDA==HIGH)
123 1 cTemp[1]=0xff;
124 1 else
125 1 cTemp[1]=0x00;
126 1 memcpy(&iTemp,cTemp,2);
127 1 return (iTemp);
128 1 }
129
130
131 //检查写入是否完毕
132 bit process_4428(void)
133 {
134 1 uchar data i;
135 1 RST=LOW;
136 1 SDA=HIGH;
137 1 for(i=0;i<256;i++)
138 1 {
139 2 //tufei SCL = 0;
140 2 //tufei delay(DELAY_CLK_4428);
141 2 SCL = 1;
142 2 delay(DELAY_CLK_4428);
143 2 if(SDA==LOW)
144 2 {
145 3 SCL=0;//TUFEI
146 3 delay(DELAY_CLK_4428);//TUFEI
147 3 return TRUE;
148 3 }
149 2 SCL=0;//TUFEI
150 2 delay(DELAY_CLK_4428);//TUFEI
151 2 }
152 1 return FALSE;
153 1 }
154
155 uchar error_counter_4428(void)
156 {
157 1 uchar data cTemp;
158 1 answer_reset_4428();
159 1 byte_write_4428(0xce);
160 1 byte_write_4428(0xfd);
161 1 byte_write_4428(0xff);
162 1 cTemp=byte_read_4428();
163 1 return cTemp;
164 1 }
165
166 uchar error_counter_sle4428(void)
167 {
168 1 uchar data cTemp,counter;
169 1 uchar data i;
170 1 counter=0;
171 1 cTemp=error_counter_4428();
172 1 for(i=0;i<8;i++)
173 1 {
174 2 if((cTemp&0x80)==0x80)
175 2 counter++;
176 2 cTemp<<=1;
177 2 }
178 1 return counter;
179 1 }
C51 COMPILER V6.12 SLE4428 08/15/2002 18:03:17 PAGE 4
180
181 ///////////////////////////////////////////////////////////////////////////////////////
182
183 //功能:从SLE4428中读取数据
184 //参数:
185 // iOffset:读取数据起始地址
186 // iReadLen:读取数据长度
187 // sBuffer:读取数据指针
188 //返回:
189 // TRUE
190
191 bit read_sle4428(uint iOffset,uchar iReadLen,uchar* sBuffer)
192 {
193 1 uchar data i;
194 1 uchar cTemp[2];
195 1 if((iOffset<0)||(iOffset>1023))
196 1 return FALSE;
197 1 if((1024-iOffset)<iReadLen)
198 1 return FALSE;
199 1 answer_reset_4428();
200 1 memcpy(cTemp,&iOffset,2);
201 1 cTemp[0]=(cTemp[0]*64)|0x0e;
202 1 byte_write_4428(cTemp[0]);
203 1 byte_write_4428(cTemp[1]);
204 1 byte_write_4428(0xff);
205 1 for(i=0;i<iReadLen;i++)
206 1 *sBuffer++=byte_read_4428();
207 1 return TRUE;
208 1 }
209
210
211 //功能:向SLE4428中写入数据
212 //参数:
213 // iOffset:写入数据起始地址
214 // iWriteLen:写入数据长度
215 // sBuffer:写入数据指针
216 //返回:
217 // TRUE
218
219 bit write_sle4428(uint iOffset,uchar iWriteLen,uchar* sBuffer)
220 {
221 1 uchar data i,ipOffset;
222 1 uchar cTemp[2];
223 1 uchar* swBuffer;
224 1 if((iOffset<0)||(iOffset>1023))
225 1 return FALSE;
226 1 if((1024-iOffset)<iWriteLen)
227 1 return FALSE;
228 1 swBuffer=sBuffer;
229 1 ipOffset=iOffset;
230 1 answer_reset_4428();
231 1 for(i=0;i<iWriteLen;i++)
232 1 {
233 2 memcpy(cTemp,&ipOffset,2);
234 2 cTemp[0]=(cTemp[0]*64)|0x33;
235 2 byte_write_4428(cTemp[0]);
236 2 byte_write_4428(cTemp[1]);
237 2 byte_write_4428(*swBuffer++);
238 2 if(process_4428()!=TRUE)
239 2 return FALSE;
240 2 ipOffset++;
241 2 }
C51 COMPILER V6.12 SLE4428 08/15/2002 18:03:17 PAGE 5
242 1 answer_reset_4428();
243 1 memcpy(cTemp,&iOffset,2);
244 1 cTemp[0]=(cTemp[0]*64)|0x0e;
245 1 byte_write_4428(cTemp[0]);
246 1 byte_write_4428(cTemp[1]);
247 1 byte_write_4428(0xff);
248 1 for(i=0;i<iWriteLen;i++)
249 1 if(byte_read_4428()!=*sBuffer++)
250 1 return FALSE;
251 1 return TRUE;
252 1 }
253
254
255 //功能:从SLE4428中读取数据(带保护位)
256 //参数:
257 // iOffset:读取数据起始地址
258 // iReadLen:读取数据长度
259 // sBuffer:读取数据指针(偶数位为数据,奇数位为保护位,0x00为保护,0xff为未保护)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -