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