📄 rmeter.lst
字号:
192 5 SendChar(FLA_set[ci].ucCurPluseH);
193 5 SendChar(FLApluseL[ci][FLA_set[ci].unCurPluseLoff]);
194 5 */
195 5
196 5 if(FLApluseL[ci][FLA_set[ci].unCurPluseLoff] != uctmp /* *pucData */) //该单元可能坏
197 5 {
198 6 WriteFlash((uint)&(FLApluseL[ci]+FLA_set[ci].unCurPluseLoff),*pucData); //重试一遍
199 6 SendChar('\x11');
200 6 SendChar('\x11');
201 6 SendChar('\x11');
202 6
203 6 if(FLApluseL[ci][FLA_set[ci].unCurPluseLoff] != *pucData) //该单元可能坏
204 6 {
205 7 WriteFlash((uint)&(FLApluseL[ci]+FLA_set[ci].unCurPluseLoff+1),*pucData); //重试一遍
206 7
207 7 untmp=FLA_set[ci].unCurPluseLoff+1;
208 7 pucData=(uchar *)&untmp;
209 7 pucAddr=(uchar *)FLA_set[ci].unCurPluseLoff;
210 7 WriteFlash((uint)pucAddr,*pucData);
211 7 WriteFlash((uint)(pucAddr+1),*(pucData+1));
212 7 SendChar('\x22');
213 7 SendChar('\x22');
214 7 SendChar('\x22');
215 7 }
216 6 } //if 换单元
217 5
218 5 } //if Write
219 4 } //if Pluse
220 3 } //for 通道
221 2
222 2
223 2
224 2 if(ucOffset >= PACK_SIZE)
225 2 {
226 3 punTail=(uint *)(ucRbuf+ucOffset-2);
227 3 if(*punTail==PACK_TAIL)
228 3 {
229 4
230 4 ucPackOff=ucOffset-PACK_SIZE+2;
231 4 switch(*(ucRbuf+ucPackOff))
232 4 {
233 5 case CMD_SET_SN :
234 5 break;
235 5 case CMD_READ :
236 5 break;
237 5 case CMD_READ_R :
238 5 break;
239 5 case CMD_SET_BASE:
240 5 break;
C51 COMPILER V7.00 RMETER 01/06/2007 20:27:22 PAGE 5
241 5 case CMD_SET_PLU :
242 5 break;
243 5 case CMD_SET_TYPE:
244 5 break;
245 5 }
246 4 }
247 3 }
248 2
249 2 /*
250 2 if(ucOffset != unPluseCnt[0])
251 2 {
252 2 unPluseCnt[0]=ucOffset;
253 2 SendChar(ucOffset);
254 2 // WriteFlash((uint)&FLA_set.unCurPluse,*(pucPluseCnt+1));
255 2 }
256 2 */
257 2 if(ucOffset == BUF_SIZE) ucOffset=0; //清除缓冲区
258 2
259 2 // if(P1^6 == 0) GotoIsp(); //暂时使用,第三脚接地
260 2 }
261 1 }
262
263
264
265 //--------------------------------------------------------
266 //功能:100us级延时
267 //出口参数:i,延时i x 100us
268 //--------------------------------------------------------
269 void delay100us(uchar i) //在7.373MHz时,精确延时100us,误差0.5us
270 {
271 1 uchar j;
272 1 while(i>0)
273 1 {
274 2 for(j=0;j<118;j++);
275 2 i--;
276 2 }
277 1 }
278
279
280
281 /*
282 7.3728MHz
283 BRGR1:BRGR0 5FF0H 17F0H 0BF0H 05F0H 02F0H 0170H 00F0H 00B0H 0070H 0030H
284 实际波特率 300 1200 2400 4800 9600 19201 28801 38401 57602 115203
285 */
286 void UART_Init()
287 {
288 1 P1M1=0x00;
289 1 P1M2=0x00; //端口初始化
290 1
291 1 SCON=0x50; //使能接收 选择串口模式 1
292 1 SSTAT=0xE0; //选择独立的 Tx/Rx 中断
293 1 BRGR0=0xF0; //1200 baud @ 7.373MHz
294 1 BRGR1=0x17;
295 1 // BRGR0=0xF0; //9600 baud @ 7.373MHz
296 1 // BRGR1=0x02;
297 1 BRGCON =0x03; //使能 BRG
298 1
299 1 ESR=1; //ESR=Enable Serial Recieve
300 1 // EST=1; //EST=Enable Serial Transmit
301 1 EA=1; //使能中断
302 1 }
C51 COMPILER V7.00 RMETER 01/06/2007 20:27:22 PAGE 6
303
304
305
306
307 void Rcv_ISR() interrupt 4
308 { //当接收完一个字节 RI 置 1 进入 Recieve 中断
309 1 EA=0;
310 1
311 1 if(!RI) return;
312 1 ucRbuf[ucOffset]=SBUF; //保存所读取的数据
313 1 RI=0; //RI 清 0 以等待下次发送
314 1
315 1 EA=1;
316 1
317 1 SendChar(ucRbuf[ucOffset]);//for test only
318 1
319 1 ucOffset++;
320 1 }
321
322 void SendChar(unsigned char ucData)
323 {
324 1 EA=0;
325 1 SBUF=ucData; //发送数据
326 1 while(!TI); //当 TI 为 1 时 发送完毕
327 1 TI=0; //TI 清 0 准备下一次发送
328 1 EA=1;
329 1 }
330
331 /***************************************************************************
332 * 名称: T1_Init()
333 * 功能: 定时器 1 初始化,使 T1(P0.7)输出 38KHz,50%占空比的方波,
334 * 作为红外线的载波 当使用 6MHz 晶振时
335 * 红外线载频 CCLK/(4 (256 定时器重载值)
336 * 定时器重装值=256-CCLK/(4*红外线载频)=256-7372800/(4*38000)=0CFH
337 ****************************************************************************/
338 void T1_Init()
339 {
340 1 TH1=0xcf; //定时器 1 重载值
341 1 TAMOD=0;
342 1 TMOD=0x20; //定时器 1 工作于模式 2 自动重载
343 1 AUXR1 |= 0x20; //置位 ENT1,当 T1 溢出时触发 P0.7 翻转
344 1 TR1=1; //启动定时器
345 1 }
346
347
348 /*
349 掉电检测中断
350 */
351 /*
352 void pdown() interrupt 5
353 {
354 PCONA=0xaf; //关闭除E PROM外其它所有片内外设的电源
355
356 WriteFlash((uint)&FLA_set.unCurPluse,*(pucPluseCnt+1));
357
358 while(1); //??
359 }
360 */
361
362 bit WriteFlash(unsigned int unFlashAddr, unsigned char ucData)
363 {
364 1
C51 COMPILER V7.00 RMETER 01/06/2007 20:27:22 PAGE 7
365 1
366 1 FMCON = LOAD; // 装载命令,清除页寄存器
367 1 FMADRH = (uchar)(unFlashAddr >> 8); //
368 1 FMADRL = (uchar)(unFlashAddr & 0xff); // 页地址写入地址寄存器
369 1 FMDATA = ucData ;
370 1
371 1 FMCON = EP; // 擦除&编程页命令
372 1 // Fm_stat = FMCON; // 读结果状态
373 1
374 1 if ( ( FMCON & 0xF ) !=0 ) return 1 ;
375 1 else return 0 ;
376 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1467 ----
CONSTANT SIZE = 888 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 43 14
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 + -