📄 93c46.lst
字号:
C51 COMPILER V7.50 93C46 04/04/2007 15:29:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN 93C46.OBJ
COMPILER INVOKED BY: D:\software\Keil\C51\BIN\C51.EXE 93C46.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************
2 **模块名称:93C46的读写
3 **功能描述:该模块的功能是,先将0到9这几个数据存进93C46,然后再依次读出来,
4 **实现EEPROM功能,断电之后,仍然可以再读出来,并显示出来。
5 **********************************************************/
6
7 #include <reg51.h>
8
9 sbit CS=P1^0;
10 sbit CLK=P1^1;
11 sbit DI=P1^2;
12 sbit DO=P1^3;
13
14 unsigned char data SendBuffer[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
15 0x82,0xf8,0x80,0x90};
16
17
18
19 delay10ms()
20 {
21 1 unsigned i,j;
22 1 for(i=200;i>0;i--)
23 1 for(j=200;j>0;j--);
24 1 }
25
26
27 /********************************************************
28 **名称:Ewen(void)
29 **功能:擦除/写入允许指令 Write enable must precede all programming modes.
30 **输入:
31 **返回:
32 *******************************************************/
33 void Ewen(void) {
34 1 unsigned char temp,InData;
35 1 CS=0;
36 1 CLK=0;
37 1 CS=1;
38 1 InData=0x98; // 10011XXXX
39 1 for(temp=9;temp!=0;temp--)
40 1 { // 9位的指令(当93c46选择为16结构时,93c46有7条9位的指令
41 2 DI=InData&0x80; // 将InData按位输入
42 2 CLK=1; CLK=0;
43 2 InData<<=1; //InData=InData<<1;
44 2 }
45 1 CS=0;
46 1 }
47
48 /********************************************************
49 **名称:Ewds(void)
50 **功能:禁止指令 Disables all programming instructions.
51 **输入:
52 **返回:
53 *******************************************************/
54 void Ewds(void) {
55 1 unsigned char temp,InData;
C51 COMPILER V7.50 93C46 04/04/2007 15:29:20 PAGE 2
56 1 CS=0;
57 1 CLK=0;
58 1 CS=1;
59 1 InData=0x80; // 10000XXXX
60 1 for(temp=9;temp!=0;temp--)
61 1 { // 9位的指令(当93c46选择为16结构时,93c46有7条9位的指令
62 2 DI=InData&0x80; // 将InData按位输入
63 2 CLK=1; CLK=0;
64 2 InData<<=1; //InData=InData<<1;
65 2 }
66 1 CS=0;
67 1 }
68
69 /********************************************************
70 **名称:unsigned int Read(unsigned char address)
71 **功能:Reads data stored in memory, at specified address.
72 将address后六位指向的在93C46中的地址的一个字节(16位)
73 读出来放入result中
74 **输入:address(xx xxxxxx后面六位起作用)
75 **返回:result
76 *******************************************************/
77 unsigned int Read(unsigned char address)
78 {
79 1 unsigned char temp;
80 1 unsigned int result;
81 1 Ewen();
82 1 CLK=0; DI=1; // 110 A5-A0
83 1 CS=0; CS=1;
84 1 CLK=1; CLK=0; // 先输入一个1
85 1 address=address&0x3f|0x80; // address变成10xxxxxx
86 1 for(temp=8;temp!=0;temp--) // 接下来连续输入8位(在93C46中的地址 指令形式 110 A5-A0)
87 1 { // 8
88 2 DI=address&0x80;
89 2 CLK=1; CLK=0;
90 2 address<<=1;
91 2 }
92 1 DO=1;
93 1 for(temp=16;temp!=0;temp--) //读取16位的数据(一字节)
94 1 { // 16
95 2 CLK=1; //在下降沿输出数据到DO
96 2 result=(result<<1)|DO; //将数据按位存入result中
97 2 CLK=0;
98 2 }
99 1 CS=0;
100 1 Ewds();
101 1 return(result);
102 1 }
103
104 /********************************************************
105 **名称:void Write(unsigned char address,unsigned int InData)
106 **功能:Writes memory location An - A0.
107 将InData写入address
108 **输入:unsigned char address,unsigned int InData
109 **返回:
110 *******************************************************/
111 void Write(unsigned char address,unsigned int InData)
112 {
113 1 unsigned char temp;
114 1 Ewen();
115 1 CLK=0; DI=1; // 101 A5-A0
116 1 CS=0; CS=1;
117 1 CLK=1; CLK=0; // 先输入一个1
C51 COMPILER V7.50 93C46 04/04/2007 15:29:20 PAGE 3
118 1 address=address&0x3f|0x40; // address变成10xxxxxx
119 1 for(temp=8;temp!=0;temp--) // 接下来连续输入8位(在93C46中的地址 指令形式 101 A5-A0)
120 1 { // 8
121 2 DI=address&0x80;
122 2 CLK=1; CLK=0;
123 2 address<<=1;
124 2 }
125 1 for(temp=16;temp!=0;temp--) // 写入16位的数据(一字节)
126 1 { // 16
127 2 DI=InData&0x8000;
128 2 CLK=1; CLK=0; //上升沿
129 2 InData<<=1; //InData=InData<<1;
130 2 }
131 1 CS=0; DO=1;
132 1 CS=1; CLK=1; //CS不片选芯片(为0)的时间要大于Tcsmin
133 1 while(DO==0)
134 1 { // busy test
135 2 CLK=0; CLK=1; //如果繁忙状态,则CLK=0,CS=1
136 2 }
137 1 CLK=0; CS=0; // 结束
138 1 Ewds();
139 1 }
140
141 /*
142 */
143 /********************************************************
144 **名称:void Erase(unsigned char address)
145 **功能:Erase memory location An - A0.
146 擦除操作指令,将address的内容擦除
147 在不需要擦除时,将此函数注释
148 **输入:unsigned char address
149 **返回:
150 *******************************************************
151 void Erase(unsigned char address) {
152 unsigned char temp;
153 Ewen();
154 CLK=0; DI=1; // 111 A5-A0
155 CS=0; CS=1;
156 CLK=1; CLK=0; // 1
157 address|=0xc0;
158 for(temp=8;temp!=0;temp--) { // 8
159 DI=address&0x80;
160 CLK=1; CLK=0;
161 address<<=1;
162 }
163 CS=0; DO=1;
164 CS=1; CLK=1;
165 while(DO==0) {
166 CLK=0; CLK=1;
167 }
168 CLK=0; CS=0;
169 Ewds();
170 }
171
172
173 */
174
175 /********************************************************
176 **名称:void Eral(void)
177 **功能:Erases all memory locations. Valid only at VCC = 4.5V to 5.5V.
178 全部擦除操作指令,93C46所有的内容擦除
179 在不需要擦除时,将此函数注释
C51 COMPILER V7.50 93C46 04/04/2007 15:29:20 PAGE 4
180 **输入:
181 **返回:
182 *******************************************************
183 void Eral(void) {
184 unsigned char temp,InData;
185 Ewen();
186 CS=0;
187 CLK=0;
188 CS=1;
189 InData=0x90; // 10010XXXX
190 for(temp=9;temp!=0;temp--) { // 9
191 DI=InData&0x80;
192 CLK=1; CLK=0;
193 InData<<=1;
194 }
195 CS=0; DO=1;
196 CS=1; CLK=1;
197 while(DO==0) {
198 CLK=0; CLK=1;
199 }
200 CLK=0; CS=0;
201 Ewds();
202 }
203
204
205 /*
206
207 /********************************************************
208
209 // Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
210
211 *******************************************************
212 void Wral(unsigned int InData) {
213 unsigned char temp,address;
214 Ewen();
215 CS=0;
216 CLK=0;
217 CS=1;
218 address=0x88; // 10001XXXX
219 for(temp=9;temp!=0;temp--) { // 9
220 DI=address&0x80;
221 CLK=1; CLK=0;
222 address<<=1;
223 }
224 for(temp=16;temp!=0;temp--) { // 16
225 DI=InData&0x8000;
226 CLK=1; CLK=0;
227 InData<<=1;
228 }
229 CS=0; DO=1;
230 CS=1; CLK=1;
231 while(DO==0) {
232 CLK=0; CLK=1;
233 }
234 CLK=0; CS=0;
235 Ewds();
236 }
237 */
238
239 /********************************************************
240 **名称:unsigned char ReadChar(unsigned char address)
241 **功能:address 为8位的地址,
C51 COMPILER V7.50 93C46 04/04/2007 15:29:20 PAGE 5
242 address 为 x xxxxxx x
243 第一个x是没什么用的,中间六个xxxxxx是真正的地址
244 最后一个x是表示取一个字节(16位)中的高8位还是低8位(1为高8位,0为低8位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -