📄 eeprom.lst
字号:
C51 COMPILER V7.06 EEPROM 06/25/2008 15:44:08 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe EEPROM.C DB OE
stmt level source
1 //********************************************************************************************************
-******************
2 #include <c8051F020.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include "HEAD.H"
6 //********************************************************************************************************
-******************
7 void EEPROM_Init(void)
8 {
9 1 xdata unsigned char i;
10 1
11 1 NowWellNum=0x00;
12 1
13 1 for(i=0;i<MaxWellSaveNum;i++)
14 1 {
15 2 if( (Read_Eeprom(0x400*i+HollDateLong)==0xA5) && (Read_Eeprom(0x400*i+HollDateLong+1)==0x5A) )
16 2 {
17 3 WellSaveStation[i]=0xAA;
18 3 NowWellNum++;
19 3 }
20 2 else
21 2 {
22 3 NowSaveWellAddr=i;
23 3 }
24 2 }
25 1 if(NowWellNum==MaxWellSaveNum)
26 1 {
27 2 NowSaveWellAddr=0x00;
28 2 }
29 1 LCD_SHOW_WellSaveStation();
30 1
31 1 }
32 //********************************************************************************************************
-******************
33 void Start_I2C(void)
34 {
35 1 EE_SDA=1; Some_nop(5);
36 1 EE_SCL=1; Some_nop(5);
37 1 EE_SDA=0; Some_nop(5);
38 1 EE_SCL=0; Some_nop(5);
39 1 }
40 //********************************************************************************************************
-******************
41 void Stop_I2C(void)
42 {
43 1 EE_SDA=0; Some_nop(5);
44 1 EE_SCL=1; Some_nop(5);
45 1 EE_SDA=1; Some_nop(5);
46 1 }
47 //********************************************************************************************************
-******************
48 bit WriteEepromByet(unsigned char date)
49 {
50 1 bit Ack_f;
C51 COMPILER V7.06 EEPROM 06/25/2008 15:44:08 PAGE 2
51 1 xdata unsigned char i;
52 1
53 1 for(i=0;i<8;i++)
54 1 {
55 2 if((date<<i)&0x80)
56 2 EE_SDA=1;
57 2 else
58 2 EE_SDA=0;
59 2 EE_SCL=1; Some_nop(5);
60 2 EE_SCL=0; Some_nop(5);
61 2 }
62 1 EE_SDA=1; Some_nop(5);
63 1 EE_SCL=1; Some_nop(5);
64 1 if(EE_SDA==1)
65 1 Ack_f=0;
66 1 else
67 1 Ack_f=1;
68 1 EE_SCL=0; Some_nop(5);
69 1
70 1 return Ack_f;
71 1 }
72 //********************************************************************************************************
-******************
73 unsigned char ReadEepromBaye(void)
74 {
75 1 xdata unsigned char date;
76 1 xdata unsigned char i;
77 1
78 1 date=0;
79 1 EE_SDA=1; Some_nop(5);
80 1 for(i=0;i<8;i++)
81 1 {
82 2 EE_SCL=0; Some_nop(5);
83 2 EE_SCL=1; Some_nop(5);
84 2 date<<=1;
85 2 if(EE_SDA==1)
86 2 date++;
87 2 }
88 1 EE_SCL=0; Some_nop(5);
89 1
90 1 return(date);
91 1 }
92 //********************************************************************************************************
-******************
93 void Ack_I2C(bit a)
94 {
95 1 EE_SDA=a; Some_nop(5);
96 1 EE_SCL=1; Some_nop(5);
97 1 EE_SCL=0; Some_nop(5);
98 1 }
99 //********************************************************************************************************
-******************
100 bit Write_Eeprom(unsigned int add,unsigned char date)
101 {
102 1 xdata unsigned char addh,addl;
103 1
104 1 if(add >= EEPROM_CAP)
105 1 add-=EEPROM_CAP;
106 1 addh=add>>8;
107 1 addl=add;
108 1
109 1 Start_I2C();
C51 COMPILER V7.06 EEPROM 06/25/2008 15:44:08 PAGE 3
110 1 if(!WriteEepromByet(0xA0))return(0);
111 1 if(!WriteEepromByet(addh))return(0);
112 1 if(!WriteEepromByet(addl))return(0);
113 1 if(!WriteEepromByet(date))return(0);
114 1 Stop_I2C();
115 1 Delay_ms(100);
116 1
117 1 return 1;
118 1 }
119 //********************************************************************************************************
-******************
120 unsigned char Read_Eeprom(unsigned int add)
121 {
122 1 xdata unsigned char addh,addl;
123 1 xdata unsigned char date;
124 1
125 1 if(add >= EEPROM_CAP)
126 1 add-=EEPROM_CAP;
127 1 addh=add>>8;
128 1 addl=add;
129 1
130 1 Start_I2C();
131 1 if(!WriteEepromByet(0xA0))return(0);
132 1 if(!WriteEepromByet(addh))return(0);
133 1 if(!WriteEepromByet(addl))return(0);
134 1 Start_I2C();
135 1 if(!WriteEepromByet(0xA1))return(0);
136 1 date=ReadEepromBaye();
137 1 Ack_I2C(1);
138 1 Stop_I2C();
139 1
140 1 return(date);
141 1 }
142 //********************************************************************************************************
-******************
143 void Some_nop(unsigned char num)
144 {
145 1 xdata unsigned char i;
146 1
147 1 for(i=0;i<num;i++);
148 1 }
149 //********************************************************************************************************
-******************
150 bit Write_Well_date(unsigned int add,unsigned char * date,unsigned int D_Long)
151 {
152 1 xdata unsigned char addh,addl;
153 1 xdata unsigned int i,j;
154 1
155 1 if(add >= EEPROM_CAP)
156 1 add-=EEPROM_CAP;
157 1
158 1 for(j=0;j<D_Long/64+1;j++)
159 1 {
160 2 addh=(add+j*64)>>8;
161 2 addl=add+j*64;
162 2 Start_I2C();
163 2 if(!WriteEepromByet(0xA0))return(0);
164 2 if(!WriteEepromByet(addh))return(0);
165 2 if(!WriteEepromByet(addl))return(0);
166 2 for(i=0;i<64;i++)
167 2 {
168 3 if( (j*64+i) >= D_Long)break;
C51 COMPILER V7.06 EEPROM 06/25/2008 15:44:08 PAGE 4
169 3 if(!WriteEepromByet(date[j*64+i]))return(0);
170 3 if(i%10==0x00)
171 3 {
172 4 sprintf(Str_Buffer,":%3.0f/100 ",(float)((float)(j*64+i)*100/HollDateLong));
173 4 //LCD_DispStr(Str_Buffer,32,5);
174 4 LCD_DispStr(Str_Buffer,40,34);
175 4 disp_chn_str("比值",38,10,12,1);
176 4 Display_Data();
177 4 }
178 3 }
179 2 Stop_I2C();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -