📄 e2promservice.lst
字号:
C51 COMPILER V7.20 E2PROMSERVICE 11/09/2002 21:11:15 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE E2PROMSERVICE
OBJECT MODULE PLACED IN E2PROMService.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE StoreModule\E2PROMService.c BROWSE DEBUG OBJECTEXTEND PRINT(.\E2PROMService
-.lst) OBJECT(E2PROMService.obj)
line level source
1 /*
2 文件名: E2PROMService.c
3 功能: 存储器服务函数实现
4 单位: 浙江工商大学-信电学院
5 创建日期:2004-09-24
6 创建人: Houseivan
7 修改人: Houseivan
8 修改日期:2005-03-11
9 */
10 #include"Includes.h"
11 #if _E2PROM_TASK>0
12
13 #if _SYS_INTERRUPT>0
14 extern uchar data MeasureTimer; //测量用定时器1s=50x20ms
15 extern uchar data SampleTimer; //系统数据刷新定时器1min=60x1s
16 extern uchar data StoreTimer; //存储采样定时器1Hour=60x1min
17 extern bit WorkMode; //根据登陆成功与否确定站点工作的模式
18 #endif
19 extern uchar data TempInteger; //温度值整数和符号字节
20 extern uchar data TempDecimal; //温度值小数位字节
21 extern uchar data HumiInteger; //湿度值整数和符号字节
22 extern uchar data HumiDecimal; //湿度值小数位字节
23 extern uchar data UartRecBuf[]; //串行通讯缓冲
24 extern uchar data ClkLcmBuf[]; //显示时钟存储器操作缓冲
25 extern uchar data CurRecNum; //记录计数器 循环队列形式
26 extern uchar data SlaveAddr; //本地主机地址
27 extern uchar data MasterAddr; //远程主机地址
28 /*------------------------------------------------*/
29 /*
30 名称: Write24C02
31 功能: 对24C02进行写操作
32 注意:
33 */
34 void Write24C02(uchar param)
35 {
36 1 uchar len=0;
37 1 IIC_clk=0;
38 1 for(len=0;len<8;len++)
39 1 { IIC_clk=0;
40 2 IIC_dat=((param & 0x80)==0x80);
41 2 param<<=1;
42 2 IIC_clk=1;
43 2 }
44 1 IIC_clk=0;
45 1 IIC_clk=1;
46 1 while(IIC_dat); //wait ACK
47 1 IIC_clk=0;
48 1 DelayTime(1,3); //_nop_;_nop_;
49 1 }
50 /*------------------------------------------------*/
51 /*
52 名称: Read24C02
53 功能: 对24C02进行读操作
54 注意:
C51 COMPILER V7.20 E2PROMSERVICE 11/09/2002 21:11:15 PAGE 2
55 */
56 uchar Read24C02(void)
57 {
58 1 uchar param=0;
59 1 uchar len=0;
60 1 bit cbit=0;
61 1 IIC_clk=0;
62 1 for(len=0;len<8;len++)
63 1 { IIC_clk=0;
64 2 DelayTime(1,3);
65 2 IIC_clk=1;
66 2 param<<=1;
67 2 cbit=IIC_dat;
68 2 if (cbit)
69 2 param+=1;
70 2 }
71 1 IIC_clk=0;
72 1 DelayTime(1,3);//_nop_;_nop_
73 1 IIC_dat=1; //释放总线
74 1 DelayTime(1,3);//_nop_;_nop_
75 1 IIC_clk=1;
76 1 DelayTime(1,3);//_nop_;_nop_;
77 1 return param;
78 1 }
79 /*------------------------------------------------*/
80 /*
81 名称: StartSign
82 功能: 操作开始标志
83 注意:
84 */
85 void StartSign()
86 {
87 1 IIC_clk=0; //dat:1 1 0 1 1 0 ... 0 1 1
88 1 DelayTime(1,3);
89 1 IIC_dat=1; //clk:0 1 1 0 1 0 ... 0 1 0
90 1 DelayTime(1,3);
91 1 IIC_clk=1;
92 1 DelayTime(1,3);
93 1 IIC_dat=0;
94 1 DelayTime(1,3);
95 1 IIC_clk=0;
96 1 }
97 /*------------------------------------------------*/
98 /*
99 名称: StopSign
100 功能: 操作终止标志
101 注意:
102 */
103 void StopSign()
104 {
105 1 IIC_clk=0;
106 1 DelayTime(1,3);//_nop_;_nop_;
107 1 IIC_dat=0;//generate a stop sign
108 1 DelayTime(1,3);//_nop_;_nop_;
109 1 IIC_clk=1;
110 1 DelayTime(1,3);//_nop_;_nop_;
111 1 IIC_dat=1;
112 1 DelayTime(1,3);//_nop_;_nop_;
113 1 IIC_clk=0;
114 1 }
115 /*------------------------------------------------*/
116 /*
C51 COMPILER V7.20 E2PROMSERVICE 11/09/2002 21:11:15 PAGE 3
117 名称: WriteOneChar
118 功能: 向存储器写入一个字节数据
119 注意:
120 */
121 void WriteOneChar(uchar addr,uchar sdata)
122 {
123 1 StartSign();
124 1 Write24C02(_WR_CMD);
125 1 Write24C02(addr);
126 1 Write24C02(sdata);
127 1 StopSign();
128 1 DelayTime(1,50000);
129 1 }
130 /*------------------------------------------------*/
131 /*
132 名称: ReadOneChar
133 功能: 从24C02读出一个字节的数据
134 注意:
135 */
136 uchar ReadOneChar(uchar addr)
137 {
138 1 uchar sdata=0;
139 1 StartSign();
140 1 Write24C02(_WR_CMD); //模拟写操作 制造假象
141 1 Write24C02(addr);
142 1 StartSign();
143 1 Write24C02(_RD_CMD);
144 1 sdata=Read24C02();
145 1 StopSign();
146 1 DelayTime(1,50000);
147 1 return sdata;
148 1 }
149 /*------------------------------------------------*/
150 /*
151 名称: ReadOneRecord
152 功能: 从存储器中取出一条记录
153 注意:
154 */
155
156 void ReadOneRecord(uchar *Buf,uchar nNum)
157 {
158 1 uchar nCount,nTemp;
159 1
160 1 nTemp= (nNum-1)*_REC_SIZE+16;
161 1 for(nCount=0;nCount<_REC_SIZE;nCount++)
162 1 Buf[nCount]= ReadOneChar(nTemp+nCount);
163 1 }
164 /*------------------------------------------------*/
165 /*
166 名称: WriteOneRecord
167 功能: 从存储器中取出一条记录
168 注意:
169 */
170 void WriteOneRecord(uchar *Buf,uchar nNum)
171 {
172 1 uchar nCount,nTemp;
173 1
174 1 nTemp= (nNum-1)*_REC_SIZE+16;
175 1 for(nCount=0;nCount<_REC_SIZE;nCount++)
176 1 WriteOneChar(nTemp+nCount,Buf[nCount]);
177 1 }
178 /*------------------------------------------------*/
C51 COMPILER V7.20 E2PROMSERVICE 11/09/2002 21:11:15 PAGE 4
179 /*
180 名称: StoreTaskRun
181 功能: 执行数据存储任务
182 注意:
183 */
184 /*
185 注意: 秒 分 时 周 日 月 年
186 0 2 4 6 7 8 9
187 */
188 void StoreTaskRun(void)
189 {
190 1 if(StoreTimer>=_STORE_ALARM)
191 1 {
192 2 #if _DETECT_TASK>0
193 2 SensorTaskRun();
194 2 #endif
195 2 #if _CLOCK_TASK >0
196 2 ReadClock(ClkLcmBuf); //获取当前时钟
197 2 #endif
198 2 CloseScom();
199 2 UartRecBuf[0]=TempInteger;
200 2 UartRecBuf[1]=TempDecimal;
201 2 UartRecBuf[2]=HumiInteger;
202 2 UartRecBuf[3]=HumiDecimal;
203 2 UartRecBuf[4]=ClkLcmBuf[_ID_YEAR];
204 2 UartRecBuf[5]=ClkLcmBuf[_ID_MONTH];
205 2 UartRecBuf[6]=ClkLcmBuf[_ID_DAY];
206 2 UartRecBuf[7]=ClkLcmBuf[_ID_HOUR];
207 2 UartRecBuf[8]=ClkLcmBuf[_ID_MINUTE];
208 2 UartRecBuf[9]=ClkLcmBuf[_ID_SECOND];
209 2 if(WorkMode==_SITE_MODE) //存储到24C02
210 2 {
211 3 WriteOneRecord(UartRecBuf,++CurRecNum);
212 3 CurRecNum=CurRecNum%(_MAX_REC_NUM+1);
213 3 WriteOneChar(_CUR_REC_ADDR,CurRecNum); //同步更新计数器单元
214 3 }
215 2 OpenScom();
216 2 }
217 1 }
218 /*------------------------------------------------*/
219 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 522 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -