📄 main.lst
字号:
155 1 //P1.5输入 :RST(不可配置,仅为输入模式)
156 1 //P1.4输入 :PULSE(电能脉冲)
157 1 //P1.3开漏 :SDA
158 1 //P1.2开漏 :SCL
159 1 //P1.1输入 :RXD
160 1 //P1.0开漏 :TXD
161 1
162 1 P2M1=0x00; //00000000
163 1 P2M2=0xFF; //11111111
164 1 //P2.7推挽输出
165 1 //P2.6推挽输出
166 1 //P2.5推挽输出
167 1 //P2.4推挽输出
168 1 //P2.3推挽输出
169 1 //P2.2推挽输出
170 1 //P2.1推挽输出
171 1 //P2.0推挽输出
172 1
173 1 P3M1=0x03; //00000011
174 1 P3M2=0x00; //00000000
175 1 //P3.1输入 :PROG 编程开关
176 1 //P3.0输入 :REVP 电能方向
177 1
178 1
179 1 DIVM = 0x00; //振荡器初始化
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 4
180 1 TRIM &= ~0x40; //P3.0无时钟输出
181 1 //TRIM |= 0x40; //P3.0 时钟输出
182 1 PT0AD = 0x0A; //P0.1(CIN2B)、P0.3(CIN1B)模拟输入使能
183 1
184 1 DelayNms(200); //上电延时200mS
185 1
186 1 //看门狗初始化(2S)
187 1 WDL = 0xC2;
188 1 //EA = 0;
189 1 WDCON = 0xE5;
190 1 WFEED1 = 0xA5;
191 1 WFEED2 = 0x5A;
192 1 //EA = 1;
193 1 //EA = 0;
194 1
195 1
196 1 //======================================================
197 1 //外部中断1初始化,电能脉冲输入
198 1 //======================================================
199 1 IT1 = 1; //外部中断1为下降沿触发
200 1 IP0H |= 0x04; //设置外部中断1的中断优先级 2级
201 1 IP0 &=~0x04;
202 1 EX1 = 1; //外部中断1使能
203 1
204 1 //======================================================
205 1 //电源检测、电池检测配置
206 1 //======================================================
207 1 CMP1 = 0x38; //CE1,CP1,CN1,OE1 = 1110
208 1 //正向输入为CIN1B(P0.3)
209 1 //选择内部参考电压
210 1
211 1 CMP2 = 0x38; //CE2,CP2,CN2,OE2 = 1110
212 1 //正向输入为CIN2B(P0.1)
213 1 //选择内部参考电压
214 1
215 1 i = 0x18; //延时13uS
216 1 while(--i);
217 1
218 1 CMP1 &= 0xFE; //清楚比较器1的中断标志
219 1 CMP2 &= 0xFE; //清楚比较器2的中断标志
220 1
221 1 IP1H |= 0x04; //设置中断优先级 2级
222 1 IP1 &=~0x04;
223 1
224 1 EC = 1;
225 1
226 1
227 1 //======================================================
228 1 //初始化Timer1定时器,使其P0.7发生翻转,输出38K的调制频率
229 1 //N=PCLK/(2*38KHz)=3.686400/76000=0x30,定时值=0x100-0x30=0xD0
230 1 //======================================================
231 1 //HW38K = 1; //P0.7置高
232 1
233 1 TMOD |= 0x21; //设置Timer0,选择定时器模式1--通讯超时检测
234 1 //设置Timer1,选择定时器模式2--红外载波
235 1
236 1 TAMOD = 0x00; //T0M2=0,T1M1=0,T1M0=1
237 1 //T1M2=0,T1M1=1,T1M0=0
238 1
239 1 TH0 = 0x53; //Timer0定时12mS初值
240 1 TL0 = 0x33;
241 1
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 5
242 1 ET0 = 1;
243 1
244 1 IP0H &=~0x04; //设置Timer0的中断优先级别为1级
245 1 IP0 |= 0x04;
246 1
247 1 TH1 = 0xD0; //Timer1设置自动重装值
248 1 TL1 = 0xD0;
249 1
250 1 AUXR1|= 0x20; //ENT1=1,Timer1溢出使P0.7发生翻转
251 1 //AUXR1 |= 0x80; //选择时钟电路低功耗模式
252 1
253 1
254 1 //======================================================
255 1 //1000mS定时器初始化
256 1 //======================================================
257 1 RTCH = 0xE1; //设置自动重装值
258 1 RTCL = 0x00;
259 1
260 1 RTCCON = 0x62; //选择RTC时钟源,RTC中断使能
261 1
262 1 IP0H &=~0x40; //中断优先级为1级
263 1 IP0 |=~0x40;
264 1
265 1 EWDRT = 1; //中断使能
266 1
267 1 RTCCON |= 0x01; //RTC运行使能
268 1
269 1
270 1 //======================================================
271 1 //UART_init
272 1 //使用UART的模式3,波特率为1200bps
273 1 //使用内部波特率发生器
274 1 //======================================================
275 1 //PCON = 0x80; //SMOD1=1,SMOD0=0 ???????
276 1 //PCON = 0x00; //SMOD1=0,SMOD0=0
277 1 SCON = 0xD0; //SM0=1,SM1=1,REN=1
278 1 SSTAT = 0x00;
279 1
280 1 BRGCON = 0x00; //配置内部波特率发生器
281 1 BRGR0 = 0xF0;
282 1 BRGR1 = 0x17;
283 1 BRGCON = 0x03;
284 1
285 1 IP0H &=~0x10; //设置中断服务优先级为0
286 1 IP0 &=~0x10;
287 1
288 1 ES = 1; //使能UART中断
289 1
290 1
291 1 //======================================================
292 1 //键盘中断初始化
293 1 //======================================================
294 1 KBPATN = 0xFF;
295 1 KBCON = 0x00; //PATN_SEL=0
296 1 KBMASK = 0x40; //P0.6:RS485通讯唤醒
297 1
298 1 IP1 &=~0x02; //中断优先级为0级(最低)
299 1 IP1H &=~0x02;
300 1
301 1 EKBI = 1; //键盘中断使能
302 1 }
303
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 6
304
305
306
307
308 //**********************************************************
309 //名称:MeterInit
310 //功能:
311 //说明:
312 //**********************************************************
313 void MeterInit(void)
314 {
315 1 uchar i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -