📄 e25045.lst
字号:
C51 COMPILER V7.05 E25045 03/01/2002 11:49:00 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE E25045
OBJECT MODULE PLACED IN E25045.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE E25045.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2
3 #include "e25045.h"
4 sbit CS = P1^0; //EEPROM及看门狗片选
5 sbit SI = P1^6; //串行数据输入
6 sbit SCK = P1^5; //串行时钟
7 sbit SO = P1^1; //串行数据输出
8
9
10
11 /***********************************************************************
12 * I2c BUS Related sbit SCL= P1^0; sbit SDA = P1^1; *
13 ***********************************************************************/
14 void Delay5(void) // 5 us
15 { unsigned char xdata i; for(i=0;i<23;i++);
16 1 }
17 //******************************************************
18 void Watch_dog(void)
19 {
20 1 CS=1;
21 1 CS=0;
22 1 Delay5();
23 1 CS=1;
24 1 }
25 //初始化X25043/25045
26 /********************************************************************************
27 _______________________________
28 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | BL1 BL0 WD1 WD0
29 -------------------------------- 0 0 None 0 0 1.4Seconds
30 | x | x |WD1|WD0|BL1|BL0|WEL|WIP| 0 1 180--1FF 0 1 600Milliseconds
31 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 0 100--1FF 1 0 200Milliseconds
32 1 1 000--1FF 1 1 Disabled
33 *********************************************************************************/
34 void Init_X25045(unsigned char STATUS)
35 {
36 1 CS=0;
37 1 SO=1;
38 1 SCK=0;
39 1 SI=0;
40 1 Wrsr_Cmd(STATUS);
41 1 }
42
43 //设置写使能锁
44 void Wren_Cmd(void)
45 {
46 1 SCK=0;
47 1 CS=0;
48 1 OutByte(WREN_INST);
49 1 SCK=0;
50 1 CS = 1;
51 1 }
52
53 //读状态寄存器
54 unsigned char Rdsr_Cmd(void)
55 {
C51 COMPILER V7.05 E25045 03/01/2002 11:49:00 PAGE 2
56 1 unsigned char RetCode;
57 1 SCK = 0;
58 1 CS = 0;
59 1 OutByte(RDSR_INST);
60 1 RetCode = InByte();
61 1 SCK = 0;
62 1 CS = 1;
63 1 return RetCode;
64 1 }
65
66 //写状态寄存器
67 /*******************************************
68 ___________________________________________
69 | X | X | WD1 | WD0 | BL1 | BL0 | WEL | WIP |
70 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71 0 0(1400) 0 0(None)
72 0 1(600) 0 1($180-$1FF)
73 1 0(200) 1 0($100-$1FF)
74 1 1 Disa 1 1($000-$1FF)
75 ********************************************/
76
77 void Wrsr_Cmd(unsigned char STATUS)
78 {
79 1 if((Rdsr_Cmd()&0x01)==1) return;
80 1 CS = 0;
81 1 Wren_Cmd();
82 1 SCK = 0;
83 1 CS = 1;
84 1 CS = 0;
85 1 OutByte(WRSR_INST);
86 1 OutByte(STATUS);
87 1 SCK = 0;
88 1 CS = 1;
89 1 //Wip_Poll();
90 1 }
91
92 //写一个字节
93 void Byte_Write(unsigned int Addr,unsigned char wbyte)
94 {
95 1 unsigned char data HAddr,LAddr,Temp;
96 1 while((Rdsr_Cmd()&0x01)==1);
97 1 CS = 0;
98 1 Wren_Cmd();
99 1 SCK = 0;
100 1 CS = 1;
101 1 CS = 0;
102 1 LAddr = (unsigned char)Addr;
103 1 HAddr = Addr>>8;
104 1 Temp = (WRITE_INST&0xF7)|((HAddr<<3)&0x08);
105 1 OutByte(Temp);
106 1 OutByte(LAddr);
107 1 OutByte(wbyte);
108 1 SCK = 0;
109 1 CS = 1;
110 1 //Wip_Poll();
111 1 }
112
113 //读一个字节
114 unsigned char Byte_read(unsigned int Addr)
115 {
116 1 unsigned char data HAddr,LAddr,Temp;
117 1 while((Rdsr_Cmd()&0x01)==1);
C51 COMPILER V7.05 E25045 03/01/2002 11:49:00 PAGE 3
118 1 SCK = 0;
119 1 CS = 0;
120 1 LAddr = (unsigned char)Addr;
121 1 HAddr = Addr>>8;
122 1 Temp = (READ_INST&0xF7)|((HAddr<<3)&0x08);
123 1 OutByte(Temp);
124 1 OutByte(LAddr);
125 1 Temp = InByte();
126 1 SCK= 0;
127 1 CS = 1;
128 1 //Wip_Poll();
129 1 return Temp;
130 1 }
131
132
133 /*****************************************************************/
134 //对串行FLASH进行读校验
135 /*******************************************************************/
136 unsigned char ByteRead_Check (unsigned int addrR)
137 {
138 1 unsigned char TempVar,TempVar1,TempVar2;
139 1 TempVar2=0;
140 1 TempVar=Byte_read(addrR);
141 1 do
142 1 {
143 2 TempVar1=Byte_read(addrR);
144 2 if(TempVar==TempVar1)
145 2 {
146 3 TempVar2++;
147 3 }
148 2 else
149 2 {
150 3 TempVar2=0;
151 3 TempVar=TempVar1;
152 3 }
153 2 }
154 1 while(TempVar2<=3);
155 1 return(TempVar);
156 1 }
157 /************************************************/
158 //对串行FLASH进行写校验
159 /*************************************************************/
160 void ByteWrite_Check (unsigned int addrW ,unsigned char VarTemp)
161 {
162 1 Byte_Write(addrW,VarTemp);
163 1 while(VarTemp!=Byte_read(addrW))
164 1 Byte_Write(addrW,VarTemp);
165 1 }
166
167 //送一个字节到EEPROM
168 void OutByte(unsigned char b)
169 {
170 1 unsigned char i;
171 1 unsigned char bb=0x80;
172 1 for(i=0;i<8;i++)
173 1 {
174 2 //SCK=0;
175 2 SI=b&bb;
176 2 bb>>=1;
177 2 SCK=0;
178 2 Delay5();
179 2 SCK=1;
C51 COMPILER V7.05 E25045 03/01/2002 11:49:00 PAGE 4
180 2 Delay5();
181 2 }
182 1 }
183
184 //从EEPROM接收一个字节
185 unsigned char InByte(void)
186 {
187 1 unsigned char i;
188 1 unsigned char b=0;
189 1 for(i=0;i<8;i++)
190 1 {
191 2 Delay5();
192 2 SCK=1;
193 2 SCK=0;
194 2 Delay5();
195 2 b=2*b+(unsigned char)SO;
196 2 }
197 1 return b;
198 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 334 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 1
PDATA SIZE = ---- ----
DATA SIZE = ---- 15
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 + -