📄 subprogram.lst
字号:
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SUBPROGRAM
OBJECT MODULE PLACED IN .\output\subprogram.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE subprogram.c OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND PRINT(.\outp
-ut\subprogram.lst) OBJECT(.\output\subprogram.obj)
stmt level source
1 /*******************************************************************************************************
2 **--------------文件信息--------------------------------------------------------------------------------
3 **文 件 名: subprogram.c
4 **创 建 人: 刘宝贵
5 **最后修改日期: 2004年4月16日
6 **描 述: 常用函数
7 **
8 **--------------历史版本信息----------------------------------------------------------------------------
9 ** 创建人: 刘宝贵
10 ** 版 本: V1.00
11 ** 日 期: 2004年4月16日
12 ** 描 述: 原始版本
13 **
14 **------------------------------------------------------------------------------------------------------
15 ** 修改人: 刘宝贵
16 ** 版 本: V1.10.5
17 ** 日 期: 2004年4月16日
18 ** 描 述:
19 **------------------------------------------------------------------------------------------------------
20 ********************************************************************************************************/
21 #include "config.h"
22
23
24 /*********************************************************************************************************
25 ** 函数名称: ConfigMe
26 ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
27 ** 输 入: 无
28 ** 输 出: 无
29 ** 全局变量:
30 ** 调用模块: OSSemPend OSSemPost
31 **
32 ** 作 者: 刘宝贵
33 ** 日 期: 2004年5月23日
34 **-------------------------------------------------------------------------------------------------------
35 ** 修改人:
36 ** 日 期:
37 **-------------------------------------------------------------------------------------------------------
38 *********************************************************************************************************/
39 void ConfigMe()//manual config
40 {
41 1 uint8 data i;
42 1 for(i=0;i<255;i++)
43 1 {
44 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
45 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
46 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
47 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
48 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
49 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
50 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
51 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
52 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
53 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
54 2 }
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 2
55 1 ClearDA();
56 1 da(0,0);
57 1 da(0,1);
58 1 P4 |=0xFF;
59 1 P5 |=0x0F;
60 1 P2 |=0xF0;
61 1 P1 |=0xFF;//所有DA_EN脚均为1,使所有398处于采样状态,把所有DA清为0
62 1
63 1 SumWorkStep = EepromReadByte(SumWorkStepIICBase);
64 1 CurrentWorkStep = EepromReadByte(CurrentWorkStepIICBase);
65 1 CurrentWorkStepMax = EepromReadByte(CurrentWorkStepMaxIICBase);
66 1 Second = EepromReadWord(SecondIICBase);
67 1 if(SumWorkStep<13 && CurrentWorkStep<13)
68 1 {
69 2 for(i=1;i<=SumWorkStep;i++)
70 2 {
71 3 WorkStep[i].type = EepromReadByte(WorkStepIICBase + i*9 + 0);
72 3 WorkStep[i].i = EepromReadWord(WorkStepIICBase + i*9 + 1);
73 3 WorkStep[i].limit = EepromReadWord(WorkStepIICBase + i*9 + 3);
74 3 WorkStep[i].t = EepromReadWord(WorkStepIICBase + i*9 + 5);
75 3 WorkStep[i].u = EepromReadWord(WorkStepIICBase + i*9 + 7);
76 3 }
77 2 for(i=0;i<24;i++)
78 2 {
79 3 Cell[i].c = EepromReadWord(Cell_CIICBase+i*4+0);
80 3 Cell[i].c = Cell[i].c<<16;
81 3 Cell[i].c|= EepromReadWord(Cell_CIICBase+i*4+2);
82 3 Cell[i].t = EepromReadWord(Cell_TIICBase + i*2);
83 3 Cell[i].s = EepromReadByte(Cell_SIICBase + i);
84 3
85 3 ReferenceU[i] = EepromReadWord(ReferenceUIICBase + i*2);
86 3 }
87 2 }//if(SumWorkStep<13)
88 1 WorkStepCheck();
89 1 Reset =1;
90 1 CommCounter = 0;
91 1 ALARMLED = 0;//1:on 0:0ff
92 1 }
93 /*********************************************************************************************************
94 ** 函数名称: 给所有DA通道赋值
95 ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
96 ** 输 入: 无
97 ** 输 出: 无
98 ** 全局变量: DAIBuf[] DAUBuf[] WorkStep[] CurrentWorkStep
99 ** 调用模块: OSSemPend OSSemPost EepromReadWord
100 **
101 ** 作 者: 刘宝贵
102 ** 日 期: 2004年5月23日
103 **-------------------------------------------------------------------------------------------------------
104 ** 修改人:
105 ** 日 期:
106 **-------------------------------------------------------------------------------------------------------
107 *********************************************************************************************************/
108 void SetupDA(void)
109 {
110 1 uint8 data i;
111 1 uint16 xdata temp16a,temp16b;
112 1 uint32 xdata temp32;
113 1 for(i=0;i<24;i++)
114 1 {
115 2 temp32 = WorkStep[CurrentWorkStep].i;
116 2 temp32 *= 4559;
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 3
117 2 temp32 /= 2500;
118 2 do
119 2 {
120 3 OSSemPend(IICSem,0);
121 3 temp16a = EepromReadWordA(CellParaIICBase+i*16+6*2);
122 3 temp16b = EepromReadWordA(CellParaIICBase+i*16+6*2);
123 3 OSSemPost(IICSem);
124 3 }while(temp16a != temp16b);
125 2
126 2 if(temp16a>PARAMETER_MAX || temp16a<PARAMETER_MIN)
127 2 {
128 3 OSSemPend(IICSem,0);
129 3 EepromWriteWordA(CellParaIICBase+i*16+6*2,10000);
130 3 OSSemPost(IICSem);
131 3 temp16a = 10000;
132 3 }
133 2
134 2 temp32 *= temp16a;
135 2 temp32 /= 130000;
136 2 DAIBuf[i] = (uint16)temp32;
137 2 if(DAIBuf[i] > 4095)
138 2 {
139 3 DAIBuf[i] = 4095;
140 3 }
141 2 if(WorkStep[CurrentWorkStep].type == CHARGE)
142 2 {
143 3 temp32 = WorkStep[CurrentWorkStep].u;
144 3 temp32*= 4095;
145 3 temp32/= 50000;
146 3 // temp32 = 3440;//4095 * 2100 / 2500;
147 3 do
148 3 {
149 4 OSSemPend(IICSem,0);
150 4 temp16a = EepromReadWordA(CellParaIICBase+i*16+4*2);
151 4 temp16b = EepromReadWordA(CellParaIICBase+i*16+4*2);
152 4 OSSemPost(IICSem);
153 4 }while(temp16a != temp16b);
154 3
155 3 if(temp16a>PARAMETER_MAX || temp16a<PARAMETER_MIN)
156 3 {
157 4 OSSemPend(IICSem,0);
158 4 EepromWriteWordA(CellParaIICBase+i*16+4*2,10000);
159 4 OSSemPost(IICSem);
160 4 temp16a = 10000;
161 4 }
162 3 temp32*=temp16a;
163 3 temp32/=9600;
164 3 DAUBuf[i] = (uint16)temp32;
165 3 if(DAUBuf[i] > 4095 )
166 3 {
167 4 DAUBuf[i] = 4095;
168 4 }
169 3 }//if(WorkStep[CurrentWorkStep].type == CHARGE)
170 2 else if(WorkStep[CurrentWorkStep].type == DISCHARGE)
171 2 {
172 3 DAUBuf[i] = 4095;
173 3 }
174 2 else
175 2 {
176 3 DAUBuf[i] = 0;
177 3 }
178 2 }//for(i=0;i<24;i++)
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 4
179 1 }
180
181
182
183 /*********************************************************************************************************
184 ** 函数名称: da
185 ** 功能描述: 控制C8051F020的DA输出
186 ** 输 入: dadata:要输出的DA值:0~4095
187 ** dachannel:DA输出的通道0,1
188 ** 输 出: 无
189 ** 全局变量: 无
190 ** 调用模块: 无
191 **
192 ** 作 者: 刘宝贵
193 ** 日 期: 2004年4月16日
194 **-------------------------------------------------------------------------------------------------------
195 ** 修改人:
196 ** 日 期:
197 **-------------------------------------------------------------------------------------------------------
198 *********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -