📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDIR(C:\DOCUMENTS AND
- SETTINGS\ADMINISTRATOR.LENOVO-80B42371\桌面\VANGO\程序\var\) DEBUG OBJECTEXTEND
stmt level source
1 /*************************************************************************************
2
3 文件类型:
4 文件作用:
5 修改权限:
6 文件相关:
7
8 创 建 人:GeminiKQ
9 创建日期:2006.12.20
10 当前版本:Ver0.1
11
12 版本信息:Ver0.1 GeminiKQ
13
14 **************************************************************************************/
15 #define MAIN
16
17 #include "Tiger.h"
*** WARNING C318 IN LINE 17 OF main.c: can't open file 'Tiger.h'
18 #include "typemeter.h"
*** WARNING C318 IN LINE 18 OF main.c: can't open file 'typemeter.h'
19
20
21 //==================================================================
22 //系统默认较表参数
23 //==================================================================
24 unsigned long code meterprm_table[]=
25 { 0x00000000, // 有功门限高
26 0xF2ED9618, // 有功门限低
27 0x00000000, // 有效值门限高
28 0x00654FD6, // 有效值门限低
29 0xffffffff, // 启动门限值高
30 0xffffffff, // 启动门限值低
31 0x010CA23A, // IA有效值比差
32 0x01609618, // IB有效值比差
33 0x00000000, // LA有效值比差
34 0x00000000, // LB有效值比差
35 0x00000000, // M有效值比差
36 0x00000000, // M有效值比差
37 0x00000000, // M有效值比差
38 0xFCCD0213, // PA比差
39 0xF37D0381, // PB比差
40 0xF4DB1D71 // 电压比差
41 };
42
43 //=========================================================================
44 //函数功能:通过入口ID号恢复各参数项 (数据存放在EEPROM中)
45 //入口参数:ID号
46 //返回参数:1:成功,0:失败 数据放在wr_buff中
47 //=========================================================================
48 unsigned char recover_item(unsigned int chk_id)
49 { unsigned char i,j,num,value,datanum;
50 1 value=0;
51 1 num=addr_from_coreID(1,chk_id); // 数据个数
*** WARNING C206 IN LINE 51 OF MAIN.C: 'addr_from_coreID': missing function-prototype
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 2
*** ERROR C267 IN LINE 51 OF MAIN.C: 'addr_from_coreID': requires ANSI-style prototype
52 1 for(i=0;i<num;i++)
53 1 { if((*ID_coretalbpoint[i]).stortype==EEPROM) // EEP中
*** ERROR C202 IN LINE 53 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
54 2 { data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr; // 取地址
*** ERROR C202 IN LINE 54 OF MAIN.C: 'data_addr': undefined identifier
55 3 datanum=(*ID_coretalbpoint[i]).datalong; // 要读的数据个数
*** ERROR C202 IN LINE 55 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
56 3 Read_data(EEPROM,datanum); // 读函数
*** ERROR C202 IN LINE 56 OF MAIN.C: 'EEPROM': undefined identifier
57 3 wr_buff[datanum]=0; // 读出的数据放在wr_buff[0]--wr_buff[datanum-1]中
*** ERROR C202 IN LINE 57 OF MAIN.C: 'wr_buff': undefined identifier
58 3 for(j=0;j<datanum-1;j++) //校验和判断
59 3 { wr_buff[datanum]+=wr_buff[j];
*** ERROR C202 IN LINE 59 OF MAIN.C: 'wr_buff': undefined identifier
60 4 }
61 3 if(wr_buff[datanum]==(wr_buff[datanum-1]-0x33)) // 如果校验和正确
*** ERROR C202 IN LINE 61 OF MAIN.C: 'wr_buff': undefined identifier
62 3 { if((*ID_coretalbpoint[i]).datatype==BCD)
*** ERROR C202 IN LINE 62 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
63 4 { if(check_X_bcd((datanum-1),wr_buff)==1) //BCD嘛校验
64 5 { value=1; //检测到合法数据,放在wr_buff中
65 6 break;
66 6 }
67 5 }
68 4 else
69 4 { value=1; //检测到合法数据,放在wr_buff中
70 5 break;
71 5 }
72 4 }
73 3 }
74 2 }
75 1
76 1 return value;
77 1 }
78
79 //================================================================
80 // 函数功能:从EEPROM中恢复meterprm_table[]表参数
81 // 如果恢复成功则返回,不成功,则加载meterprm_table[]表
82 //================================================================
83 void Recover_meter(void)
84 { uint8 i;
85 1 Word32 read_buff;
86 1 for(i=0;i<16;i++)
87 1 { if(recover_item(0x8500+i)==1) // 恢复系统参数正确(见meterprm_table[]表)
88 2 { read_buff.lword=ReadMeterPara(i+18);
89 3 if(compare_x_byte(&read_buff.byte[0],wr_buff,4)==1) //与寄存器中参数比较,不同则写参数
90 3 { read_buff.lword=Longdate_from_xbcd(wr_buff,4);
91 4 SetMeterCfg(read_buff.lword,(18+i));
92 4 }
93 3 }
94 2 else //恢复参数失败
95 2 { read_buff.lword=ReadMeterPara(i+18);
96 3 if(read_buff.lword!=meterprm_table[i]) //与寄存器中参数比较,不同则写参数
97 3 { read_buff.lword=meterprm_table[i];
98 4 SetMeterCfg(read_buff.lword,(18+i));
99 4 }
100 3 }
101 2 }
102 1 }
103
104
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 3
105
106 //==========================================
107 // 函数功能:禁止所有IO口的输入输出
108 //==========================================
109 void port_init(void)
110 {
111 1 // P1OE &= ~BIT0;
112 1 // P10FS = 0x01; //select second pluss output
113 1
114 1 P0OE = 0;
115 1 P1OE = 0;
116 1 P2OE = 0;
117 1 P3OE = 0xff;
118 1 P4OE = 0xff;
119 1 P5OE = 0xff;
120 1 P6OE = 0xff;
121 1
122 1 P0IE = 0;
123 1 P1IE = 0;
124 1 P2IE = 0;
125 1 P3IE = 0;
126 1 P4IE = 0;
127 1 P5IE = 0;
128 1 P6IE = 0;
129 1 }
130
131
132
133 //=================================================
134 // 函数功能: 初始化Timer0
135 //
136 //=================================================
137 void Init_Timer0(void)
138 {
139 1 TMOD = 0x01; // 工作在模式1
140 1 CKCON|=0x08; // clk/4
141 1 TL0 = 0xff; // 10ms
142 1 TH0 = 0xdf;
143 1 TR0 = 1; // 开定时器0
144 1 SetInterrupt(1); // 打开中断
145 1
146 1 }
147
148
149 //===========================================================
150 // 函数功能:初始化模拟部分
151 //
152 //===========================================================
153 void Inti_anlmode(void)
154 { SetADC(1,8); //A通道电流,采用8倍增益
155 1 SetADC(2,8); //B通道电流,采用8倍增益
156 1 SetADC(3,8); //电压通道,采用8倍增益
157 1 SetMChannel(0,0); //关m通道
158 1 SetFrq(1); //60hz
159 1 }
160
161 //===============================================
162 // 函数功能:初始化计量系统
163 //
164 //===============================================
165 void Inti_metermode(void)
166 {
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 4
167 1 Inti_anlmode(); // AD增益
168 1 SetMeterFunc(0x80); // 关闭所有计量通道,关CF输出,开启启动潜动功能
169 1 SetMeterCfg(0xffffffff,22); //潜动门限高位
170 1 SetMeterCfg(0xffffffff,23); //潜动门限低位
171 1 InitMeter(); //初始化计量电路
172 1 Recover_meter(); //恢复校表参数
173 1 SetMeterFunc(0x8f); //开启电压和A通道计量,A通道输出,能量输出模式
174 1 count_opencftime=3; //CF延时3妙打开
175 1 }
176
177 //==========================================
178 // 函数功能:系统初始化,
179 // 备注:初始化模拟部分和数字部分寄存器
180 //===========================================
181 void Init_System(void)
182 { battest=0; // 清电池欠压标志
183 1 // SetPLL(1);
184 1 port_init(); // 初始化io口
185 1 SetXRam(0); // 开启对XRAM的写保护
186 1 // Init_eeprom(); // 初始化EEPROM 上电误操作
187 1 Init_Timer0();
188 1 Inti_metermode();
189 1 OpenPDT(); // 打开调电检测功能
190 1 }
191
192
193 //======================================================
194 // 函数功能:复位计量模块
195 //
196 //======================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -