📄 ldfxmain.lst
字号:
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LDFXMAIN
OBJECT MODULE PLACED IN .\output\ldfxmain.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ldfxmain.C OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND PRINT(.\output
-\ldfxmain.lst) OBJECT(.\output\ldfxmain.obj)
stmt level source
1 /*********************************************************************************************************
2 **锂电分选系统 软件设计:刘宝贵,硬件设计:刘宝贵 调试:刘宝贵
3 **本系统使用编译器为 keil c51.exe V7.06
4 **本系统使用汇编器为 keil A51.exe V7.07
5 **本系统使用联接器为 keil BL51.exe V5.03
6 **本系统使用Small RTOS51 V1.12.0
7 **如果等程序有问题或者是Bug请与作者联系
8 **与作者联系方法:邮箱:baoguiliu@163.com,baoguiliu@sohu.com 电话:0451-86649609
9 **
10 **
11 **VER1.0
12 **--------------文件信息--------------------------------------------------------------------------------
13 **文 件 名: ldfxmain.c
14 **创 建 人: 刘宝贵
15 **最后修改日期:
16 **描 述: ldfxmain.c源代码。
17 **
18 **--------------历史版本信息----------------------------------------------------------------------------
19 ** 修改人:
20 ** 版 本:
21 ** 日 期:
22 ** 描 述:
23 **
24 **--------------当前版本修订------------------------------------------------------------------------------
25 ** 修改人:
26 ** 日 期:
27 ** 描 述:
28 **
29 **------------------------------------------------------------------------------------------------------
30 ********************************************************************************************************/
31
32 #include "config.h"
33 void config();
34 /*********************************************************************************************************
35 ** 函数名称: main
36 ** 功能描述: 主函数
37 ** 输 入: 无
38 ** 输 出: 无
39 ** 全局变量:
40 ** 调用模块: OSStart() config()
41 **
42 ** 作 者: 刘宝贵
43 ** 日 期: 2004年5月23日
44 **-------------------------------------------------------------------------------------------------------
45 ** 修改人:
46 ** 日 期:
47 **-------------------------------------------------------------------------------------------------------
48 *********************************************************************************************************/
49 void main(void)
50 {
51 1 config();//auto config
52 1 ConfigMe();
53 1 TR0 = 1;
54 1 OSStart();
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 2
55 1 }
56 /*********************************************************************************************************
57 ** 函数名称: TaskADDA
58 ** 功能描述: AD DA
59 ** 输 入: 无
60 ** 输 出: 无
61 ** 全局变量: AdBuf Cell
62 ** 调用模块: midst OSWait
63 **
64 ** 作 者: 刘宝贵
65 ** 日 期: 2004年4月28日
66 **-------------------------------------------------------------------------------------------------------
67 ** 修改人:
68 ** 日 期:
69 **-------------------------------------------------------------------------------------------------------
70 *********************************************************************************************************/
71 void TaskAD(void)
72 {
73 1 uint8 data i,j;
74 1 uint16 xdata u_ad_para[24],temp16a,temp16b;
75 1 uint16 xdata i_ad_para[24];
76 1 uint16 xdata ADIBuf[240]; //AD采样滤波所用的缓冲区
77 1 uint16 xdata ADUBuf[240]; //AD采样滤波所用的缓冲区
78 1 uint8 code adchannel[48]=
79 1 {
80 1 0x70,0x50,0x30,0x10,0x71,0x51,0x31,0x11,0x72,0x52,0x32,0x12,
81 1 // 0x73,0x53,0x33,0x13,0x74,0x54,0x34,0x14,0x75,0x55,0x35,0x15,
82 1 0x15,0x35,0x55,0x75,0x14,0x34,0x54,0x74,0x13,0x33,0x53,0x73,
83 1 0x60,0x40,0x20,0x00,0x61,0x41,0x21,0x01,0x62,0x42,0x22,0x02,
84 1 // 0x63,0x43,0x23,0x03,0x64,0x44,0x24,0x04,0x65,0x45,0x25,0x05,
85 1 0x05,0x25,0x45,0x65,0x04,0x24,0x44,0x64,0x03,0x23,0x43,0x63,
86 1 };//每一路模拟采样对应通道控制字:控制CD4051的A,B,C(高四位)和C8051F020片内的AD通道选择(低四位)
87 1 //adchannel[0~~~23]对应U0~~U23 adchannel[24~~~48]对应I0~~I23
88 1 for(i=0;i<240;i++)
89 1 {
90 2 ADIBuf[i]=0;
91 2 ADUBuf[i]=0;
92 2 }
93 1 AdParaChanged = 1;
94 1 i = 0;
95 1 j = 0;
96 1 while (1)
97 1 {
98 2 //以下是对AD通道的处理
99 2 i++;
100 2 if(i == 48)
101 2 {
102 3 if(AdParaChanged)
103 3 {
104 4 if(OSSemPend(IICSem,0)==OS_SEM_OK)
105 4 {
106 5 for(i=0;i<24;i++)
107 5 {
108 6 do
109 6 {
110 7 temp16a = EepromReadWordA(CellParaIICBase+i*16+0*2);
111 7 temp16b = EepromReadWordA(CellParaIICBase+i*16+0*2);
112 7 }while(temp16a !=temp16b);
113 6 u_ad_para[i] = temp16a;
114 6 if(u_ad_para[i] > PARAMETER_MAX || u_ad_para[i] < PARAMETER_MIN)
115 6 {
116 7 u_ad_para[i] = 10000;
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 3
117 7 EepromWriteWordA(CellParaIICBase+i*16+0*2,10000);
118 7 }
119 6
120 6 do
121 6 {
122 7 temp16a = EepromReadWordA(CellParaIICBase+i*16+2*2);
123 7 temp16b = EepromReadWordA(CellParaIICBase+i*16+2*2);
124 7 }while(temp16a !=temp16b);
125 6 i_ad_para[i] = temp16a;
126 6 if(i_ad_para[i] > PARAMETER_MAX || i_ad_para[i] < PARAMETER_MIN)
127 6 {
128 7 i_ad_para[i] = 10000;
129 7 EepromWriteWordA(CellParaIICBase+i*16+2*2,10000);
130 7 }
131 6 }//for(i=0;i<24;i++)
132 5 OSSemPost(IICSem);
133 5 }//if(OSSemPend(IICSem,0)==OS_SEM_OK)
134 4 AdParaChanged = 0;
135 4 }//if(AdParaChanged)
136 3 j++;
137 3 j%=9;
138 3 for(i=0;i<24;i++)
139 3 {
140 4 uint32 xdata temp32;
141 4 temp32 = midst(&ADUBuf[i*9],9);
142 4 temp32 *= 50000;
143 4 temp32 /= 12750;//4095*3
144 4 temp32 *= u_ad_para[i];
145 4 temp32 /=10000;
146 4 OS_ENTER_CRITICAL();
147 4 Cell[i].u = (uint16)temp32;
148 4 OS_EXIT_CRITICAL();
149 4
150 4 temp32 = midst(&ADIBuf[i*9],9);
151 4 temp32 *=30380;
152 4 temp32 /=12285;//4095*3
153 4 temp32 *=i_ad_para[i];
154 4 temp32 /=10000;
155 4 OS_ENTER_CRITICAL();
156 4 Cell[i].i = (uint16)(temp32);
157 4 OS_EXIT_CRITICAL();
158 4 }
159 3 i=0;
160 3 }
161 2 AD_CS=(bit)(adchannel[i]<<1 & 0x80);
162 2 AD_BS=(bit)(adchannel[i]<<2 & 0x80);
163 2 AD_AS=(bit)(adchannel[i]<<3 & 0x80);
164 2 AMX0SL=adchannel[i]&0x0f;//channel select
165 2 OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
166 2 AD0INT=0;
167 2 AD0BUSY=1;
168 2 do
169 2 {
170 3 OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
171 3 }while(AD0INT==0);
172 2 if(i<24)
173 2 {
174 3
175 3 uint32 xdata temp32;
176 3 ADUBuf[i*9+j]=ADC0H*256+ADC0L;
177 3 temp32 = ADUBuf[i*9+j];
178 3 temp32 *= 5000;
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 4
179 3 temp32 /= 455;
180 3 temp32 *= u_ad_para[i];
181 3 temp32 /=9310;
182 3 OS_ENTER_CRITICAL();
183 3 CellCheckU[i] = (uint16)temp32;
184 3 OS_EXIT_CRITICAL();
185 3 }
186 2 else
187 2 ADIBuf[(i-24)*9+j]=ADC0H*256+ADC0L;
188 2 }
189 1 }
190 /*********************************************************************************************************
191 ** 函数名称: TaskWorkStep
192 ** 功能描述: 工步处理
193 ** 输 入: 无
194 ** 输 出: 无
195 ** 全局变量:
196 ** 调用模块: ClearDA
197 **
198 ** 作 者: 刘宝贵
199 ** 日 期: 2004年4月28日
200 **-------------------------------------------------------------------------------------------------------
201 ** 修改人:
202 ** 日 期:
203 **-------------------------------------------------------------------------------------------------------
204 *********************************************************************************************************/
205 void TaskWorkStep(void)
206 {
207 1 uint8 i;
208 1 OSSemCreate(IICSem,1); //实现IIC总线的互斥
209 1 OSSemCreate(StartWorkStepSem,0); //工步执行报文下发与工步执行同步
210 1 OSSemCreate(StopWorkStepSem, 0); //工步停止报文下发与工步停止同步
211 1 while (1)
212 1 {
213 2 TaskWorkStepBegin:
214 2 if(CurrentWorkStep == 0)//CurrentWorkStep==0表示停止
215 2 {
216 3 OSSemPend(StartWorkStepSem,0);
217 3 }
218 2 for(;CurrentWorkStep <= SumWorkStep; CurrentWorkStep++)
219 2 {
220 3 switch(WorkStep[CurrentWorkStep].type)
221 3 {
222 4 case 0://停止
223 4 {
224 5 da(0,0);
225 5 da(0,1);
226 5 P4 |=0xFF;
227 5 P5 |=0x0F;
228 5 P2 |=0xF0;
229 5 P1 |=0xFF;//所有DA_EN脚均为1,使所有398处于采样状态,把所有DA清为0
230 5 JDQ = 1;
231 5 CurrentWorkStep = 0;
232 5 WorkStepInit(STOP);
233 5 goto TaskWorkStepBegin;
234 5 }break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -