📄 ldfxmain.lst
字号:
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 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
53 1 test:
54 1 P3 = 0;
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 2
55 1 P3 = 0xFF;
56 1 goto test;
57 1
58 1
59 1
60 1 ConfigMe();
61 1 TR0 = 1;
62 1 OSStart();
63 1 }
64 /*********************************************************************************************************
65 ** 函数名称: TaskADDA
66 ** 功能描述: AD DA
67 ** 输 入: 无
68 ** 输 出: 无
69 ** 全局变量: AdBuf Cell
70 ** 调用模块: midst OSWait
71 **
72 ** 作 者: 刘宝贵
73 ** 日 期: 2004年4月28日
74 **-------------------------------------------------------------------------------------------------------
75 ** 修改人:
76 ** 日 期:
77 **-------------------------------------------------------------------------------------------------------
78 *********************************************************************************************************/
79 void TaskAD(void)
80 {
81 1 uint8 data i,j;
82 1 uint16 xdata u_ad_para[24],temp16a,temp16b;
83 1 uint16 xdata i_ad_para[24];
84 1 uint16 xdata ADIBuf[240]; //AD采样滤波所用的缓冲区
85 1 uint16 xdata ADUBuf[240]; //AD采样滤波所用的缓冲区
86 1 uint8 code adchannel[48]=
87 1 {
88 1 0x70,0x50,0x30,0x10,0x71,0x51,0x31,0x11,0x72,0x52,0x32,0x12,
89 1 // 0x73,0x53,0x33,0x13,0x74,0x54,0x34,0x14,0x75,0x55,0x35,0x15,
90 1 0x15,0x35,0x55,0x75,0x14,0x34,0x54,0x74,0x13,0x33,0x53,0x73,
91 1 0x60,0x40,0x20,0x00,0x61,0x41,0x21,0x01,0x62,0x42,0x22,0x02,
92 1 // 0x63,0x43,0x23,0x03,0x64,0x44,0x24,0x04,0x65,0x45,0x25,0x05,
93 1 0x05,0x25,0x45,0x65,0x04,0x24,0x44,0x64,0x03,0x23,0x43,0x63,
94 1 };//每一路模拟采样对应通道控制字:控制CD4051的A,B,C(高四位)和C8051F020片内的AD通道选择(低四位)
95 1 //adchannel[0~~~23]对应U0~~U23 adchannel[24~~~48]对应I0~~I23
96 1 for(i=0;i<240;i++)
97 1 {
98 2 ADIBuf[i]=0;
99 2 ADUBuf[i]=0;
100 2 }
101 1 AdParaChanged = 1;
102 1 i = 0;
103 1 j = 0;
104 1 while (1)
105 1 {
106 2 //以下是对AD通道的处理
107 2 i++;
108 2 if(i == 48)
109 2 {
110 3 if(AdParaChanged)
111 3 {
112 4 if(OSSemPend(IICSem,0)==OS_SEM_OK)
113 4 {
114 5 for(i=0;i<24;i++)
115 5 {
116 6 do
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 3
117 6 {
118 7 temp16a = EepromReadWord(CellParaIICBase+i*16+0*2);
119 7 temp16b = EepromReadWord(CellParaIICBase+i*16+0*2);
120 7 }while(temp16a !=temp16b);
121 6 u_ad_para[i] = temp16a;
122 6 if(u_ad_para[i] > PARAMETER_MAX || u_ad_para[i] < PARAMETER_MIN)
123 6 {
124 7 u_ad_para[i] = 10000;
125 7 EepromWriteWord(CellParaIICBase+i*16+0*2,10000);
126 7 }
127 6
128 6 do
129 6 {
130 7 temp16a = EepromReadWord(CellParaIICBase+i*16+2*2);
131 7 temp16b = EepromReadWord(CellParaIICBase+i*16+2*2);
132 7 }while(temp16a !=temp16b);
133 6 i_ad_para[i] = temp16a;
134 6 if(i_ad_para[i] > PARAMETER_MAX || i_ad_para[i] < PARAMETER_MIN)
135 6 {
136 7 i_ad_para[i] = 10000;
137 7 EepromWriteWord(CellParaIICBase+i*16+2*2,10000);
138 7 }
139 6 }//for(i=0;i<24;i++)
140 5 OSSemPost(IICSem);
141 5 }//if(OSSemPend(IICSem,0)==OS_SEM_OK)
142 4 AdParaChanged = 0;
143 4 }//if(AdParaChanged)
144 3 j++;
145 3 j%=9;
146 3 for(i=0;i<24;i++)
147 3 {
148 4 uint32 xdata temp32;
149 4 temp32 = midst(&ADUBuf[i*9],9);
150 4 temp32 *= 50000;
151 4 temp32 /= 12750;//4095*3
152 4 temp32 *= u_ad_para[i];
153 4 temp32 /=10000;
154 4 OS_ENTER_CRITICAL();
155 4 Cell[i].u = (uint16)temp32;
156 4 OS_EXIT_CRITICAL();
157 4
158 4 temp32 = midst(&ADIBuf[i*9],9);
159 4 temp32 *=30380;
160 4 temp32 /=12285;//4095*3
161 4 temp32 *=i_ad_para[i];
162 4 temp32 /=10000;
163 4 OS_ENTER_CRITICAL();
164 4 Cell[i].i = (uint16)(temp32);
165 4 OS_EXIT_CRITICAL();
166 4 }
167 3 i=0;
168 3 }
169 2 AD_CS=(bit)(adchannel[i]<<1 & 0x80);
170 2 AD_BS=(bit)(adchannel[i]<<2 & 0x80);
171 2 AD_AS=(bit)(adchannel[i]<<3 & 0x80);
172 2 AMX0SL=adchannel[i]&0x0f;//channel select
173 2 OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
174 2 AD0INT=0;
175 2 AD0BUSY=1;
176 2 do
177 2 {
178 3 OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 4
179 3 }while(AD0INT==0);
180 2 if(i<24)
181 2 {
182 3
183 3 uint32 xdata temp32;
184 3 ADUBuf[i*9+j]=ADC0H*256+ADC0L;
185 3 temp32 = ADUBuf[i*9+j];
186 3 temp32 *= 5000;
187 3 temp32 /= 455;
188 3 temp32 *= u_ad_para[i];
189 3 temp32 /=9310;
190 3 OS_ENTER_CRITICAL();
191 3 CellCheckU[i] = (uint16)temp32;
192 3 OS_EXIT_CRITICAL();
193 3 }
194 2 else
195 2 ADIBuf[(i-24)*9+j]=ADC0H*256+ADC0L;
196 2 }
197 1 }
198 /*********************************************************************************************************
199 ** 函数名称: TaskWorkStep
200 ** 功能描述: 工步处理
201 ** 输 入: 无
202 ** 输 出: 无
203 ** 全局变量:
204 ** 调用模块: ClearDA
205 **
206 ** 作 者: 刘宝贵
207 ** 日 期: 2004年4月28日
208 **-------------------------------------------------------------------------------------------------------
209 ** 修改人:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -